diff options
| author | yum <yum.food.vr@gmail.com> | 2022-10-02 17:24:17 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2022-10-02 17:24:17 -0700 |
| commit | 9222e7e9a21704dd6083adf8f53ce4437ba64a74 (patch) | |
| tree | 01edac9c00bfa46200a897ebf0a947006a20f13b /generate_fx.py | |
| parent | 704fd9a64fb8a8b1e929700c3e7413f8c3aaa2c2 (diff) | |
Add 'Do Nothing' animation
Per the VRC docs, state behaviors may not execute if the total length of
time in the state is < 0.02 seconds. Adding a 2-frame 'Do Nothing'
animation to the top of every layer seems to help with stability.
*shrug*
More cleanup:
* Generate a unique return-home transition for each terminal state
instead of reusing the same one.
* Use globally unique state names in animator.
* All animations are at least 2 frames long.
Diffstat (limited to 'generate_fx.py')
| -rw-r--r-- | generate_fx.py | 92 |
1 files changed, 58 insertions, 34 deletions
diff --git a/generate_fx.py b/generate_fx.py index 36779b7..f829174 100644 --- a/generate_fx.py +++ b/generate_fx.py @@ -388,7 +388,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.1 + m_TransitionDuration: 0.03 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 @@ -469,43 +469,45 @@ def getAnimationGuid(anim_meta_filename): if "guid" in line: return line.split()[1] -def getDefaultStateName(): - return "TaSTT_Do_Nothing" +def getDefaultStateName(which_layer): + return "TaSTT_L%02d_Do_Nothing" % which_layer + +def getDefaultStateNameResizeLayer(): + return "TaSTT_Resize_Do_Nothing" def getActiveStateName(which_layer): - return "TaSTT_Active" + return "TaSTT_L%02d_Active" % which_layer def getS0StateName(which_layer, s0): - return "TaSTT_S%02d" % (s0) + return "TaSTT_L%02d_S%02d" % (which_layer, s0) def getS1StateName(which_layer, s0, s1): - return "TaSTT_S%02d_S%02d" % (s0, s1) + return "TaSTT_L%02d_S%02d_S%02d" % (which_layer, s0, s1) def getS2StateName(which_layer, s0, s1, s2): - return "TaSTT_S%02d_S%02d_S%02d" % (s0, s1, s2) + return "TaSTT_L%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2) def getLetterStateName(which_layer, s0, s1, s2, letter): - return "TaSTT_S%02d_S%02d_S%02d_L%03d" % (s0, s1, s2, letter) + return "TaSTT_L%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, letter) def getResizeStateName(e0, e1): return "TaSTT_Resize_E%d_E%d" % (e0, e1) -def genTasttLayer(state, which_layer): - # Generate return-home transition - params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer] - params["BOOL_PARAM"] = getDummyParam() - params["THRESHOLD"] = str(0) - params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) +def getReturnHomeTransitionName(which_layer, s0, s1, s2, letter): + return "TASTT_RETURN_HOME_TRANSITION_L%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, letter) + +def getReturnHomeTransitionNameResizeLayer(e0, e1): + return "TASTT_RETURN_HOME_TRANSITION_E%d_E%d" % (e0, e1) +def genTasttLayer(state, which_layer): # Default state. + params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state) params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - params["TASTT_STATE_NAME"] = getDefaultStateName() + params["TASTT_STATE_NAME"] = getDefaultStateName(which_layer) params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - print(replaceMacros(TASTT_UNARY_STATE, params)) + anim_meta_filename = "Animations/TaSTT_Do_Nothing.anim.meta" + params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) + print(replaceMacros(TASTT_ANIM_STATE, params)) # Active state transition. params["BOOL_PARAM"] = getEnableParam(which_layer) @@ -610,11 +612,27 @@ def genTasttLayer(state, which_layer): for letter in range(0, CHARS_PER_CELL): params["TASTT_STATE_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, letter) + "_U2"] params["TASTT_STATE_NAME"] = getLetterStateName(which_layer, s0, s1, s2, letter) - params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_%02d_U2" % which_layer] + transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, letter) + "_U2" + params[transition_name] = get_u2("1101", state) + params["TASTT_STATE_TRANSITION_U2"] = params[transition_name] anim_meta_filename = getAnimationPath(getShaderParam(which_layer, s0, s1, s2), letter) + ".meta" params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) print(replaceMacros(TASTT_ANIM_STATE, params)) + # Return-home transitions. + for s0 in range(0,2): + for s1 in range(0,2): + for s2 in range(0,2): + for letter in range(0, CHARS_PER_CELL): + transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, letter) + "_U2" + params["TASTT_STATE_TRANSITION_U2"] = params[transition_name] + params["BOOL_PARAM"] = getDummyParam() + params["THRESHOLD"] = str(0) + params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. + params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] + print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) + + # TaSTT layer. params["TASTT_LAYER_U2"] = params[getLayerParam(which_layer) + "_LAYER_U2"] @@ -656,21 +674,14 @@ for i in range(0, NUM_LAYERS): genTasttLayer(state, i) def genTasttResizeLayer(state): - # Generate return-home transition - params["TASTT_RETURN_HOME_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_U2"] - params["BOOL_PARAM"] = getDummyParam() - params["THRESHOLD"] = str(0) - params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - # Default state. + params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state) params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - params["TASTT_STATE_NAME"] = getDefaultStateName() + params["TASTT_STATE_NAME"] = getDefaultStateNameResizeLayer() + anim_meta_filename = "Animations/TaSTT_Do_Nothing.anim.meta" + params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - print(replaceMacros(TASTT_UNARY_STATE, params)) + print(replaceMacros(TASTT_ANIM_STATE, params)) # Active state transition. params["BOOL_PARAM"] = generate_utils.getResizeEnableParam() @@ -715,7 +726,9 @@ def genTasttResizeLayer(state): for e1 in range(0, 2): params["TASTT_STATE_NAME"] = getResizeStateName(e0, e1) params["TASTT_STATE_U2"] = params[getResizeStateName(e0, e1) + "_U2"] - params["TASTT_STATE_TRANSITION_U2"] = params["TASTT_RETURN_HOME_TRANSITION_U2"] + transition_name = getReturnHomeTransitionNameResizeLayer(e0, e1) + "_U2" + params[transition_name] = get_u2("1101", state) + params["TASTT_STATE_TRANSITION_U2"] = params[transition_name] anim_meta_filename="Animations/" if e0 == 0 and e1 == 0: anim_meta_filename += "TaSTT_Backplate_Resize_00_to_50.anim.meta" @@ -728,6 +741,17 @@ def genTasttResizeLayer(state): params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) print(replaceMacros(TASTT_ANIM_STATE, params)) + # Generate return-home transitions + for e0 in range(0, 2): + for e1 in range(0, 2): + transition_name = getReturnHomeTransitionNameResizeLayer(e0, e1) + "_U2" + params["TASTT_STATE_TRANSITION_U2"] = params[transition_name] + params["BOOL_PARAM"] = getDummyParam() + params["THRESHOLD"] = str(0) + params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. + params["DST_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] + print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) + # Layer params["TASTT_LAYER_U2"] = params["TASTT_RESIZE_LAYER_U2"] params["TASTT_LAYER_NAME"] = params["TASTT_LAYER_NAME"] |
