diff options
| author | yum <yum.food.vr@gmail.com> | 2022-11-22 15:36:19 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2022-11-22 18:13:18 -0800 |
| commit | bd8b63a357bb374f5875f0fedf2d677589419810 (patch) | |
| tree | 0bb804459ebb7ad50e2a817bd842afd946339b30 /libtastt.py | |
| parent | 27a67666c320bed3b4a18e415eb9702b03f8f0b5 (diff) | |
Rework input controls
Press joystick once to start recording, again to stop. When you start
recording, any previous text on the board is cleared.
Add 2 visual indicators: one to indicate speech, another to indicate
that audio is paging.
Diffstat (limited to 'libtastt.py')
| -rw-r--r-- | libtastt.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libtastt.py b/libtastt.py index f580c1e..658e9ff 100644 --- a/libtastt.py +++ b/libtastt.py @@ -190,9 +190,54 @@ def generateClearAnimation(anim_dir, guid_map): guid_map[anim_path] = meta.guid guid_map[meta.guid] = anim_path +# Generate a toggle animation for a shader parameter. +def generateToggleAnimations(anim_dir, shader_param, guid_map): + print("Generating shader toggle animation", file=sys.stderr) + + parser = libunity.UnityParser() + parser.parse(LETTER_ANIMATION_TEMPLATE) + + # 0.0 represents false, 1.0 represents true. Don't forget that we add + # `UNITY_ANIMATION_FUDGE_MARGIN` to everything. + for shader_value in range(0, 2): + anim_node = parser.nodes[0] + anim_clip = anim_node.mapping['AnimationClip'] + curve_template = anim_clip.mapping['m_FloatCurves'].sequence[0] + anim_clip.mapping['m_FloatCurves'].sequence = [] + anim_clip.mapping['m_EditorCurves'].sequence = [] + + curve = curve_template.copy() + for keyframe in curve.mapping['curve'].mapping['m_Curve'].sequence: + keyframe.mapping['value'] = str(float(shader_value) + + UNITY_ANIMATION_FUDGE_MARGIN) + curve.mapping['attribute'] = "material.{}".format(shader_param) + curve.mapping['path'] = "World Constraint/Container/TaSTT" + # Add curve to animation + anim_clip.mapping['m_FloatCurves'].sequence.append(curve) + anim_clip.mapping['m_EditorCurves'].sequence.append(curve) + + # Serialize animation to file + anim_name = generate_utils.getClearAnimationName() + anim_suffix = "_Off" + if shader_value == 1: + anim_suffix = "_On" + anim_path = anim_dir + shader_param + anim_suffix + ".anim" + with open(anim_path, "w") as f: + f.write(libunity.unityYamlToString([anim_node])) + # Generate metadata + meta = libunity.Metadata() + with open(anim_path + ".meta", "w") as f: + f.write(str(meta)) + # Add metadata to guid map + guid_map[anim_path] = meta.guid + guid_map[meta.guid] = anim_path + def generateAnimations(anim_dir, guid_map): generateClearAnimation(args.gen_anim_dir, guid_map) + generateToggleAnimations(args.gen_anim_dir, generate_utils.getIndicator0Param(), guid_map) + generateToggleAnimations(args.gen_anim_dir, generate_utils.getIndicator1Param(), guid_map) + print("Generating letter animations", file=sys.stderr) parser = libunity.UnityParser() @@ -257,6 +302,8 @@ def generateFXController(anim: libunity.UnityAnimator) -> typing.Dict[int, libun anim.addParameter(generate_utils.getToggleParam(), bool) anim.addParameter(generate_utils.getSpeechNoiseEnableParam(), bool) anim.addParameter(generate_utils.getClearBoardParam(), bool) + anim.addParameter(generate_utils.getIndicator0Param(), bool) + anim.addParameter(generate_utils.getIndicator1Param(), bool) layers = {} for byte in range(0, generate_utils.BYTES_PER_CHAR): @@ -410,6 +457,16 @@ def generateFX(guid_map, gen_anim_dir): None, # No animation in the `off` state. generate_utils.getClearAnimationName() + ".anim", anim) + generateToggle(generate_utils.getIndicator0Param(), + gen_anim_dir, + generate_utils.getIndicator0Param() + "_Off.anim", + generate_utils.getIndicator0Param() + "_On.anim", + anim) + generateToggle(generate_utils.getIndicator1Param(), + gen_anim_dir, + generate_utils.getIndicator1Param() + "_Off.anim", + generate_utils.getIndicator1Param() + "_On.anim", + anim) return anim |
