diff options
| author | yum <yum.food.vr@gmail.com> | 2023-09-01 00:48:20 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2023-09-01 00:48:20 -0700 |
| commit | 833ef96f677a60197abb417651ac306820e225f0 (patch) | |
| tree | 40fe147399558d6452caba158b662902e37ea7c0 /Scripts | |
| parent | cb44e4744ac82d1d35547d12254cfea09dc63fae (diff) | |
Add `Enable phonemes` toggle to radial menu
Also:
* Fully scrub AudioSource references from prefab when not using
phonemes.
* Disable net sync on phoneme params when not using them. When not
synced, they don't count against the total memory limit.
* Use config file in generate_params.py
Diffstat (limited to 'Scripts')
| -rw-r--r-- | Scripts/generate_params.py | 26 | ||||
| -rw-r--r-- | Scripts/generate_utils.py | 3 | ||||
| -rw-r--r-- | Scripts/libtastt.py | 23 | ||||
| -rw-r--r-- | Scripts/libunity.py | 10 |
4 files changed, 44 insertions, 18 deletions
diff --git a/Scripts/generate_params.py b/Scripts/generate_params.py index 1f635e6..0d47fde 100644 --- a/Scripts/generate_params.py +++ b/Scripts/generate_params.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import app_config import argparse import generate_utils import sys @@ -27,6 +28,7 @@ INT_PARAM = """ valueType: 0 saved: 0 defaultValue: 0 + networkSynced: %SYNCED% """[1:] BOOL_PARAM = """ @@ -34,6 +36,7 @@ BOOL_PARAM = """ valueType: 2 saved: %SAVED% defaultValue: 0 + networkSynced: %SYNCED% """[1:] FLOAT_PARAM = """ @@ -41,9 +44,10 @@ FLOAT_PARAM = """ valueType: 1 saved: 0 defaultValue: %DEFAULT_FLOAT% + networkSynced: %SYNCED% """[1:] -def generate(): +def generate(cfg): result = "" # We're working with an 84-character board, and each FX layer is responsible @@ -51,6 +55,7 @@ def generate(): params = {} params["SAVED"] = "0" params["DEFAULT_FLOAT"] = "0" + params["SYNCED"] = "1" params["PARAM_NAME"] = generate_utils.getDummyParam() result += generate_utils.replaceMacros(BOOL_PARAM, params) @@ -61,9 +66,14 @@ def generate(): params["PARAM_NAME"] = generate_utils.getEllipsisParam() result += generate_utils.replaceMacros(BOOL_PARAM, params) + if not cfg["enable_phonemes"]: + params["SYNCED"] = "0" for i in range(5): params["PARAM_NAME"] = generate_utils.getSoundParam(i+1) result += generate_utils.replaceMacros(BOOL_PARAM, params) + params["PARAM_NAME"] = generate_utils.getEnablePhonemeParam() + result += generate_utils.replaceMacros(BOOL_PARAM, params) + params["SYNCED"] = "1" params["PARAM_NAME"] = generate_utils.getScaleParam() params["DEFAULT_FLOAT"] = "0.05" @@ -102,7 +112,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--old_params", type=str, help="The parameters to append to") parser.add_argument("--new_params", type=str, help="The parameters to create") - parser.add_argument("--bytes_per_char", type=str, help="The number of bytes to use to represent each character") + parser.add_argument("--config", type=str, help="The path to the app config.") parser.add_argument("--chars_per_sync", type=str, help="The number of characters to send on each sync event") args = parser.parse_args() @@ -112,12 +122,10 @@ if __name__ == "__main__": parser.print_help() parser.exit(1) - if not args.bytes_per_char or not args.chars_per_sync: - print("--bytes_per_char and --chars_per_sync required", file=sys.stderr) - parser.print_help() - parser.exit(1) - generate_utils.config.BYTES_PER_CHAR = int(args.bytes_per_char) - generate_utils.config.CHARS_PER_SYNC = int(args.chars_per_sync) + cfg = app_config.getConfig(args.config) + + generate_utils.config.BYTES_PER_CHAR = int(cfg["bytes_per_char"]) + generate_utils.config.CHARS_PER_SYNC = int(cfg["chars_per_sync"]) - append(args.old_params, generate(), args.new_params) + append(args.old_params, generate(cfg), args.new_params) diff --git a/Scripts/generate_utils.py b/Scripts/generate_utils.py index 395eaf7..c486201 100644 --- a/Scripts/generate_utils.py +++ b/Scripts/generate_utils.py @@ -42,6 +42,9 @@ def getToggleParam(): def getScaleParam(): return "TaSTT_Scale" +def getEnablePhonemeParam(): + return "TaSTT_Enable_Phoneme" + # When this is set to true, the board clears. def getClearBoardParam(): return "TaSTT_Clear_Board" diff --git a/Scripts/libtastt.py b/Scripts/libtastt.py index 4cf9357..b05a724 100644 --- a/Scripts/libtastt.py +++ b/Scripts/libtastt.py @@ -434,7 +434,7 @@ AnimatorController: # a letter to change after it has been written. UNITY_ANIMATION_FUDGE_MARGIN = 0.1 -def generateClearAnimation(anim_dir, guid_map): +def generateClearAnimation(anim_dir: str, guid_map: typing.Dict[str, str]): print("Generating board clearing animation", file=sys.stderr) parser = libunity.UnityParser() @@ -621,7 +621,7 @@ def generateScaleAnimation(anim_name: str, anim_dir: str, return meta.guid -def generateAnimations(anim_dir, guid_map): +def generateAnimations(anim_dir: str, guid_map: typing.Dict[str, str]): generateClearAnimation(anim_dir, guid_map) for chord_bits in range(2**5): @@ -694,6 +694,7 @@ def generateFXController(anim: libunity.UnityAnimator) -> typing.Dict[int, libun anim.addParameter(generate_utils.getToggleParam(), bool) anim.addParameter(generate_utils.getClearBoardParam(), bool) anim.addParameter(generate_utils.getScaleParam(), float) + anim.addParameter(generate_utils.getEnablePhonemeParam(), bool) for i in range(5): anim.addParameter(generate_utils.getSoundParam(i+1), bool) @@ -845,8 +846,12 @@ def generateSoundLayer(anim: libunity.UnityAnimator, layer = anim.addLayer("TaSTT_Sound") - # Create `a` state. - a_state = anim.addAnimatorState(layer, "a", is_default_state=True) + idle_state = anim.addAnimatorState(layer, "Idle", is_default_state=True, dy=-100) + a_state = anim.addAnimatorState(layer, "a") + + trans = anim.addTransition(a_state) + param = generate_utils.getEnablePhonemeParam() + anim.addTransitionBooleanCondition(idle_state, trans, param, True) for a_bool in range(2): dy = 100 @@ -924,27 +929,27 @@ def generateSoundLayer(anim: libunity.UnityAnimator, anim.setAnimatorStateAnimation(ax_ex_ix_ox_ux_state, anim_guid) # Create return-home transitions. - trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans = anim.addTransition(idle_state, dur_s = anim_len_s) trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' param = generate_utils.getSoundParam(1) anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - a_bool) - trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans = anim.addTransition(idle_state, dur_s = anim_len_s) trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' param = generate_utils.getSoundParam(2) anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - e_bool) - trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans = anim.addTransition(idle_state, dur_s = anim_len_s) trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' param = generate_utils.getSoundParam(3) anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - i_bool) - trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans = anim.addTransition(idle_state, dur_s = anim_len_s) trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' param = generate_utils.getSoundParam(4) anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - o_bool) - trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans = anim.addTransition(idle_state, dur_s = anim_len_s) trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' param = generate_utils.getSoundParam(5) anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - u_bool) diff --git a/Scripts/libunity.py b/Scripts/libunity.py index f79cd6f..39348d4 100644 --- a/Scripts/libunity.py +++ b/Scripts/libunity.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +from functools import partial + import argparse import copy import enum @@ -8,6 +10,7 @@ import os import pickle import random import sys +import typing # python3 -m pip install pyyaml # License: MIT. import yaml @@ -485,6 +488,13 @@ class UnityAnimator(): if hasattr(node, "forEach"): node.forEach(self.mergeIterator) + # Delete any key-value pairs where the value == the value. + def scrubReferencesByValue(self, node, values: typing.Set[str]): + if hasattr(node, "mapping"): + node.mapping = {k: v for k, v in node.mapping.items() if v not in values} + if hasattr(node, "forEach"): + node.forEach(partial(self.scrubReferencesByValue, values=values)) + def peekNodeOfClass(self, classId): for node in self.nodes: if node.class_id == classId: |
