summaryrefslogtreecommitdiffstats
path: root/libtastt.py
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-11-01 19:26:53 -0700
committeryum <yum.food.vr@gmail.com>2022-11-01 19:26:53 -0700
commiteb3fecd09f18233ba9e145a9092a7eb38ff965b8 (patch)
tree51d4bfb158e5fef63febc9d52ef9926de9366c37 /libtastt.py
parentd0120a858c2fd76bf5b5271ba5275e50565f109d (diff)
Combine 4 boolean select parameters into one
Should further improve reliability, especially in laggy environments. We'll see!
Diffstat (limited to 'libtastt.py')
-rw-r--r--libtastt.py151
1 files changed, 45 insertions, 106 deletions
diff --git a/libtastt.py b/libtastt.py
index 4fc273b..1ef2837 100644
--- a/libtastt.py
+++ b/libtastt.py
@@ -259,8 +259,7 @@ def generateFXController(anim: libunity.UnityAnimator) -> typing.Dict[int, libun
layer = anim.addLayer(generate_utils.getLayerName(i))
layers[i] = layer
- for i in range(0, generate_utils.INDEX_BITS):
- anim.addParameter(generate_utils.getSelectParam(i), bool)
+ anim.addParameter(generate_utils.getSelectParam(), int)
return layers
@@ -279,113 +278,53 @@ def generateFXLayer(which_layer: int, anim: libunity.UnityAnimator, layer:
anim.addTransitionBooleanCondition(default_state, active_state_transition,
enable_param, True)
- s0_states = {}
- for s0 in range(0,2):
- dx = s0 * 200
+ select_states = {}
+ for i in range(0, 2 ** generate_utils.INDEX_BITS):
+ dx = i * 200
dy = 200
- s0_states[s0] = anim.addAnimatorState(layer,
- generate_utils.getS0StateName(which_layer, s0),
- dx = dx, dy = dy)
- state = s0_states[s0]
-
- s0_state_transition = anim.addTransition(state)
- s0_param = generate_utils.getSelectParam(0)
- anim.addTransitionBooleanCondition(active_state, s0_state_transition,
- s0_param, s0 != 0)
-
- s1_states = {}
- for s0 in range(0,2):
- s1_states[s0] = {}
- for s1 in range(0,2):
- dx = ((s0 << 1) | (s1)) * 200
- dy = 300
- s1_states[s0][s1] = anim.addAnimatorState(layer,
- generate_utils.getS1StateName(which_layer, s0, s1),
- dx = dx, dy = dy)
- state = s1_states[s0][s1]
-
- s1_state_transition = anim.addTransition(state)
- s1_param = generate_utils.getSelectParam(1)
- anim.addTransitionBooleanCondition(s0_states[s0], s1_state_transition,
- s1_param, s1 != 0)
-
- s2_states = {}
- for s0 in range(0,2):
- s2_states[s0] = {}
- for s1 in range(0,2):
- s2_states[s0][s1] = {}
- for s2 in range(0,2):
- dx = ((s0 << 2) | (s1 << 1) | (s2)) * 200
- dy = 400
- s2_states[s0][s1][s2] = anim.addAnimatorState(layer,
- generate_utils.getS2StateName(which_layer, s0, s1, s2),
- dx = dx, dy = dy)
- state = s2_states[s0][s1][s2]
-
- s2_state_transition = anim.addTransition(state)
- s2_param = generate_utils.getSelectParam(2)
- anim.addTransitionBooleanCondition(s1_states[s0][s1], s2_state_transition,
- s2_param, s2 != 0)
-
- s3_states = {}
- for s0 in range(0,2):
- s3_states[s0] = {}
- for s1 in range(0,2):
- s3_states[s0][s1] = {}
- for s2 in range(0,2):
- s3_states[s0][s1][s2] = {}
- for s3 in range(0,2):
- dx = ((s0 << 3) | (s1 << 2) | (s2 << 1) | (s3)) * 200
- dy = 500
- s3_states[s0][s1][s2][s3] = anim.addAnimatorState(layer,
- generate_utils.getS3StateName(which_layer, s0, s1, s2, s3),
- dx = dx, dy = dy)
- state = s3_states[s0][s1][s2][s3]
-
- s3_state_transition = anim.addTransition(state)
- s3_param = generate_utils.getSelectParam(3)
- anim.addTransitionBooleanCondition(s2_states[s0][s1][s2], s3_state_transition,
- s3_param, s3 != 0)
+
+ select_states[i] = anim.addAnimatorState(layer,
+ generate_utils.getSelectStateName(which_layer, i), dx = dx, dy = dy)
+ state = select_states[i]
+
+ select_state_transition = anim.addTransition(state)
+ select_param = generate_utils.getSelectParam()
+ anim.addTransitionIntegerEqualityCondition(active_state,
+ select_state_transition, select_param, i)
l_states = {} # shorthand for `letter_states`
- for s0 in range(0,2):
- l_states[s0] = {}
- for s1 in range(0,2):
- l_states[s0][s1] = {}
- for s2 in range(0,2):
- l_states[s0][s1][s2] = {}
- for s3 in range(0,2):
- l_states[s0][s1][s2][s3] = {}
- for letter in range(0, generate_utils.CHARS_PER_CELL):
- dy = 600
- l_states[s0][s1][s2][s3][letter] = anim.addAnimatorState(layer,
- generate_utils.getLetterStateName(which_layer,
- s0, s1, s2, s3, letter),
- dy = dy)
- state = l_states[s0][s1][s2][s3][letter]
-
- animation_path = gen_anim_dir + \
- generate_utils.getAnimationNameByLayerAndIndex(
- which_layer, s0, s1, s2, s3, letter) + \
- ".anim"
- guid = guid_map[animation_path]
- anim.setAnimatorStateAnimation(state, guid)
-
- # TODO(yum) see if we can get away with reusing the
- # same transition object, but just stitch it into every
- # state.
- l_state_transition = anim.addTransition(state)
- l_param = generate_utils.getLayerParam(which_layer)
- #print("add condition on letter {}".format(letter),
- # file=sys.stderr)
- anim.addTransitionIntegerEqualityCondition(s3_states[s0][s1][s2][s3],
- l_state_transition, l_param, letter)
-
- home_state_transition = anim.addTransition(default_state)
- home_state_transition.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0'
- dummy_param = generate_utils.getDummyParam()
- anim.addTransitionBooleanCondition(state,
- home_state_transition, dummy_param, False)
+ for i in range(0, 2 ** generate_utils.INDEX_BITS):
+ l_states[i] = {}
+ for letter in range(0, generate_utils.CHARS_PER_CELL):
+ dy = 300
+ l_states[i][letter] = anim.addAnimatorState(layer,
+ generate_utils.getLetterStateName(which_layer,
+ i, letter),
+ dy = dy)
+ state = l_states[i][letter]
+
+ animation_path = gen_anim_dir + \
+ generate_utils.getAnimationNameByLayerAndIndex(
+ which_layer, i, letter) + \
+ ".anim"
+ guid = guid_map[animation_path]
+ anim.setAnimatorStateAnimation(state, guid)
+
+ # TODO(yum) see if we can get away with reusing the
+ # same transition object, but just stitch it into every
+ # state.
+ l_state_transition = anim.addTransition(state)
+ l_param = generate_utils.getLayerParam(which_layer)
+ #print("add condition on letter {}".format(letter),
+ # file=sys.stderr)
+ anim.addTransitionIntegerEqualityCondition(select_states[i],
+ l_state_transition, l_param, letter)
+
+ home_state_transition = anim.addTransition(default_state)
+ home_state_transition.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0'
+ dummy_param = generate_utils.getDummyParam()
+ anim.addTransitionBooleanCondition(state,
+ home_state_transition, dummy_param, False)
pass
# Generic toggle adding utility.