diff options
| author | yum <yum.food.vr@gmail.com> | 2022-10-23 19:48:34 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2022-10-23 19:48:34 -0700 |
| commit | 17ace0cb4ef65bda17dd36630da18dedaa8797b5 (patch) | |
| tree | e3e1bdfe333044a0a84dc80010089293c90bf3f3 | |
| parent | 0add404dee8124ec1d710416e5827ccef04bc00c (diff) | |
Rewrite FX and animation generators
* Fix bug where facial animations cause already-written letters to
change (!!!)
* Add libtastt.py to hold abstractions layered over libunity
* Fix
* libunity: Fix bug where integer equality state transition conditions
ignored the threshold
* libunity: Support placing animator states at different positions
| -rw-r--r-- | TaSTT.shader | 709 | ||||
| -rw-r--r-- | dev_cheatsheat.txt | 11 | ||||
| -rw-r--r-- | generate.sh | 21 | ||||
| -rw-r--r-- | generate_animations.sh | 31 | ||||
| -rw-r--r-- | generate_fx.py | 922 | ||||
| -rw-r--r-- | generate_utils.py | 46 | ||||
| -rw-r--r-- | libtastt.py | 390 | ||||
| -rw-r--r-- | libunity.py | 46 | ||||
| -rw-r--r-- | osc_ctrl.py | 1 |
9 files changed, 831 insertions, 1346 deletions
diff --git a/TaSTT.shader b/TaSTT.shader index 0d00abe..9c333cf 100644 --- a/TaSTT.shader +++ b/TaSTT.shader @@ -4,182 +4,182 @@ {
_MainTex ("Texture", 2D) = "white" {}
// software "engineering" LULW
- _Letter_Row00_Col00("_Letter_Row00_Col00", int) = 64
- _Letter_Row00_Col01("_Letter_Row00_Col01", int) = 64
- _Letter_Row00_Col02("_Letter_Row00_Col02", int) = 64
- _Letter_Row00_Col03("_Letter_Row00_Col03", int) = 64
- _Letter_Row00_Col04("_Letter_Row00_Col04", int) = 64
- _Letter_Row00_Col05("_Letter_Row00_Col05", int) = 64
- _Letter_Row00_Col06("_Letter_Row00_Col06", int) = 64
- _Letter_Row00_Col07("_Letter_Row00_Col07", int) = 64
- _Letter_Row00_Col08("_Letter_Row00_Col08", int) = 64
- _Letter_Row00_Col09("_Letter_Row00_Col09", int) = 64
- _Letter_Row00_Col10("_Letter_Row00_Col10", int) = 64
- _Letter_Row00_Col11("_Letter_Row00_Col11", int) = 64
- _Letter_Row00_Col12("_Letter_Row00_Col12", int) = 64
- _Letter_Row00_Col13("_Letter_Row00_Col13", int) = 64
- _Letter_Row00_Col14("_Letter_Row00_Col14", int) = 64
- _Letter_Row00_Col15("_Letter_Row00_Col15", int) = 64
- _Letter_Row00_Col16("_Letter_Row00_Col16", int) = 64
- _Letter_Row00_Col17("_Letter_Row00_Col17", int) = 64
- _Letter_Row00_Col18("_Letter_Row00_Col18", int) = 64
- _Letter_Row00_Col19("_Letter_Row00_Col19", int) = 64
- _Letter_Row00_Col20("_Letter_Row00_Col20", int) = 64
- _Letter_Row00_Col21("_Letter_Row00_Col21", int) = 64
- _Letter_Row01_Col00("_Letter_Row01_Col00", int) = 64
- _Letter_Row01_Col01("_Letter_Row01_Col01", int) = 64
- _Letter_Row01_Col02("_Letter_Row01_Col02", int) = 64
- _Letter_Row01_Col03("_Letter_Row01_Col03", int) = 64
- _Letter_Row01_Col04("_Letter_Row01_Col04", int) = 64
- _Letter_Row01_Col05("_Letter_Row01_Col05", int) = 64
- _Letter_Row01_Col06("_Letter_Row01_Col06", int) = 64
- _Letter_Row01_Col07("_Letter_Row01_Col07", int) = 64
- _Letter_Row01_Col08("_Letter_Row01_Col08", int) = 64
- _Letter_Row01_Col09("_Letter_Row01_Col09", int) = 64
- _Letter_Row01_Col10("_Letter_Row01_Col10", int) = 64
- _Letter_Row01_Col11("_Letter_Row01_Col11", int) = 64
- _Letter_Row01_Col12("_Letter_Row01_Col12", int) = 64
- _Letter_Row01_Col13("_Letter_Row01_Col13", int) = 64
- _Letter_Row01_Col14("_Letter_Row01_Col14", int) = 64
- _Letter_Row01_Col15("_Letter_Row01_Col15", int) = 64
- _Letter_Row01_Col16("_Letter_Row01_Col16", int) = 64
- _Letter_Row01_Col17("_Letter_Row01_Col17", int) = 64
- _Letter_Row01_Col18("_Letter_Row01_Col18", int) = 64
- _Letter_Row01_Col19("_Letter_Row01_Col19", int) = 64
- _Letter_Row01_Col20("_Letter_Row01_Col20", int) = 64
- _Letter_Row01_Col21("_Letter_Row01_Col21", int) = 64
- _Letter_Row02_Col00("_Letter_Row02_Col00", int) = 64
- _Letter_Row02_Col01("_Letter_Row02_Col01", int) = 64
- _Letter_Row02_Col02("_Letter_Row02_Col02", int) = 64
- _Letter_Row02_Col03("_Letter_Row02_Col03", int) = 64
- _Letter_Row02_Col04("_Letter_Row02_Col04", int) = 64
- _Letter_Row02_Col05("_Letter_Row02_Col05", int) = 64
- _Letter_Row02_Col06("_Letter_Row02_Col06", int) = 64
- _Letter_Row02_Col07("_Letter_Row02_Col07", int) = 64
- _Letter_Row02_Col08("_Letter_Row02_Col08", int) = 64
- _Letter_Row02_Col09("_Letter_Row02_Col09", int) = 64
- _Letter_Row02_Col10("_Letter_Row02_Col10", int) = 64
- _Letter_Row02_Col11("_Letter_Row02_Col11", int) = 64
- _Letter_Row02_Col12("_Letter_Row02_Col12", int) = 64
- _Letter_Row02_Col13("_Letter_Row02_Col13", int) = 64
- _Letter_Row02_Col14("_Letter_Row02_Col14", int) = 64
- _Letter_Row02_Col15("_Letter_Row02_Col15", int) = 64
- _Letter_Row02_Col16("_Letter_Row02_Col16", int) = 64
- _Letter_Row02_Col17("_Letter_Row02_Col17", int) = 64
- _Letter_Row02_Col18("_Letter_Row02_Col18", int) = 64
- _Letter_Row02_Col19("_Letter_Row02_Col19", int) = 64
- _Letter_Row02_Col20("_Letter_Row02_Col20", int) = 64
- _Letter_Row02_Col21("_Letter_Row02_Col21", int) = 64
- _Letter_Row03_Col00("_Letter_Row03_Col00", int) = 64
- _Letter_Row03_Col01("_Letter_Row03_Col01", int) = 64
- _Letter_Row03_Col02("_Letter_Row03_Col02", int) = 64
- _Letter_Row03_Col03("_Letter_Row03_Col03", int) = 64
- _Letter_Row03_Col04("_Letter_Row03_Col04", int) = 64
- _Letter_Row03_Col05("_Letter_Row03_Col05", int) = 64
- _Letter_Row03_Col06("_Letter_Row03_Col06", int) = 64
- _Letter_Row03_Col07("_Letter_Row03_Col07", int) = 64
- _Letter_Row03_Col08("_Letter_Row03_Col08", int) = 64
- _Letter_Row03_Col09("_Letter_Row03_Col09", int) = 64
- _Letter_Row03_Col10("_Letter_Row03_Col10", int) = 64
- _Letter_Row03_Col11("_Letter_Row03_Col11", int) = 64
- _Letter_Row03_Col12("_Letter_Row03_Col12", int) = 64
- _Letter_Row03_Col13("_Letter_Row03_Col13", int) = 64
- _Letter_Row03_Col14("_Letter_Row03_Col14", int) = 64
- _Letter_Row03_Col15("_Letter_Row03_Col15", int) = 64
- _Letter_Row03_Col16("_Letter_Row03_Col16", int) = 64
- _Letter_Row03_Col17("_Letter_Row03_Col17", int) = 64
- _Letter_Row03_Col18("_Letter_Row03_Col18", int) = 64
- _Letter_Row03_Col19("_Letter_Row03_Col19", int) = 64
- _Letter_Row03_Col20("_Letter_Row03_Col20", int) = 64
- _Letter_Row03_Col21("_Letter_Row03_Col21", int) = 64
- _Letter_Row04_Col00("_Letter_Row04_Col00", int) = 64
- _Letter_Row04_Col01("_Letter_Row04_Col01", int) = 64
- _Letter_Row04_Col02("_Letter_Row04_Col02", int) = 64
- _Letter_Row04_Col03("_Letter_Row04_Col03", int) = 64
- _Letter_Row04_Col04("_Letter_Row04_Col04", int) = 64
- _Letter_Row04_Col05("_Letter_Row04_Col05", int) = 64
- _Letter_Row04_Col06("_Letter_Row04_Col06", int) = 64
- _Letter_Row04_Col07("_Letter_Row04_Col07", int) = 64
- _Letter_Row04_Col08("_Letter_Row04_Col08", int) = 64
- _Letter_Row04_Col09("_Letter_Row04_Col09", int) = 64
- _Letter_Row04_Col10("_Letter_Row04_Col10", int) = 64
- _Letter_Row04_Col11("_Letter_Row04_Col11", int) = 64
- _Letter_Row04_Col12("_Letter_Row04_Col12", int) = 64
- _Letter_Row04_Col13("_Letter_Row04_Col13", int) = 64
- _Letter_Row04_Col14("_Letter_Row04_Col14", int) = 64
- _Letter_Row04_Col15("_Letter_Row04_Col15", int) = 64
- _Letter_Row04_Col16("_Letter_Row04_Col16", int) = 64
- _Letter_Row04_Col17("_Letter_Row04_Col17", int) = 64
- _Letter_Row04_Col18("_Letter_Row04_Col18", int) = 64
- _Letter_Row04_Col19("_Letter_Row04_Col19", int) = 64
- _Letter_Row04_Col20("_Letter_Row04_Col20", int) = 64
- _Letter_Row04_Col21("_Letter_Row04_Col21", int) = 64
- _Letter_Row05_Col00("_Letter_Row05_Col00", int) = 64
- _Letter_Row05_Col01("_Letter_Row05_Col01", int) = 64
- _Letter_Row05_Col02("_Letter_Row05_Col02", int) = 64
- _Letter_Row05_Col03("_Letter_Row05_Col03", int) = 64
- _Letter_Row05_Col04("_Letter_Row05_Col04", int) = 64
- _Letter_Row05_Col05("_Letter_Row05_Col05", int) = 64
- _Letter_Row05_Col06("_Letter_Row05_Col06", int) = 64
- _Letter_Row05_Col07("_Letter_Row05_Col07", int) = 64
- _Letter_Row05_Col08("_Letter_Row05_Col08", int) = 64
- _Letter_Row05_Col09("_Letter_Row05_Col09", int) = 64
- _Letter_Row05_Col10("_Letter_Row05_Col10", int) = 64
- _Letter_Row05_Col11("_Letter_Row05_Col11", int) = 64
- _Letter_Row05_Col12("_Letter_Row05_Col12", int) = 64
- _Letter_Row05_Col13("_Letter_Row05_Col13", int) = 64
- _Letter_Row05_Col14("_Letter_Row05_Col14", int) = 64
- _Letter_Row05_Col15("_Letter_Row05_Col15", int) = 64
- _Letter_Row05_Col16("_Letter_Row05_Col16", int) = 64
- _Letter_Row05_Col17("_Letter_Row05_Col17", int) = 64
- _Letter_Row05_Col18("_Letter_Row05_Col18", int) = 64
- _Letter_Row05_Col19("_Letter_Row05_Col19", int) = 64
- _Letter_Row05_Col20("_Letter_Row05_Col20", int) = 64
- _Letter_Row05_Col21("_Letter_Row05_Col21", int) = 64
- _Letter_Row06_Col00("_Letter_Row06_Col00", int) = 64
- _Letter_Row06_Col01("_Letter_Row06_Col01", int) = 64
- _Letter_Row06_Col02("_Letter_Row06_Col02", int) = 64
- _Letter_Row06_Col03("_Letter_Row06_Col03", int) = 64
- _Letter_Row06_Col04("_Letter_Row06_Col04", int) = 64
- _Letter_Row06_Col05("_Letter_Row06_Col05", int) = 64
- _Letter_Row06_Col06("_Letter_Row06_Col06", int) = 64
- _Letter_Row06_Col07("_Letter_Row06_Col07", int) = 64
- _Letter_Row06_Col08("_Letter_Row06_Col08", int) = 64
- _Letter_Row06_Col09("_Letter_Row06_Col09", int) = 64
- _Letter_Row06_Col10("_Letter_Row06_Col10", int) = 64
- _Letter_Row06_Col11("_Letter_Row06_Col11", int) = 64
- _Letter_Row06_Col12("_Letter_Row06_Col12", int) = 64
- _Letter_Row06_Col13("_Letter_Row06_Col13", int) = 64
- _Letter_Row06_Col14("_Letter_Row06_Col14", int) = 64
- _Letter_Row06_Col15("_Letter_Row06_Col15", int) = 64
- _Letter_Row06_Col16("_Letter_Row06_Col16", int) = 64
- _Letter_Row06_Col17("_Letter_Row06_Col17", int) = 64
- _Letter_Row06_Col18("_Letter_Row06_Col18", int) = 64
- _Letter_Row06_Col19("_Letter_Row06_Col19", int) = 64
- _Letter_Row06_Col20("_Letter_Row06_Col20", int) = 64
- _Letter_Row06_Col21("_Letter_Row06_Col21", int) = 64
- _Letter_Row07_Col00("_Letter_Row07_Col00", int) = 64
- _Letter_Row07_Col01("_Letter_Row07_Col01", int) = 64
- _Letter_Row07_Col02("_Letter_Row07_Col02", int) = 64
- _Letter_Row07_Col03("_Letter_Row07_Col03", int) = 64
- _Letter_Row07_Col04("_Letter_Row07_Col04", int) = 64
- _Letter_Row07_Col05("_Letter_Row07_Col05", int) = 64
- _Letter_Row07_Col06("_Letter_Row07_Col06", int) = 64
- _Letter_Row07_Col07("_Letter_Row07_Col07", int) = 64
- _Letter_Row07_Col08("_Letter_Row07_Col08", int) = 64
- _Letter_Row07_Col09("_Letter_Row07_Col09", int) = 64
- _Letter_Row07_Col10("_Letter_Row07_Col10", int) = 64
- _Letter_Row07_Col11("_Letter_Row07_Col11", int) = 64
- _Letter_Row07_Col12("_Letter_Row07_Col12", int) = 64
- _Letter_Row07_Col13("_Letter_Row07_Col13", int) = 64
- _Letter_Row07_Col14("_Letter_Row07_Col14", int) = 64
- _Letter_Row07_Col15("_Letter_Row07_Col15", int) = 64
- _Letter_Row07_Col16("_Letter_Row07_Col16", int) = 64
- _Letter_Row07_Col17("_Letter_Row07_Col17", int) = 64
- _Letter_Row07_Col18("_Letter_Row07_Col18", int) = 64
- _Letter_Row07_Col19("_Letter_Row07_Col19", int) = 64
- _Letter_Row07_Col20("_Letter_Row07_Col20", int) = 64
- _Letter_Row07_Col21("_Letter_Row07_Col21", int) = 64
+ _Letter_Row00_Col00("_Letter_Row00_Col00", float) = 64
+ _Letter_Row00_Col01("_Letter_Row00_Col01", float) = 64
+ _Letter_Row00_Col02("_Letter_Row00_Col02", float) = 64
+ _Letter_Row00_Col03("_Letter_Row00_Col03", float) = 64
+ _Letter_Row00_Col04("_Letter_Row00_Col04", float) = 64
+ _Letter_Row00_Col05("_Letter_Row00_Col05", float) = 64
+ _Letter_Row00_Col06("_Letter_Row00_Col06", float) = 64
+ _Letter_Row00_Col07("_Letter_Row00_Col07", float) = 64
+ _Letter_Row00_Col08("_Letter_Row00_Col08", float) = 64
+ _Letter_Row00_Col09("_Letter_Row00_Col09", float) = 64
+ _Letter_Row00_Col10("_Letter_Row00_Col10", float) = 64
+ _Letter_Row00_Col11("_Letter_Row00_Col11", float) = 64
+ _Letter_Row00_Col12("_Letter_Row00_Col12", float) = 64
+ _Letter_Row00_Col13("_Letter_Row00_Col13", float) = 64
+ _Letter_Row00_Col14("_Letter_Row00_Col14", float) = 64
+ _Letter_Row00_Col15("_Letter_Row00_Col15", float) = 64
+ _Letter_Row00_Col16("_Letter_Row00_Col16", float) = 64
+ _Letter_Row00_Col17("_Letter_Row00_Col17", float) = 64
+ _Letter_Row00_Col18("_Letter_Row00_Col18", float) = 64
+ _Letter_Row00_Col19("_Letter_Row00_Col19", float) = 64
+ _Letter_Row00_Col20("_Letter_Row00_Col20", float) = 64
+ _Letter_Row00_Col21("_Letter_Row00_Col21", float) = 64
+ _Letter_Row01_Col00("_Letter_Row01_Col00", float) = 64
+ _Letter_Row01_Col01("_Letter_Row01_Col01", float) = 64
+ _Letter_Row01_Col02("_Letter_Row01_Col02", float) = 64
+ _Letter_Row01_Col03("_Letter_Row01_Col03", float) = 64
+ _Letter_Row01_Col04("_Letter_Row01_Col04", float) = 64
+ _Letter_Row01_Col05("_Letter_Row01_Col05", float) = 64
+ _Letter_Row01_Col06("_Letter_Row01_Col06", float) = 64
+ _Letter_Row01_Col07("_Letter_Row01_Col07", float) = 64
+ _Letter_Row01_Col08("_Letter_Row01_Col08", float) = 64
+ _Letter_Row01_Col09("_Letter_Row01_Col09", float) = 64
+ _Letter_Row01_Col10("_Letter_Row01_Col10", float) = 64
+ _Letter_Row01_Col11("_Letter_Row01_Col11", float) = 64
+ _Letter_Row01_Col12("_Letter_Row01_Col12", float) = 64
+ _Letter_Row01_Col13("_Letter_Row01_Col13", float) = 64
+ _Letter_Row01_Col14("_Letter_Row01_Col14", float) = 64
+ _Letter_Row01_Col15("_Letter_Row01_Col15", float) = 64
+ _Letter_Row01_Col16("_Letter_Row01_Col16", float) = 64
+ _Letter_Row01_Col17("_Letter_Row01_Col17", float) = 64
+ _Letter_Row01_Col18("_Letter_Row01_Col18", float) = 64
+ _Letter_Row01_Col19("_Letter_Row01_Col19", float) = 64
+ _Letter_Row01_Col20("_Letter_Row01_Col20", float) = 64
+ _Letter_Row01_Col21("_Letter_Row01_Col21", float) = 64
+ _Letter_Row02_Col00("_Letter_Row02_Col00", float) = 64
+ _Letter_Row02_Col01("_Letter_Row02_Col01", float) = 64
+ _Letter_Row02_Col02("_Letter_Row02_Col02", float) = 64
+ _Letter_Row02_Col03("_Letter_Row02_Col03", float) = 64
+ _Letter_Row02_Col04("_Letter_Row02_Col04", float) = 64
+ _Letter_Row02_Col05("_Letter_Row02_Col05", float) = 64
+ _Letter_Row02_Col06("_Letter_Row02_Col06", float) = 64
+ _Letter_Row02_Col07("_Letter_Row02_Col07", float) = 64
+ _Letter_Row02_Col08("_Letter_Row02_Col08", float) = 64
+ _Letter_Row02_Col09("_Letter_Row02_Col09", float) = 64
+ _Letter_Row02_Col10("_Letter_Row02_Col10", float) = 64
+ _Letter_Row02_Col11("_Letter_Row02_Col11", float) = 64
+ _Letter_Row02_Col12("_Letter_Row02_Col12", float) = 64
+ _Letter_Row02_Col13("_Letter_Row02_Col13", float) = 64
+ _Letter_Row02_Col14("_Letter_Row02_Col14", float) = 64
+ _Letter_Row02_Col15("_Letter_Row02_Col15", float) = 64
+ _Letter_Row02_Col16("_Letter_Row02_Col16", float) = 64
+ _Letter_Row02_Col17("_Letter_Row02_Col17", float) = 64
+ _Letter_Row02_Col18("_Letter_Row02_Col18", float) = 64
+ _Letter_Row02_Col19("_Letter_Row02_Col19", float) = 64
+ _Letter_Row02_Col20("_Letter_Row02_Col20", float) = 64
+ _Letter_Row02_Col21("_Letter_Row02_Col21", float) = 64
+ _Letter_Row03_Col00("_Letter_Row03_Col00", float) = 64
+ _Letter_Row03_Col01("_Letter_Row03_Col01", float) = 64
+ _Letter_Row03_Col02("_Letter_Row03_Col02", float) = 64
+ _Letter_Row03_Col03("_Letter_Row03_Col03", float) = 64
+ _Letter_Row03_Col04("_Letter_Row03_Col04", float) = 64
+ _Letter_Row03_Col05("_Letter_Row03_Col05", float) = 64
+ _Letter_Row03_Col06("_Letter_Row03_Col06", float) = 64
+ _Letter_Row03_Col07("_Letter_Row03_Col07", float) = 64
+ _Letter_Row03_Col08("_Letter_Row03_Col08", float) = 64
+ _Letter_Row03_Col09("_Letter_Row03_Col09", float) = 64
+ _Letter_Row03_Col10("_Letter_Row03_Col10", float) = 64
+ _Letter_Row03_Col11("_Letter_Row03_Col11", float) = 64
+ _Letter_Row03_Col12("_Letter_Row03_Col12", float) = 64
+ _Letter_Row03_Col13("_Letter_Row03_Col13", float) = 64
+ _Letter_Row03_Col14("_Letter_Row03_Col14", float) = 64
+ _Letter_Row03_Col15("_Letter_Row03_Col15", float) = 64
+ _Letter_Row03_Col16("_Letter_Row03_Col16", float) = 64
+ _Letter_Row03_Col17("_Letter_Row03_Col17", float) = 64
+ _Letter_Row03_Col18("_Letter_Row03_Col18", float) = 64
+ _Letter_Row03_Col19("_Letter_Row03_Col19", float) = 64
+ _Letter_Row03_Col20("_Letter_Row03_Col20", float) = 64
+ _Letter_Row03_Col21("_Letter_Row03_Col21", float) = 64
+ _Letter_Row04_Col00("_Letter_Row04_Col00", float) = 64
+ _Letter_Row04_Col01("_Letter_Row04_Col01", float) = 64
+ _Letter_Row04_Col02("_Letter_Row04_Col02", float) = 64
+ _Letter_Row04_Col03("_Letter_Row04_Col03", float) = 64
+ _Letter_Row04_Col04("_Letter_Row04_Col04", float) = 64
+ _Letter_Row04_Col05("_Letter_Row04_Col05", float) = 64
+ _Letter_Row04_Col06("_Letter_Row04_Col06", float) = 64
+ _Letter_Row04_Col07("_Letter_Row04_Col07", float) = 64
+ _Letter_Row04_Col08("_Letter_Row04_Col08", float) = 64
+ _Letter_Row04_Col09("_Letter_Row04_Col09", float) = 64
+ _Letter_Row04_Col10("_Letter_Row04_Col10", float) = 64
+ _Letter_Row04_Col11("_Letter_Row04_Col11", float) = 64
+ _Letter_Row04_Col12("_Letter_Row04_Col12", float) = 64
+ _Letter_Row04_Col13("_Letter_Row04_Col13", float) = 64
+ _Letter_Row04_Col14("_Letter_Row04_Col14", float) = 64
+ _Letter_Row04_Col15("_Letter_Row04_Col15", float) = 64
+ _Letter_Row04_Col16("_Letter_Row04_Col16", float) = 64
+ _Letter_Row04_Col17("_Letter_Row04_Col17", float) = 64
+ _Letter_Row04_Col18("_Letter_Row04_Col18", float) = 64
+ _Letter_Row04_Col19("_Letter_Row04_Col19", float) = 64
+ _Letter_Row04_Col20("_Letter_Row04_Col20", float) = 64
+ _Letter_Row04_Col21("_Letter_Row04_Col21", float) = 64
+ _Letter_Row05_Col00("_Letter_Row05_Col00", float) = 64
+ _Letter_Row05_Col01("_Letter_Row05_Col01", float) = 64
+ _Letter_Row05_Col02("_Letter_Row05_Col02", float) = 64
+ _Letter_Row05_Col03("_Letter_Row05_Col03", float) = 64
+ _Letter_Row05_Col04("_Letter_Row05_Col04", float) = 64
+ _Letter_Row05_Col05("_Letter_Row05_Col05", float) = 64
+ _Letter_Row05_Col06("_Letter_Row05_Col06", float) = 64
+ _Letter_Row05_Col07("_Letter_Row05_Col07", float) = 64
+ _Letter_Row05_Col08("_Letter_Row05_Col08", float) = 64
+ _Letter_Row05_Col09("_Letter_Row05_Col09", float) = 64
+ _Letter_Row05_Col10("_Letter_Row05_Col10", float) = 64
+ _Letter_Row05_Col11("_Letter_Row05_Col11", float) = 64
+ _Letter_Row05_Col12("_Letter_Row05_Col12", float) = 64
+ _Letter_Row05_Col13("_Letter_Row05_Col13", float) = 64
+ _Letter_Row05_Col14("_Letter_Row05_Col14", float) = 64
+ _Letter_Row05_Col15("_Letter_Row05_Col15", float) = 64
+ _Letter_Row05_Col16("_Letter_Row05_Col16", float) = 64
+ _Letter_Row05_Col17("_Letter_Row05_Col17", float) = 64
+ _Letter_Row05_Col18("_Letter_Row05_Col18", float) = 64
+ _Letter_Row05_Col19("_Letter_Row05_Col19", float) = 64
+ _Letter_Row05_Col20("_Letter_Row05_Col20", float) = 64
+ _Letter_Row05_Col21("_Letter_Row05_Col21", float) = 64
+ _Letter_Row06_Col00("_Letter_Row06_Col00", float) = 64
+ _Letter_Row06_Col01("_Letter_Row06_Col01", float) = 64
+ _Letter_Row06_Col02("_Letter_Row06_Col02", float) = 64
+ _Letter_Row06_Col03("_Letter_Row06_Col03", float) = 64
+ _Letter_Row06_Col04("_Letter_Row06_Col04", float) = 64
+ _Letter_Row06_Col05("_Letter_Row06_Col05", float) = 64
+ _Letter_Row06_Col06("_Letter_Row06_Col06", float) = 64
+ _Letter_Row06_Col07("_Letter_Row06_Col07", float) = 64
+ _Letter_Row06_Col08("_Letter_Row06_Col08", float) = 64
+ _Letter_Row06_Col09("_Letter_Row06_Col09", float) = 64
+ _Letter_Row06_Col10("_Letter_Row06_Col10", float) = 64
+ _Letter_Row06_Col11("_Letter_Row06_Col11", float) = 64
+ _Letter_Row06_Col12("_Letter_Row06_Col12", float) = 64
+ _Letter_Row06_Col13("_Letter_Row06_Col13", float) = 64
+ _Letter_Row06_Col14("_Letter_Row06_Col14", float) = 64
+ _Letter_Row06_Col15("_Letter_Row06_Col15", float) = 64
+ _Letter_Row06_Col16("_Letter_Row06_Col16", float) = 64
+ _Letter_Row06_Col17("_Letter_Row06_Col17", float) = 64
+ _Letter_Row06_Col18("_Letter_Row06_Col18", float) = 64
+ _Letter_Row06_Col19("_Letter_Row06_Col19", float) = 64
+ _Letter_Row06_Col20("_Letter_Row06_Col20", float) = 64
+ _Letter_Row06_Col21("_Letter_Row06_Col21", float) = 64
+ _Letter_Row07_Col00("_Letter_Row07_Col00", float) = 64
+ _Letter_Row07_Col01("_Letter_Row07_Col01", float) = 64
+ _Letter_Row07_Col02("_Letter_Row07_Col02", float) = 64
+ _Letter_Row07_Col03("_Letter_Row07_Col03", float) = 64
+ _Letter_Row07_Col04("_Letter_Row07_Col04", float) = 64
+ _Letter_Row07_Col05("_Letter_Row07_Col05", float) = 64
+ _Letter_Row07_Col06("_Letter_Row07_Col06", float) = 64
+ _Letter_Row07_Col07("_Letter_Row07_Col07", float) = 64
+ _Letter_Row07_Col08("_Letter_Row07_Col08", float) = 64
+ _Letter_Row07_Col09("_Letter_Row07_Col09", float) = 64
+ _Letter_Row07_Col10("_Letter_Row07_Col10", float) = 64
+ _Letter_Row07_Col11("_Letter_Row07_Col11", float) = 64
+ _Letter_Row07_Col12("_Letter_Row07_Col12", float) = 64
+ _Letter_Row07_Col13("_Letter_Row07_Col13", float) = 64
+ _Letter_Row07_Col14("_Letter_Row07_Col14", float) = 64
+ _Letter_Row07_Col15("_Letter_Row07_Col15", float) = 64
+ _Letter_Row07_Col16("_Letter_Row07_Col16", float) = 64
+ _Letter_Row07_Col17("_Letter_Row07_Col17", float) = 64
+ _Letter_Row07_Col18("_Letter_Row07_Col18", float) = 64
+ _Letter_Row07_Col19("_Letter_Row07_Col19", float) = 64
+ _Letter_Row07_Col20("_Letter_Row07_Col20", float) = 64
+ _Letter_Row07_Col21("_Letter_Row07_Col21", float) = 64
// This does nothing, it's just used by the 'Do Nothing' animation.
_Dummy("_Dummy", int) = 0
}
@@ -195,6 +195,7 @@ CGPROGRAM
#pragma vertex vert
#pragma fragment frag
+ #pragma multi_compile
#include "UnityCG.cginc"
@@ -215,182 +216,182 @@ SamplerState sampler_linear_repeat;
float4 _MainTex_ST;
- int _Letter_Row00_Col00;
- int _Letter_Row00_Col01;
- int _Letter_Row00_Col02;
- int _Letter_Row00_Col03;
- int _Letter_Row00_Col04;
- int _Letter_Row00_Col05;
- int _Letter_Row00_Col06;
- int _Letter_Row00_Col07;
- int _Letter_Row00_Col08;
- int _Letter_Row00_Col09;
- int _Letter_Row00_Col10;
- int _Letter_Row00_Col11;
- int _Letter_Row00_Col12;
- int _Letter_Row00_Col13;
- int _Letter_Row00_Col14;
- int _Letter_Row00_Col15;
- int _Letter_Row00_Col16;
- int _Letter_Row00_Col17;
- int _Letter_Row00_Col18;
- int _Letter_Row00_Col19;
- int _Letter_Row00_Col20;
- int _Letter_Row00_Col21;
- int _Letter_Row01_Col00;
- int _Letter_Row01_Col01;
- int _Letter_Row01_Col02;
- int _Letter_Row01_Col03;
- int _Letter_Row01_Col04;
- int _Letter_Row01_Col05;
- int _Letter_Row01_Col06;
- int _Letter_Row01_Col07;
- int _Letter_Row01_Col08;
- int _Letter_Row01_Col09;
- int _Letter_Row01_Col10;
- int _Letter_Row01_Col11;
- int _Letter_Row01_Col12;
- int _Letter_Row01_Col13;
- int _Letter_Row01_Col14;
- int _Letter_Row01_Col15;
- int _Letter_Row01_Col16;
- int _Letter_Row01_Col17;
- int _Letter_Row01_Col18;
- int _Letter_Row01_Col19;
- int _Letter_Row01_Col20;
- int _Letter_Row01_Col21;
- int _Letter_Row02_Col00;
- int _Letter_Row02_Col01;
- int _Letter_Row02_Col02;
- int _Letter_Row02_Col03;
- int _Letter_Row02_Col04;
- int _Letter_Row02_Col05;
- int _Letter_Row02_Col06;
- int _Letter_Row02_Col07;
- int _Letter_Row02_Col08;
- int _Letter_Row02_Col09;
- int _Letter_Row02_Col10;
- int _Letter_Row02_Col11;
- int _Letter_Row02_Col12;
- int _Letter_Row02_Col13;
- int _Letter_Row02_Col14;
- int _Letter_Row02_Col15;
- int _Letter_Row02_Col16;
- int _Letter_Row02_Col17;
- int _Letter_Row02_Col18;
- int _Letter_Row02_Col19;
- int _Letter_Row02_Col20;
- int _Letter_Row02_Col21;
- int _Letter_Row03_Col00;
- int _Letter_Row03_Col01;
- int _Letter_Row03_Col02;
- int _Letter_Row03_Col03;
- int _Letter_Row03_Col04;
- int _Letter_Row03_Col05;
- int _Letter_Row03_Col06;
- int _Letter_Row03_Col07;
- int _Letter_Row03_Col08;
- int _Letter_Row03_Col09;
- int _Letter_Row03_Col10;
- int _Letter_Row03_Col11;
- int _Letter_Row03_Col12;
- int _Letter_Row03_Col13;
- int _Letter_Row03_Col14;
- int _Letter_Row03_Col15;
- int _Letter_Row03_Col16;
- int _Letter_Row03_Col17;
- int _Letter_Row03_Col18;
- int _Letter_Row03_Col19;
- int _Letter_Row03_Col20;
- int _Letter_Row03_Col21;
- int _Letter_Row04_Col00;
- int _Letter_Row04_Col01;
- int _Letter_Row04_Col02;
- int _Letter_Row04_Col03;
- int _Letter_Row04_Col04;
- int _Letter_Row04_Col05;
- int _Letter_Row04_Col06;
- int _Letter_Row04_Col07;
- int _Letter_Row04_Col08;
- int _Letter_Row04_Col09;
- int _Letter_Row04_Col10;
- int _Letter_Row04_Col11;
- int _Letter_Row04_Col12;
- int _Letter_Row04_Col13;
- int _Letter_Row04_Col14;
- int _Letter_Row04_Col15;
- int _Letter_Row04_Col16;
- int _Letter_Row04_Col17;
- int _Letter_Row04_Col18;
- int _Letter_Row04_Col19;
- int _Letter_Row04_Col20;
- int _Letter_Row04_Col21;
- int _Letter_Row05_Col00;
- int _Letter_Row05_Col01;
- int _Letter_Row05_Col02;
- int _Letter_Row05_Col03;
- int _Letter_Row05_Col04;
- int _Letter_Row05_Col05;
- int _Letter_Row05_Col06;
- int _Letter_Row05_Col07;
- int _Letter_Row05_Col08;
- int _Letter_Row05_Col09;
- int _Letter_Row05_Col10;
- int _Letter_Row05_Col11;
- int _Letter_Row05_Col12;
- int _Letter_Row05_Col13;
- int _Letter_Row05_Col14;
- int _Letter_Row05_Col15;
- int _Letter_Row05_Col16;
- int _Letter_Row05_Col17;
- int _Letter_Row05_Col18;
- int _Letter_Row05_Col19;
- int _Letter_Row05_Col20;
- int _Letter_Row05_Col21;
- int _Letter_Row06_Col00;
- int _Letter_Row06_Col01;
- int _Letter_Row06_Col02;
- int _Letter_Row06_Col03;
- int _Letter_Row06_Col04;
- int _Letter_Row06_Col05;
- int _Letter_Row06_Col06;
- int _Letter_Row06_Col07;
- int _Letter_Row06_Col08;
- int _Letter_Row06_Col09;
- int _Letter_Row06_Col10;
- int _Letter_Row06_Col11;
- int _Letter_Row06_Col12;
- int _Letter_Row06_Col13;
- int _Letter_Row06_Col14;
- int _Letter_Row06_Col15;
- int _Letter_Row06_Col16;
- int _Letter_Row06_Col17;
- int _Letter_Row06_Col18;
- int _Letter_Row06_Col19;
- int _Letter_Row06_Col20;
- int _Letter_Row06_Col21;
- int _Letter_Row07_Col00;
- int _Letter_Row07_Col01;
- int _Letter_Row07_Col02;
- int _Letter_Row07_Col03;
- int _Letter_Row07_Col04;
- int _Letter_Row07_Col05;
- int _Letter_Row07_Col06;
- int _Letter_Row07_Col07;
- int _Letter_Row07_Col08;
- int _Letter_Row07_Col09;
- int _Letter_Row07_Col10;
- int _Letter_Row07_Col11;
- int _Letter_Row07_Col12;
- int _Letter_Row07_Col13;
- int _Letter_Row07_Col14;
- int _Letter_Row07_Col15;
- int _Letter_Row07_Col16;
- int _Letter_Row07_Col17;
- int _Letter_Row07_Col18;
- int _Letter_Row07_Col19;
- int _Letter_Row07_Col20;
- int _Letter_Row07_Col21;
+ float _Letter_Row00_Col00;
+ float _Letter_Row00_Col01;
+ float _Letter_Row00_Col02;
+ float _Letter_Row00_Col03;
+ float _Letter_Row00_Col04;
+ float _Letter_Row00_Col05;
+ float _Letter_Row00_Col06;
+ float _Letter_Row00_Col07;
+ float _Letter_Row00_Col08;
+ float _Letter_Row00_Col09;
+ float _Letter_Row00_Col10;
+ float _Letter_Row00_Col11;
+ float _Letter_Row00_Col12;
+ float _Letter_Row00_Col13;
+ float _Letter_Row00_Col14;
+ float _Letter_Row00_Col15;
+ float _Letter_Row00_Col16;
+ float _Letter_Row00_Col17;
+ float _Letter_Row00_Col18;
+ float _Letter_Row00_Col19;
+ float _Letter_Row00_Col20;
+ float _Letter_Row00_Col21;
+ float _Letter_Row01_Col00;
+ float _Letter_Row01_Col01;
+ float _Letter_Row01_Col02;
+ float _Letter_Row01_Col03;
+ float _Letter_Row01_Col04;
+ float _Letter_Row01_Col05;
+ float _Letter_Row01_Col06;
+ float _Letter_Row01_Col07;
+ float _Letter_Row01_Col08;
+ float _Letter_Row01_Col09;
+ float _Letter_Row01_Col10;
+ float _Letter_Row01_Col11;
+ float _Letter_Row01_Col12;
+ float _Letter_Row01_Col13;
+ float _Letter_Row01_Col14;
+ float _Letter_Row01_Col15;
+ float _Letter_Row01_Col16;
+ float _Letter_Row01_Col17;
+ float _Letter_Row01_Col18;
+ float _Letter_Row01_Col19;
+ float _Letter_Row01_Col20;
+ float _Letter_Row01_Col21;
+ float _Letter_Row02_Col00;
+ float _Letter_Row02_Col01;
+ float _Letter_Row02_Col02;
+ float _Letter_Row02_Col03;
+ float _Letter_Row02_Col04;
+ float _Letter_Row02_Col05;
+ float _Letter_Row02_Col06;
+ float _Letter_Row02_Col07;
+ float _Letter_Row02_Col08;
+ float _Letter_Row02_Col09;
+ float _Letter_Row02_Col10;
+ float _Letter_Row02_Col11;
+ float _Letter_Row02_Col12;
+ float _Letter_Row02_Col13;
+ float _Letter_Row02_Col14;
+ float _Letter_Row02_Col15;
+ float _Letter_Row02_Col16;
+ float _Letter_Row02_Col17;
+ float _Letter_Row02_Col18;
+ float _Letter_Row02_Col19;
+ float _Letter_Row02_Col20;
+ float _Letter_Row02_Col21;
+ float _Letter_Row03_Col00;
+ float _Letter_Row03_Col01;
+ float _Letter_Row03_Col02;
+ float _Letter_Row03_Col03;
+ float _Letter_Row03_Col04;
+ float _Letter_Row03_Col05;
+ float _Letter_Row03_Col06;
+ float _Letter_Row03_Col07;
+ float _Letter_Row03_Col08;
+ float _Letter_Row03_Col09;
+ float _Letter_Row03_Col10;
+ float _Letter_Row03_Col11;
+ float _Letter_Row03_Col12;
+ float _Letter_Row03_Col13;
+ float _Letter_Row03_Col14;
+ float _Letter_Row03_Col15;
+ float _Letter_Row03_Col16;
+ float _Letter_Row03_Col17;
+ float _Letter_Row03_Col18;
+ float _Letter_Row03_Col19;
+ float _Letter_Row03_Col20;
+ float _Letter_Row03_Col21;
+ float _Letter_Row04_Col00;
+ float _Letter_Row04_Col01;
+ float _Letter_Row04_Col02;
+ float _Letter_Row04_Col03;
+ float _Letter_Row04_Col04;
+ float _Letter_Row04_Col05;
+ float _Letter_Row04_Col06;
+ float _Letter_Row04_Col07;
+ float _Letter_Row04_Col08;
+ float _Letter_Row04_Col09;
+ float _Letter_Row04_Col10;
+ float _Letter_Row04_Col11;
+ float _Letter_Row04_Col12;
+ float _Letter_Row04_Col13;
+ float _Letter_Row04_Col14;
+ float _Letter_Row04_Col15;
+ float _Letter_Row04_Col16;
+ float _Letter_Row04_Col17;
+ float _Letter_Row04_Col18;
+ float _Letter_Row04_Col19;
+ float _Letter_Row04_Col20;
+ float _Letter_Row04_Col21;
+ float _Letter_Row05_Col00;
+ float _Letter_Row05_Col01;
+ float _Letter_Row05_Col02;
+ float _Letter_Row05_Col03;
+ float _Letter_Row05_Col04;
+ float _Letter_Row05_Col05;
+ float _Letter_Row05_Col06;
+ float _Letter_Row05_Col07;
+ float _Letter_Row05_Col08;
+ float _Letter_Row05_Col09;
+ float _Letter_Row05_Col10;
+ float _Letter_Row05_Col11;
+ float _Letter_Row05_Col12;
+ float _Letter_Row05_Col13;
+ float _Letter_Row05_Col14;
+ float _Letter_Row05_Col15;
+ float _Letter_Row05_Col16;
+ float _Letter_Row05_Col17;
+ float _Letter_Row05_Col18;
+ float _Letter_Row05_Col19;
+ float _Letter_Row05_Col20;
+ float _Letter_Row05_Col21;
+ float _Letter_Row06_Col00;
+ float _Letter_Row06_Col01;
+ float _Letter_Row06_Col02;
+ float _Letter_Row06_Col03;
+ float _Letter_Row06_Col04;
+ float _Letter_Row06_Col05;
+ float _Letter_Row06_Col06;
+ float _Letter_Row06_Col07;
+ float _Letter_Row06_Col08;
+ float _Letter_Row06_Col09;
+ float _Letter_Row06_Col10;
+ float _Letter_Row06_Col11;
+ float _Letter_Row06_Col12;
+ float _Letter_Row06_Col13;
+ float _Letter_Row06_Col14;
+ float _Letter_Row06_Col15;
+ float _Letter_Row06_Col16;
+ float _Letter_Row06_Col17;
+ float _Letter_Row06_Col18;
+ float _Letter_Row06_Col19;
+ float _Letter_Row06_Col20;
+ float _Letter_Row06_Col21;
+ float _Letter_Row07_Col00;
+ float _Letter_Row07_Col01;
+ float _Letter_Row07_Col02;
+ float _Letter_Row07_Col03;
+ float _Letter_Row07_Col04;
+ float _Letter_Row07_Col05;
+ float _Letter_Row07_Col06;
+ float _Letter_Row07_Col07;
+ float _Letter_Row07_Col08;
+ float _Letter_Row07_Col09;
+ float _Letter_Row07_Col10;
+ float _Letter_Row07_Col11;
+ float _Letter_Row07_Col12;
+ float _Letter_Row07_Col13;
+ float _Letter_Row07_Col14;
+ float _Letter_Row07_Col15;
+ float _Letter_Row07_Col16;
+ float _Letter_Row07_Col17;
+ float _Letter_Row07_Col18;
+ float _Letter_Row07_Col19;
+ float _Letter_Row07_Col20;
+ float _Letter_Row07_Col21;
v2f vert (appdata v)
{
@@ -436,7 +437,7 @@ }
// Get the value of the parameter for the cell we're in.
- int GetLetterParameter(v2f i)
+ float GetLetterParameter(v2f i)
{
float CHAR_ROWS = 8.0;
float CHAR_COLS = 22.0;
@@ -819,7 +820,7 @@ fixed4 frag (v2f i) : SV_Target
{
- int letter = GetLetterParameter(i);
+ float letter = floor(GetLetterParameter(i));
float2 uv = GetLetter(i, letter);
fixed4 ret = _MainTex.Sample(sampler_linear_repeat, uv);
return ret;
diff --git a/dev_cheatsheat.txt b/dev_cheatsheat.txt index 50f0241..e23b8cc 100644 --- a/dev_cheatsheat.txt +++ b/dev_cheatsheat.txt @@ -6,3 +6,14 @@ Combining TaSTT_fx with a normal animator ./libunity.py guid_map --project_root=$(cd ..; pwd) --save_to guid.map ./libunity.py add_toggle --fx0 tst_fx_1.controller > tst_fx_2.controller ./libunity.py set_noop_anim --fx0 tst_fx_2.controller --guid_map guid.map > tst_fx_3.controller + +date +rm -rf generated/animations +./libunity.py guid_map --project_root=$(cd ..; pwd) --save_to guid.map +./libtastt.py gen_anims +./libtastt.py gen_fx > TaSTT_fx.controller +./libunity.py merge --fx0 ../FXGeneric.controller --fx1 ../FXSpecific.controller > FX0.controller +./libunity.py add_toggle --fx0 FX0.controller > FX1.controller +./libunity.py merge --fx0 FX1.controller --fx1 TaSTT_fx.controller > FX2.controller +./libunity.py set_noop_anim --fx0 FX2.controller --guid_map guid.map > FX3.controller +date diff --git a/generate.sh b/generate.sh index e1a718c..923e3bb 100644 --- a/generate.sh +++ b/generate.sh @@ -6,28 +6,11 @@ set -o xtrace echo 'Generating animations' -./generate_animations.sh - -set +o xtrace -echo 'Tab into unity and wait for it to import animations, then press enter.' -echo -echo 'This is necessary because the FX layer will reference animations by ' -echo 'their Unity GUID, which is generated during import.' -set -o xtrace -read -r line - -set +o xtrace -echo 'Now that animations have been generated, close Unity again.' -echo 'Unity can only really handle importing the generated FX layer at startup.' -echo 'If it reimports it at runtime, it hangs for a long time. No idea why!' -echo -echo 'Press enter once Unity is closed again.' -set -o xtrace -read -r line +./libtastt.py gen_anims echo 'Generating FX layer' -./generate_fx.py > TaSTT_fx.controller +./libtastt.py gen_fx > TaSTT_fx.controller echo 'Generating parameters' diff --git a/generate_animations.sh b/generate_animations.sh deleted file mode 100644 index 4e5ea84..0000000 --- a/generate_animations.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# One animation per slot, per letter. -# For upper-lower + a few symbols, this is roughly -# 6 * 14 * 128 \approx 8000 animations. -# Hopefully we don't hit some limit, lmao - -set -o errexit -set -o pipefail - -[ -d generated/animations ] && rm -rf generated || true -mkdir -p generated/animations - -for row in `seq 0 7`; do - ROW_PADDED=$(printf '%02d' $row) - for col in `seq 0 21`; do - COL_PADDED=$(printf '%02d' $col) - LETTER_SHADER_PARAM=_Letter_Row${ROW_PADDED}_Col${COL_PADDED} - for letter in `seq 0 79`; do - LETTER_PADDED=$(printf '%02d' $letter) - ANIM_NAME=${LETTER_SHADER_PARAM}_Letter${LETTER_PADDED} - FILENAME=generated/animations/${ANIM_NAME}.anim - cat template.anim.txt | \ - sed \ - -e "s/%LETTER_VALUE%/$letter/g" \ - -e "s/%LETTER_SHADER_PARAM%/$LETTER_SHADER_PARAM/g" \ - -e "s/%ANIMATION_NAME%/$ANIM_NAME/g" \ - > $FILENAME - done - done -done diff --git a/generate_fx.py b/generate_fx.py deleted file mode 100644 index e6d72c7..0000000 --- a/generate_fx.py +++ /dev/null @@ -1,922 +0,0 @@ -#!/usr/bin/env python3 - -# Template parameters: -# 1. %*_U% - the !u! identifier for a block. -# 2. %*_U2% - the & identifier for a block. -# 3. %ANIMATOR_PARAMETER_NAME% - the name of an animator parameter. -# 4. %SET_LETTERS_GUID% - the GUID from SetLetters.cs.meta -# 5. %SERIALIZED_VERSION% - the value of serializedVersion (usually a small int -# like 0-5) -# 6. %DEFAULT_GROUP_VAL% - the default value of the group parameters. -# 8. %DEFAULT_CELL_VAL% - the default value of the cell parameters. -# 9. %LAYER_NAME% - the name to use for the current animator layer. -# 10. %LAYER_STATE_MACHINE_U2% - the U2 to use for the current layer's state machine. -# 11. %TRANSITION_DST_STATE_U2% - in an animatorstatetransition, this specifies -# where we're transitioning to. -# 12. %TRANSITION_THRESHOLD% - the threshold to use when transitioning. - -from generate_utils import replaceMacros -from generate_utils import getDummyParam -from generate_utils import getResize0Param -from generate_utils import getResize1Param -from generate_utils import getLayerParam -from generate_utils import getSelectParam -from generate_utils import getEnableParam -from generate_utils import getShaderParam -from generate_utils import getAnimationPath -from generate_utils import NUM_LAYERS -from generate_utils import CHARS_PER_CELL - -import generate_utils - -# To debug, I recommend setting these values low and manually moving things -# around in the animator. Then run using Lyuma's avatar 3.0 emulator. -NUM_LETTERS=80 - -params = {} - -class EvilGlobalState: - u2_ticker = 0 -state = EvilGlobalState() - -def get_u2(class_id, state): - state.u2_ticker += 1 - return class_id + ("%05d" % (state.u2_ticker)) - -# These !u! and & numbers are, respectively, a class ID and an instance ID. -# The instance ID begins with the class ID then has a 5-digit suffix. -params["ANIMATOR_CONTROLLER_U"] = "91" -params["ANIMATOR_HEADER_U2"] = "9100000" - -params["ANIMATOR_STATE_MACHINE_U"] = "1107" - -params["MONO_BEHAVIOUR_U"] = "114" - -params["ANIMATOR_STATE_U"] = "1102" - -params["ANIMATOR_STATE_TRANSITION_U"] = "1101" - -HEADER=""" -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: -"""[1:][:-1] - -def genHeader(): - return replaceMacros(HEADER, params) -print(genHeader()) - -ANIMATOR_HEADER = """ ---- !u!%ANIMATOR_CONTROLLER_U% &%ANIMATOR_HEADER_U2% -AnimatorController: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: TaSTT_fx - serializedVersion: 5 -"""[1:][:-1] - -ANIMATOR_PARAMETER_HEADER = """ - m_AnimatorParameters: -"""[1:][:-1] - -ANIMATOR_PARAMETER_INT = """ - - m_Name: %ANIMATOR_PARAMETER_NAME% - m_Type: 3 - m_DefaultFloat: 0 - m_DefaultInt: 64 - m_DefaultBool: 0 - m_Controller: {fileID: %ANIMATOR_HEADER_U2%} -"""[1:][:-1] - -ANIMATOR_PARAMETER_BOOL = """ - - m_Name: %ANIMATOR_PARAMETER_NAME% - m_Type: 4 - m_DefaultFloat: 0 - m_DefaultInt: 0 - m_DefaultBool: 0 - m_Controller: {fileID: %ANIMATOR_HEADER_U2%} -"""[1:][:-1] - -ANIMATOR_LAYER_HEADER = """ - m_AnimatorLayers: -"""[1:][:-1] - -ANIMATOR_LAYER_TASTT = """ - - serializedVersion: 5 - m_Name: %TASTT_LAYER_NAME% - m_StateMachine: {fileID: %TASTT_LAYER_U2%} - m_Mask: {fileID: 0} - m_Motions: [] - m_Behaviours: [] - m_BlendingMode: 0 - m_SyncedLayerIndex: -1 - m_DefaultWeight: 1 - m_IKPass: 0 - m_SyncedLayerAffectsTiming: 0 - m_Controller: {fileID: %ANIMATOR_HEADER_U2%} -"""[1:][:-1] - -def genAnimator(state): - print(replaceMacros(ANIMATOR_HEADER, params)) - print(ANIMATOR_PARAMETER_HEADER) - - params["ANIMATOR_PARAMETER_NAME"] = getDummyParam() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getResizeEnableParam() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getResize0Param() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getResize1Param() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = getEnableParam() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getHandToggleParam() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = generate_utils.getHipToggleParam() - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - for i in range(0, NUM_LAYERS): - params["ANIMATOR_PARAMETER_NAME"] = getLayerParam(i) - print(replaceMacros(ANIMATOR_PARAMETER_INT, params)) - - params["ANIMATOR_PARAMETER_NAME"] = getSelectParam(i, 0) - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = getSelectParam(i, 1) - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = getSelectParam(i, 2) - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - params["ANIMATOR_PARAMETER_NAME"] = getSelectParam(i, 3) - print(replaceMacros(ANIMATOR_PARAMETER_BOOL, params)) - - print(replaceMacros(ANIMATOR_LAYER_HEADER, params)) - - for i in range(0, NUM_LAYERS): - params[getLayerParam(i) + "_LAYER_U2"] = get_u2("1107", state) - params["TASTT_LAYER_U2"] = params[getLayerParam(i) + "_LAYER_U2"] - params["TASTT_LAYER_NAME"] = getLayerParam(i) - print(replaceMacros(ANIMATOR_LAYER_TASTT, params)) - - params["TASTT_HAND_TOGGLE_LAYER_U2"] = get_u2("1107", state) - params["TASTT_LAYER_U2"] = params["TASTT_HAND_TOGGLE_LAYER_U2"] - params["TASTT_LAYER_NAME"] = generate_utils.getHandToggleParam() - print(replaceMacros(ANIMATOR_LAYER_TASTT, params)) - - params["TASTT_HIP_TOGGLE_LAYER_U2"] = get_u2("1107", state) - params["TASTT_LAYER_U2"] = params["TASTT_HIP_TOGGLE_LAYER_U2"] - params["TASTT_LAYER_NAME"] = generate_utils.getHipToggleParam() - print(replaceMacros(ANIMATOR_LAYER_TASTT, params)) - - params["TASTT_RESIZE_LAYER_U2"] = get_u2("1107", state) - params["TASTT_LAYER_U2"] = params["TASTT_RESIZE_LAYER_U2"] - params["TASTT_LAYER_NAME"] = "TaSTT_Resize" - print(replaceMacros(ANIMATOR_LAYER_TASTT, params)) -genAnimator(state) - -TASTT_LAYER_HEADER = """ ---- !u!%ANIMATOR_STATE_MACHINE_U% &%TASTT_LAYER_U2% -AnimatorStateMachine: - serializedVersion: 6 - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: %TASTT_LAYER_NAME% - m_ChildStates: -"""[1:][:-1] - -TASTT_LAYER_HEADER_CHILD_STATE = """ - - serializedVersion: 1 - m_State: {fileID: %TASTT_STATE_U2%} - m_Position: {x: 330, y: -60, z: 0} -"""[1:][:-1] - -TASTT_LAYER_FOOTER = """ - m_ChildStateMachines: [] - m_AnyStateTransitions: [] - m_EntryTransitions: [] - m_StateMachineTransitions: {} - m_StateMachineBehaviours: [] - m_AnyStatePosition: {x: 50, y: 20, z: 0} - m_EntryPosition: {x: 50, y: 120, z: 0} - m_ExitPosition: {x: 800, y: 120, z: 0} - m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} - m_DefaultState: {fileID: %TASTT_DEFAULT_STATE_U2%} -"""[1:][:-1] - -# State with one transition. -# Params: -# %TASTT_STATE_NAME%: the name of this state -# %TASTT_STATE_TRANSITION_U2%: the U2 of the transition to the next state -# %TASTT_STATE_TRANSITION_U2% -TASTT_UNARY_STATE = """ ---- !u!%ANIMATOR_STATE_U% &%TASTT_STATE_U2% -AnimatorState: - serializedVersion: 6 - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: %TASTT_STATE_NAME% - m_Speed: 1 - m_CycleOffset: 0 - m_Transitions: - - {fileID: %TASTT_STATE_TRANSITION_U2%} - m_StateMachineBehaviours: [] - m_Position: {x: 50, y: 50, z: 0} - m_IKOnFeet: 0 - m_WriteDefaultValues: 0 - m_Mirror: 0 - m_SpeedParameterActive: 0 - m_MirrorParameterActive: 0 - m_CycleOffsetParameterActive: 0 - m_TimeParameterActive: 0 - m_Motion: {fileID: 0} - m_Tag: - m_SpeedParameter: - m_MirrorParameter: - m_CycleOffsetParameter: - m_TimeParameter: -"""[1:][:-1] - -# State with two transitions. -# Params: -# %TASTT_STATE_NAME%: the name of this state -# %TASTT_STATE_TRANSITION_0_U2% -# %TASTT_STATE_TRANSITION_1_U2% -# %TASTT_STATE_TRANSITION_U2% -TASTT_BINARY_STATE = """ ---- !u!%ANIMATOR_STATE_U% &%TASTT_STATE_U2% -AnimatorState: - serializedVersion: 6 - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: %TASTT_STATE_NAME% - m_Speed: 1 - m_CycleOffset: 0 - m_Transitions: - - {fileID: %TASTT_STATE_TRANSITION_0_U2%} - - {fileID: %TASTT_STATE_TRANSITION_1_U2%} - m_StateMachineBehaviours: [] - m_Position: {x: 50, y: 50, z: 0} - m_IKOnFeet: 0 - m_WriteDefaultValues: 0 - m_Mirror: 0 - m_SpeedParameterActive: 0 - m_MirrorParameterActive: 0 - m_CycleOffsetParameterActive: 0 - m_TimeParameterActive: 0 - m_Motion: {fileID: 0} - m_Tag: - m_SpeedParameter: - m_MirrorParameter: - m_CycleOffsetParameter: - m_TimeParameter: -"""[1:][:-1] - -TASTT_NARY_STATE_HEADER = """ ---- !u!%ANIMATOR_STATE_U% &%TASTT_STATE_U2% -AnimatorState: - serializedVersion: 6 - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: %TASTT_STATE_NAME% - m_Speed: 1 - m_CycleOffset: 0 - m_Transitions: -"""[1:][:-1] - -TASTT_NARY_STATE_HEADER_TRANSITION = """ - - {fileID: %TASTT_STATE_TRANSITION_U2%} -"""[1:][:-1] - -TASTT_NARY_STATE_FOOTER = """ - m_StateMachineBehaviours: [] - m_Position: {x: 50, y: 50, z: 0} - m_IKOnFeet: 0 - m_WriteDefaultValues: 0 - m_Mirror: 0 - m_SpeedParameterActive: 0 - m_MirrorParameterActive: 0 - m_CycleOffsetParameterActive: 0 - m_TimeParameterActive: 0 - m_Motion: {fileID: 0} - m_Tag: - m_SpeedParameter: - m_MirrorParameter: - m_CycleOffsetParameter: - m_TimeParameter: -"""[1:][:-1] - -# Transition from TaSTT_Do_nothing. to TaSTT_Active. -# Params: -# %BOOL_PARAM% - the name of the parameter to branch on -# %THRESHOLD% - the condition to branch on (1 == true) -# %TASTT_ACTIVE_STATE_TRANSITION_U2% -# %TASTT_ROW_STATE_U2% - address of row state we're transitioning to -# A bizarre quirk: when branching false, m_ConditionMode = 2; else -# m_ConditionMode = 1. -TASTT_BOOL_STATE_UNARY_TRANSITION = """ ---- !u!1101 &%TASTT_STATE_TRANSITION_U2% -AnimatorStateTransition: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - m_Conditions: - - m_ConditionMode: %MODE% - m_ConditionEvent: %BOOL_PARAM% - m_EventTreshold: %THRESHOLD% - m_DstStateMachine: {fileID: 0} - m_DstState: {fileID: %DST_STATE_U2%} - m_Solo: 0 - m_Mute: 0 - m_IsExit: 0 - serializedVersion: 3 - m_TransitionDuration: 0 - m_TransitionOffset: 0 - m_ExitTime: 1 - m_HasExitTime: 0 - m_HasFixedDuration: 1 - m_InterruptionSource: 0 - m_OrderedInterruption: 1 - m_CanTransitionToSelf: 1 -"""[1:][:-1] - -TASTT_BOOL_STATE_BINARY_TRANSITION = """ ---- !u!1101 &%TASTT_STATE_TRANSITION_U2% -AnimatorStateTransition: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - m_Conditions: - - m_ConditionMode: %MODE0% - m_ConditionEvent: %BOOL_PARAM0% - m_EventTreshold: %THRESHOLD0% - - m_ConditionMode: %MODE1% - m_ConditionEvent: %BOOL_PARAM1% - m_EventTreshold: %THRESHOLD1% - m_DstStateMachine: {fileID: 0} - m_DstState: {fileID: %DST_STATE_U2%} - m_Solo: 0 - m_Mute: 0 - m_IsExit: 0 - serializedVersion: 3 - m_TransitionDuration: 0.5 - m_TransitionOffset: 0 - m_ExitTime: 1 - m_HasExitTime: 0 - m_HasFixedDuration: 1 - m_InterruptionSource: 0 - m_OrderedInterruption: 1 - m_CanTransitionToSelf: 1 -"""[1:][:-1] - -TASTT_INT_STATE_TRANSITION = """ ---- !u!1101 &%TASTT_STATE_TRANSITION_U2% -AnimatorStateTransition: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - m_Conditions: - - m_ConditionMode: 6 - m_ConditionEvent: %INT_PARAM% - m_EventTreshold: %TRANSITION_THRESHOLD% - m_DstStateMachine: {fileID: 0} - m_DstState: {fileID: %DST_STATE_U2%} - m_Solo: 0 - m_Mute: 0 - m_IsExit: 0 - serializedVersion: 3 - m_TransitionDuration: 0 - m_TransitionOffset: 0 - m_ExitTime: 1 - m_HasExitTime: 0 - m_HasFixedDuration: 1 - m_InterruptionSource: 0 - m_OrderedInterruption: 1 - m_CanTransitionToSelf: 1 -"""[1:][:-1] - -# State reached after TaSTT_Row*_Col*. -# One transition back up to TaSTT_Do_Nothing. -# Params: -# %TASTT_STATE_NAME%: TaSTT_Row[0-9][0-9]_Col[0-9][0-9]_Letter[0-9][0-9][0-9] -# %TASTT_ANIM_GUID%: GUID of the animation to play -# %TASTT_RESTART_TRANSITION_U2%: U2 of transition back to -# TaSTT_Do_Nothing. -TASTT_ANIM_STATE = """ ---- !u!1102 &%TASTT_STATE_U2% -AnimatorState: - serializedVersion: 6 - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: %TASTT_STATE_NAME% - m_Speed: 1 - m_CycleOffset: 0 - m_Transitions: - - {fileID: %TASTT_STATE_TRANSITION_U2%} - m_StateMachineBehaviours: [] - m_Position: {x: 50, y: 50, z: 0} - m_IKOnFeet: 0 - m_WriteDefaultValues: 0 - m_Mirror: 0 - m_SpeedParameterActive: 0 - m_MirrorParameterActive: 0 - m_CycleOffsetParameterActive: 0 - m_TimeParameterActive: 0 - m_Motion: {fileID: 7400000, guid: %TASTT_ANIM_GUID%, type: 2} - m_Tag: - m_SpeedParameter: - m_MirrorParameter: - m_CycleOffsetParameter: - m_TimeParameter: -"""[1:][:-1] - -TASTT_RESTART_TRANSITION = """ ---- !u!1101 &%TASTT_RESTART_TRANSITION_U2% -AnimatorStateTransition: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - m_Conditions: - - m_ConditionMode: 2 - m_ConditionEvent: TaSTT_Dummy - m_EventTreshold: 0 - m_DstStateMachine: {fileID: 0} - m_DstState: {fileID: %TASTT_DEFAULT_STATE_U2%} - m_Solo: 0 - m_Mute: 0 - m_IsExit: 0 - serializedVersion: 3 - m_TransitionDuration: 0 - m_TransitionOffset: 0 - m_ExitTime: 1 - m_HasExitTime: 0 - m_HasFixedDuration: 1 - m_InterruptionSource: 0 - m_OrderedInterruption: 1 - m_CanTransitionToSelf: 1 -"""[1:][:-1] - -def getAnimationGuid(anim_meta_filename): - with open(anim_meta_filename, 'r') as f: - for line in f: - if "guid" in line: - return line.split()[1] - -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_L%02d_Active" % which_layer - -def getS0StateName(which_layer, s0): - return "TaSTT_L%02d_S%02d" % (which_layer, s0) - -def getS1StateName(which_layer, s0, s1): - return "TaSTT_L%02d_S%02d_S%02d" % (which_layer, s0, s1) - -def getS2StateName(which_layer, s0, s1, s2): - return "TaSTT_L%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2) - -def getS3StateName(which_layer, s0, s1, s2, s3): - return "TaSTT_L%02d_S%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2, s3) - -def getLetterStateName(which_layer, s0, s1, s2, s3, letter): - return "TaSTT_L%02d_S%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, s3, letter) - -def getResizeStateName(e0, e1): - return "TaSTT_Resize_E%d_E%d" % (e0, e1) - -def getReturnHomeTransitionName(which_layer, s0, s1, s2, s3, letter): - return "TASTT_RETURN_HOME_TRANSITION_L%02d_S%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, s3, 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(which_layer) - params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - 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() - params["THRESHOLD"] = str(1) - params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["ACTIVE_STATE_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["ACTIVE_STATE_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Active state. - params["TASTT_STATE_U2"] = params["ACTIVE_STATE_U2"] - params["TASTT_STATE_NAME"] = getActiveStateName(which_layer) - params[getS0StateName(which_layer, 0) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_0_U2"] = params[getS0StateName(which_layer, 0) + "_TRANSITION_U2"] - params[getS0StateName(which_layer, 1) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_1_U2"] = params[getS0StateName(which_layer, 1) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_BINARY_STATE, params)) - - # S0 state transition. - for s0 in range(0,2): - params["TASTT_STATE_TRANSITION_U2"] = params[getS0StateName(which_layer, s0) + "_TRANSITION_U2"] - params["BOOL_PARAM"] = getSelectParam(which_layer, 0) - params["THRESHOLD"] = str(s0) - params["MODE"] = str(2 - s0) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params[getS0StateName(which_layer, s0) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getS0StateName(which_layer, s0) + "_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # S0 state. - for s0 in range(0,2): - params["TASTT_STATE_U2"] = params[getS0StateName(which_layer, s0) + "_U2"] - params["TASTT_STATE_NAME"] = getS0StateName(which_layer, s0) - params[getS1StateName(which_layer, s0, 0) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_0_U2"] = params[getS1StateName(which_layer, s0, 0) + "_TRANSITION_U2"] - params[getS1StateName(which_layer, s0, 1) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_1_U2"] = params[getS1StateName(which_layer, s0, 1) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_BINARY_STATE, params)) - - # S1 state transition. - for s0 in range(0,2): - for s1 in range(0,2): - params["TASTT_STATE_TRANSITION_U2"] = params[getS1StateName(which_layer, s0, s1) + "_TRANSITION_U2"] - params["BOOL_PARAM"] = getSelectParam(which_layer, 1) - params["THRESHOLD"] = str(s1) - params["MODE"] = str(2 - s1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params[getS1StateName(which_layer, s0, s1) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getS1StateName(which_layer, s0, s1) + "_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # S1 state. - for s0 in range(0,2): - for s1 in range(0,2): - params["TASTT_STATE_U2"] = params[getS1StateName(which_layer, s0, s1) + "_U2"] - params["TASTT_STATE_NAME"] = getS1StateName(which_layer, s0, s1) - params[getS2StateName(which_layer, s0, s1, 0) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_0_U2"] = params[getS2StateName(which_layer, s0, s1, 0) + "_TRANSITION_U2"] - params[getS2StateName(which_layer, s0, s1, 1) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_1_U2"] = params[getS2StateName(which_layer, s0, s1, 1) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_BINARY_STATE, params)) - - # S2 state transition. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - params["TASTT_STATE_TRANSITION_U2"] = params[getS2StateName(which_layer, s0, s1, s2) + "_TRANSITION_U2"] - params["BOOL_PARAM"] = getSelectParam(which_layer, 2) - params["THRESHOLD"] = str(s2) - params["MODE"] = str(2 - s2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params[getS2StateName(which_layer, s0, s1, s2) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getS2StateName(which_layer, s0, s1, s2) + "_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # S2 state. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - params["TASTT_STATE_U2"] = params[getS2StateName(which_layer, s0, s1, s2) + "_U2"] - params["TASTT_STATE_NAME"] = getS2StateName(which_layer, s0, s1, s2) - params[getS3StateName(which_layer, s0, s1, s2, 0) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_0_U2"] = params[getS3StateName(which_layer, s0, s1, s2, 0) + "_TRANSITION_U2"] - params[getS3StateName(which_layer, s0, s1, s2, 1) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_1_U2"] = params[getS3StateName(which_layer, s0, s1, s2, 1) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_BINARY_STATE, params)) - - # S3 state transition. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - params["TASTT_STATE_TRANSITION_U2"] = params[getS3StateName(which_layer, s0, s1, s2, s3) + "_TRANSITION_U2"] - params["BOOL_PARAM"] = getSelectParam(which_layer, 3) - params["THRESHOLD"] = str(s3) - params["MODE"] = str(2 - s3) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params[getS3StateName(which_layer, s0, s1, s2, s3) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getS3StateName(which_layer, s0, s1, s2, s3) + "_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # S3 state. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - params["TASTT_STATE_U2"] = params[getS3StateName(which_layer, s0, s1, s2, s3) + "_U2"] - params["TASTT_STATE_NAME"] = getS3StateName(which_layer, s0, s1, s2, s3) - print(replaceMacros(TASTT_NARY_STATE_HEADER, params)) - for letter in range(0, CHARS_PER_CELL): - params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_NARY_STATE_HEADER_TRANSITION, params)) - print(replaceMacros(TASTT_NARY_STATE_FOOTER, params)) - - # Letter state transition. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - for letter in range(0, CHARS_PER_CELL): - params["TASTT_STATE_TRANSITION_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_TRANSITION_U2"] - params["INT_PARAM"] = getLayerParam(which_layer) - params["TRANSITION_THRESHOLD"] = str(letter) - params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_U2"] - print(replaceMacros(TASTT_INT_STATE_TRANSITION, params)) - - # Letter state. - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - for letter in range(0, CHARS_PER_CELL): - params["TASTT_STATE_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_U2"] - params["TASTT_STATE_NAME"] = getLetterStateName(which_layer, s0, s1, s2, s3, letter) - transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, s3, 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, s3), 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 s3 in range(0,2): - for letter in range(0, CHARS_PER_CELL): - transition_name = getReturnHomeTransitionName(which_layer, s0, s1, s2, s3, 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"] - - params["TASTT_LAYER_NAME"] = getLayerParam(which_layer) - print(replaceMacros(TASTT_LAYER_HEADER, params)) - - params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - params["TASTT_STATE_U2"] = params["ACTIVE_STATE_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - for s0 in range(0,2): - params["TASTT_STATE_U2"] = params[getS0StateName(which_layer, s0) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - for s0 in range(0,2): - for s1 in range(0,2): - params["TASTT_STATE_U2"] = params[getS1StateName(which_layer, s0, s1) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - params["TASTT_STATE_U2"] = params[getS2StateName(which_layer, s0, s1, s2) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - params["TASTT_STATE_U2"] = params[getS3StateName(which_layer, s0, s1, s2, s3) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - for s0 in range(0,2): - for s1 in range(0,2): - for s2 in range(0,2): - for s3 in range(0,2): - for letter in range(0, CHARS_PER_CELL): - params["TASTT_STATE_U2"] = params[getLetterStateName(which_layer, s0, s1, s2, s3, letter) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - params["TASTT_DEFAULT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - print(replaceMacros(TASTT_LAYER_FOOTER, params)) - -for i in range(0, NUM_LAYERS): - genTasttLayer(state, i) - -def genTasttResizeLayer(state): - # Default state. - params["TASTT_DEFAULT_STATE_U2"] = get_u2("1102", state) - params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - 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_ANIM_STATE, params)) - - # Active state transition. - params["BOOL_PARAM"] = generate_utils.getResizeEnableParam() - params["THRESHOLD"] = str(1) - params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["ACTIVE_STATE_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["ACTIVE_STATE_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Active state. - params["TASTT_STATE_U2"] = params["ACTIVE_STATE_U2"] - params["TASTT_STATE_NAME"] = "TaSTT_Resize_Enabled" - print(replaceMacros(TASTT_NARY_STATE_HEADER, params)) - - for e0 in range(0, 2): - for e1 in range(0, 2): - params[getResizeStateName(e0, e1) + "_TRANSITION_U2"] = get_u2("1101", state) - params["TASTT_STATE_TRANSITION_U2"] = params[getResizeStateName(e0, e1) + "_TRANSITION_U2"] - print(replaceMacros(TASTT_NARY_STATE_HEADER_TRANSITION, params)) - - print(replaceMacros(TASTT_NARY_STATE_FOOTER, params)) - - # Animation transitions. - for e0 in range(0, 2): - params["THRESHOLD0"] = str(e0) - params["BOOL_PARAM0"] = generate_utils.getResize0Param() - params["MODE0"] = str(2 - e0) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - for e1 in range(0, 2): - params["THRESHOLD1"] = str(e1) - params["BOOL_PARAM1"] = generate_utils.getResize1Param() - params["MODE1"] = str(2 - e1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - - params["TASTT_STATE_TRANSITION_U2"] = params[getResizeStateName(e0, e1) + "_TRANSITION_U2"] - - params[getResizeStateName(e0, e1) + "_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params[getResizeStateName(e0, e1) + "_U2"] - - print(replaceMacros(TASTT_BOOL_STATE_BINARY_TRANSITION, params)) - - # Animation states. - for e0 in range(0, 2): - for e1 in range(0, 2): - params["TASTT_STATE_NAME"] = getResizeStateName(e0, e1) - params["TASTT_STATE_U2"] = params[getResizeStateName(e0, e1) + "_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" - elif e0 == 0 and e1 == 1: - anim_meta_filename += "TaSTT_Backplate_Resize_50_to_100.anim.meta" - elif e0 == 1 and e1 == 0: - anim_meta_filename += "TaSTT_Backplate_Resize_100_to_50.anim.meta" - elif e0 == 1 and e1 == 1: - anim_meta_filename += "TaSTT_Backplate_Resize_50_to_00.anim.meta" - 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"] - print(replaceMacros(TASTT_LAYER_HEADER, params)) - - params["TASTT_STATE_U2"] = params["TASTT_DEFAULT_STATE_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - params["TASTT_STATE_U2"] = params["ACTIVE_STATE_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - for e0 in range(0, 2): - for e1 in range(0, 2): - params["TASTT_STATE_U2"] = params[getResizeStateName(e0, e1) + "_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - print(replaceMacros(TASTT_LAYER_FOOTER, params)) - -genTasttResizeLayer(state) - -def genTasttHipToggleLayer(state): - # Default state. - params["TASTT_HIP_TOGGLE_ON_U2"] = get_u2("1102", state) - params["TASTT_DEFAULT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"] - params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"] - params["TASTT_STATE_NAME"] = generate_utils.getHipToggleParam() + "_ON" - params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - anim_meta_filename = "Animations/TaSTT_Lock_World_Enable.anim.meta" - params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) - print(replaceMacros(TASTT_ANIM_STATE, params)) - - # Active state transition. - params["BOOL_PARAM"] = generate_utils.getHipToggleParam() - params["THRESHOLD"] = str(0) - params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["TASTT_HIP_TOGGLE_OFF_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Active state. - params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"] - params["TASTT_STATE_NAME"] = generate_utils.getHipToggleParam() + "_OFF" - params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - anim_meta_filename = "Animations/TaSTT_Lock_World_Disable.anim.meta" - params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) - print(replaceMacros(TASTT_ANIM_STATE, params)) - - # Default state transition. - params["BOOL_PARAM"] = generate_utils.getHipToggleParam() - params["THRESHOLD"] = str(1) - params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["DST_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Layer - params["TASTT_LAYER_U2"] = params["TASTT_HIP_TOGGLE_LAYER_U2"] - params["TASTT_LAYER_NAME"] = generate_utils.getHipToggleParam() - print(replaceMacros(TASTT_LAYER_HEADER, params)) - - params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_ON_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - params["TASTT_STATE_U2"] = params["TASTT_HIP_TOGGLE_OFF_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - print(replaceMacros(TASTT_LAYER_FOOTER, params)) - -genTasttHipToggleLayer(state) - -def genTasttHandToggleLayer(state): - # Default state. - params["TASTT_HAND_TOGGLE_ON_U2"] = get_u2("1102", state) - params["TASTT_DEFAULT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"] - params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"] - params["TASTT_STATE_NAME"] = generate_utils.getHandToggleParam() + "_ON" - params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - anim_meta_filename = "Animations/TaSTT_Lock_Hand_Enable.anim.meta" - params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) - print(replaceMacros(TASTT_ANIM_STATE, params)) - - # Active state transition. - params["BOOL_PARAM"] = generate_utils.getHandToggleParam() - params["THRESHOLD"] = str(0) - params["MODE"] = str(2) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["TASTT_HAND_TOGGLE_OFF_U2"] = get_u2("1102", state) - params["DST_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Active state. - params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"] - params["TASTT_STATE_NAME"] = generate_utils.getHandToggleParam() + "_OFF" - params["TASTT_STATE_TRANSITION_U2"] = get_u2("1101", state) - anim_meta_filename = "Animations/TaSTT_Lock_Hand_Disable.anim.meta" - params["TASTT_ANIM_GUID"] = getAnimationGuid(anim_meta_filename) - print(replaceMacros(TASTT_ANIM_STATE, params)) - - # Default state transition. - params["BOOL_PARAM"] = generate_utils.getHandToggleParam() - params["THRESHOLD"] = str(1) - params["MODE"] = str(1) # See comment above TASTT_BOOL_STATE_UNARY_TRANSITION. - params["DST_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"] - print(replaceMacros(TASTT_BOOL_STATE_UNARY_TRANSITION, params)) - - # Layer - params["TASTT_LAYER_U2"] = params["TASTT_HAND_TOGGLE_LAYER_U2"] - params["TASTT_LAYER_NAME"] = generate_utils.getHandToggleParam() - print(replaceMacros(TASTT_LAYER_HEADER, params)) - - params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_ON_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - params["TASTT_STATE_U2"] = params["TASTT_HAND_TOGGLE_OFF_U2"] - print(replaceMacros(TASTT_LAYER_HEADER_CHILD_STATE, params)) - - print(replaceMacros(TASTT_LAYER_FOOTER, params)) - -genTasttHandToggleLayer(state) diff --git a/generate_utils.py b/generate_utils.py index 87e8e4f..e066eb1 100644 --- a/generate_utils.py +++ b/generate_utils.py @@ -12,6 +12,7 @@ def replaceMacros(lines, macro_defs): BOARD_ROWS=8 BOARD_COLS=22 INDEX_BITS=4 +#CHARS_PER_CELL=4 CHARS_PER_CELL=80 NUM_LAYERS=ceil((BOARD_ROWS * BOARD_COLS) / (2**INDEX_BITS)) @@ -47,10 +48,34 @@ def getToggleParam(): # Each layer controls a group of cells. There's only one letter per layer, thus # this is also the name of the parameter which sets the letter for a layer. -def getLayerParam(which_layer): +def getLayerParam(which_layer: int) -> str: return "TaSTT_L%02d" % which_layer -def getSelectParam(which_layer, which_select): +def getLayerName(which_layer: int) -> str: + return getLayerParam(which_layer) + +def getDefaultStateName(which_layer): + return "TaSTT_L%02d_Do_Nothing" % which_layer + +def getActiveStateName(which_layer): + return "TaSTT_L%02d_Active" % which_layer + +def getS0StateName(which_layer, s0): + return "TaSTT_L%02d_S%02d" % (which_layer, s0) + +def getS1StateName(which_layer, s0, s1): + return "TaSTT_L%02d_S%02d_S%02d" % (which_layer, s0, s1) + +def getS2StateName(which_layer, s0, s1, s2): + return "TaSTT_L%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2) + +def getS3StateName(which_layer, s0, s1, s2, s3): + return "TaSTT_L%02d_S%02d_S%02d_S%02d_S%02d" % (which_layer, s0, s1, s2, s3) + +def getLetterStateName(which_layer, s0, s1, s2, s3, letter): + return "TaSTT_L%02d_S%02d_S%02d_S%02d_S%02d_L%03d" % (which_layer, s0, s1, s2, s3, letter) + +def getSelectParam(which_layer: int, which_select: int) -> str: return "TaSTT_L%02d_S%02d" % (which_layer, which_select) def getEnableParam(): @@ -64,13 +89,28 @@ def getBoardIndex(which_layer, s0, s1, s2, s3): # those cells. return ((s0 * 8 + s1 * 4 + s2 * 2 + s3) * NUM_LAYERS + which_layer) % (BOARD_ROWS * BOARD_COLS) +def getShaderParamByRowCol(row, col): + return "_Letter_Row%02d_Col%02d" % (row, col) + # Mapping from layer to shader param. def getShaderParam(which_layer, s0, s1, s2, s3): index = getBoardIndex(which_layer, s0, s1, s2, s3) col = index % BOARD_COLS row = floor(index / BOARD_COLS) - return "_Letter_Row%02d_Col%02d" % (row, col) + + return getShaderParamByRowCol(row, col) + +def getAnimationName(row, col, letter): + return "R%02dC%02dL%02d" % (row, col, letter) + +def getAnimationNameByLayerAndIndex(which_layer, s0, s1, s2, s3, letter): + index = getBoardIndex(which_layer, s0, s1, s2, s3) + + col = index % BOARD_COLS + row = floor(index / BOARD_COLS) + + return "R%02dC%02dL%02d" % (row, col, letter) # Returns the path to the animation for the given shader parameter + letter. def getAnimationPath(shader_param, letter): diff --git a/libtastt.py b/libtastt.py new file mode 100644 index 0000000..9492e35 --- /dev/null +++ b/libtastt.py @@ -0,0 +1,390 @@ +#!/usr/bin/env python3 + +import argparse +import generate_utils +import libunity +import os +import pickle +import sys +import typing + +LETTER_ANIMATION_TEMPLATE = """ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: REPLACEME_ANIMATION_NAME + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: REPLACEME_LETTER_VALUE + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.016666668 + value: REPLACEME_LETTER_VALUE + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.REPLACEME_LETTER_PARAM + path: TaSTT + classID: 137 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 2794480623 + attribute: 2284639795 + script: {fileID: 0} + typeID: 137 + customType: 22 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: REPLACEME_LETTER_VALUE + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.016666668 + value: REPLACEME_LETTER_VALUE + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material.REPLACEME_LETTER_PARAM + path: TaSTT + classID: 137 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] +""" + +ANIMATOR_TEMPLATE = """ +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TaSTT_fx + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: [] +""" + +def generateAnimations(anim_dir, guid_map): + parser = libunity.UnityParser() + parser.parse(LETTER_ANIMATION_TEMPLATE) + + 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 = [] + + for row in range(0, generate_utils.BOARD_ROWS): + for col in range(0, generate_utils.BOARD_COLS): + for letter in range(0, generate_utils.CHARS_PER_CELL): + # Make a deep copy of the templates + node = anim_node.copy() + curve = curve_template.copy() + clip = node.mapping['AnimationClip'] + # Populate animation name + anim_name = generate_utils.getAnimationName(row, col, letter) + clip.mapping['m_Name'] = anim_name + # Populate letter value + for keyframe in curve.mapping['curve'].mapping['m_Curve'].sequence: + # For whatever reason, running unrelated animations s.a. + # facial expressions can have a slight effect on supposedly + # unrelated parameters, causing letter to flip. Add a + # little buffer to reduce the odds that this effect causes + # a letter to change after it has been written. + keyframe.mapping['value'] = str(letter + 0.1) + # Populate path to letter parameter + curve.mapping['attribute'] = "material.{}".format(generate_utils.getShaderParamByRowCol(row, col)) + # Add curve to animation + clip.mapping['m_FloatCurves'].sequence.append(curve) + clip.mapping['m_EditorCurves'].sequence.append(curve) + # Serialize animation to file + anim_path = anim_dir + anim_name + ".anim" + with open(anim_path, "w") as f: + f.write(libunity.unityYamlToString([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 generateFXController(anim: libunity.UnityAnimator) -> typing.Dict[int, libunity.UnityDocument]: + parser = libunity.UnityParser() + parser.parse(ANIMATOR_TEMPLATE) + anim.addNodes(parser.nodes) + + anim.addParameter(generate_utils.getEnableParam(), bool) + anim.addParameter(generate_utils.getDummyParam(), bool) + anim.addParameter(generate_utils.getResizeEnableParam(), bool) + anim.addParameter(generate_utils.getResize0Param(), bool) + anim.addParameter(generate_utils.getResize1Param(), bool) + anim.addParameter(generate_utils.getHipToggleParam(), bool) + anim.addParameter(generate_utils.getHandToggleParam(), bool) + anim.addParameter(generate_utils.getToggleParam(), bool) + + layers = {} + for i in range(0, generate_utils.NUM_LAYERS): + anim.addParameter(generate_utils.getLayerParam(i), int) + for j in range(0, generate_utils.INDEX_BITS): + anim.addParameter(generate_utils.getSelectParam(i, j), bool) + + layer = anim.addLayer(generate_utils.getLayerName(i)) + layers[i] = layer + + return layers + +def generateFXLayer(which_layer: int, anim: libunity.UnityAnimator, layer: + libunity.UnityDocument, gen_anim_dir: str): + is_default_state = True + default_state = anim.addAnimatorState(layer, + generate_utils.getDefaultStateName(which_layer), is_default_state) + + dy = 100 + active_state = anim.addAnimatorState(layer, + generate_utils.getActiveStateName(which_layer), dy = dy) + + active_state_transition = anim.addTransition(active_state) + enable_param = generate_utils.getEnableParam() + anim.addTransitionBooleanCondition(default_state, active_state_transition, + enable_param, True) + + s0_states = {} + for s0 in range(0,2): + dx = s0 * 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(which_layer, 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(which_layer, 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(which_layer, 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(which_layer, 3) + anim.addTransitionBooleanCondition(s2_states[s0][s1][s2], s3_state_transition, + s3_param, s3 != 0) + + 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) + + pass + +def generateFX(guid_map, gen_anim_dir): + anim = libunity.UnityAnimator() + + layers = generateFXController(anim) + + # TODO(yum) parallelize + for which_layer, layer in layers.items(): + print("Generating layer {}/{}".format(which_layer, len(layers.items())), file=sys.stderr) + generateFXLayer(which_layer, anim, layer, gen_anim_dir) + + return anim + +def parseArgs(): + parser = argparse.ArgumentParser() + parser.add_argument("cmd", type=str, help="") + parser.add_argument("--gen_dir", type=str, help="The directory under " + + "which all generated assets are placed") + parser.add_argument("--gen_anim_dir", type=str, help="The directory under " + + "which all generated animations are placed.") + parser.add_argument("--guid_map", type=str, help="The path to a file which will store guids") + args = parser.parse_args() + + if not args.gen_dir: + args.gen_dir = "generated/" + + if not args.gen_anim_dir: + args.gen_anim_dir = args.gen_dir + "animations/" + + if not args.guid_map: + args.guid_map = "guid.map" + + return args + +if __name__ == "__main__": + args = parseArgs() + + if args.cmd == "gen_anims": + guid_map = {} + with open(args.guid_map, 'rb') as f: + guid_map = pickle.load(f) + + os.makedirs(args.gen_anim_dir, exist_ok=True) + generateAnimations(args.gen_anim_dir, guid_map) + + with open(args.guid_map, 'wb') as f: + pickle.dump(guid_map, f) + elif args.cmd == "gen_fx": + guid_map = {} + with open(args.guid_map, 'rb') as f: + guid_map = pickle.load(f) + + print(str(generateFX(guid_map, args.gen_anim_dir))) + diff --git a/libunity.py b/libunity.py index a46dfe3..486df9f 100644 --- a/libunity.py +++ b/libunity.py @@ -146,7 +146,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: 7400000, guid: REPLACEME_ANIMATION_GUID, type: 2} + m_Motion: {} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -171,10 +171,10 @@ AnimatorStateTransition: serializedVersion: 3 m_TransitionDuration: 0 m_TransitionOffset: 0 - m_ExitTime: 1.0 - m_HasExitTime: 1 + m_ExitTime: 0.0 + m_HasExitTime: 0 m_HasFixedDuration: 1 - m_InterruptionSource: 0 + m_InterruptionSource: 2 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 """[1:][:-1] @@ -370,6 +370,11 @@ class UnityDocument(Mapping): def __str__(self): return super().__str__() + def copy(self): + result = super().copy() + result.class_id = self.class_id + return result + # Class representing a Unity AnimatorController. Implements manipulations, like # merging and reanchoring. class UnityAnimator(): @@ -379,7 +384,7 @@ class UnityAnimator(): self.next_id = 1000 * 1000 def __str__(self): - return unityAnimatorToString(self.nodes) + return unityYamlToString(self.nodes) def addNodes(self, nodes): for node in nodes: @@ -530,7 +535,7 @@ class UnityAnimator(): ctrl = param.addChildMapping('m_Controller') ctrl.mapping['fileID'] = anim.anchor - def addLayer(self, layer_name, add_to_head = False): + def addLayer(self, layer_name, add_to_head = False) -> UnityDocument: # Add layer to controller anim = self.peekNodeOfClass('91') layers = anim.mapping['AnimatorController'].mapping['m_AnimatorLayers'] @@ -589,7 +594,8 @@ class UnityAnimator(): self.nodes.append(layer) return layer - def addAnimatorState(self, layer, state_name, is_default_state = False): + def addAnimatorState(self, layer, state_name, is_default_state = False, + dx = 0, dy = 0) -> UnityDocument: # Create animation state parser = UnityParser() parser.parse(ANIMATION_STATE_TEMPLATE) @@ -610,8 +616,8 @@ class UnityAnimator(): child_state.mapping['serializedVersion'] = '1' child_state.addChildMapping('m_State').mapping['fileID'] = str(new_id) state_pos = child_state.addChildMapping('m_Position') - state_pos.mapping['x'] = '280' - state_pos.mapping['y'] = '80' + state_pos.mapping['x'] = str(280 + dx) + state_pos.mapping['y'] = str(80 + dy) state_pos.mapping['z'] = '0' if is_default_state: @@ -621,8 +627,10 @@ class UnityAnimator(): def setAnimatorStateAnimation(self, anim_state, anim_guid): anim_state.mapping['AnimatorState'].mapping['m_Motion'].mapping['guid'] = anim_guid + anim_state.mapping['AnimatorState'].mapping['m_Motion'].mapping['fileID'] = '7400000' + anim_state.mapping['AnimatorState'].mapping['m_Motion'].mapping['type'] = '2' - def addTransition(self, dst_state_id): + def addTransition(self, dst_state): # Create animation state parser = UnityParser() parser.parse(TRANSITION_TEMPLATE) @@ -634,7 +642,7 @@ class UnityAnimator(): node.class_id = "1101" node.anchor = str(new_id) state = node.mapping['AnimatorStateTransition'] - state.mapping['m_DstState'].mapping['fileID'] = dst_state_id + state.mapping['m_DstState'].mapping['fileID'] = dst_state.anchor self.nodes.append(node) return node @@ -781,7 +789,9 @@ class UnityAnimator(): cond = trans.mapping['AnimatorStateTransition'].mapping['m_Conditions'].addChildMapping() cond.mapping['m_ConditionMode'] = '6' cond.mapping['m_ConditionEvent'] = param - cond.mapping['m_EventThreshold'] = str(param_val) + # Curiously, the typo ("treshold" only has 1 'h') is needed for this to + # work, but not for boolean conditions to work. + cond.mapping['m_EventTreshold'] = str(param_val) # Register the transition with the `from_state`. if from_state: from_state_trans = from_state.mapping['AnimatorState'].mapping['m_Transitions'].addChildMapping() @@ -816,10 +826,10 @@ class UnityAnimator(): # TODO(yum) make a Transition class with methods for adding boolean # conditions - off_to_on = self.addTransition(on_anim.anchor) + off_to_on = self.addTransition(on_anim) self.addTransitionBooleanCondition(off_anim, off_to_on, toggle_param, True) - on_to_off = self.addTransition(off_anim.anchor) + on_to_off = self.addTransition(off_anim) self.addTransitionBooleanCondition(on_anim, on_to_off, toggle_param, False) def setNoopAnimations(self, guid_map, noop_anim_path): @@ -841,7 +851,7 @@ class UnityAnimator(): motion.mapping["guid"] = noop_anim_meta.guid motion.mapping["type"] = "2" -def unityAnimatorToString(nodes): +def unityYamlToString(nodes): lines = [] preamble = """ %YAML 1.1 @@ -880,7 +890,7 @@ class UnityParser: self.prev_states = [] def __str__(self): - return unityAnimatorToString(self.nodes) + return unityYamlToString(self.nodes) def pushState(self, state): self.prev_states.append(self.state) @@ -1131,7 +1141,8 @@ if __name__ == "__main__": anim0.merge(anim1) print("Serializing", file=sys.stderr) - print(unityAnimatorToString(anim0.nodes)) + print(unityYamlToString(anim0.nodes)) + elif args.cmd == "guid_map": if not args.project_root or not args.save_to: print("--project_root and --save_to required") @@ -1163,6 +1174,7 @@ if __name__ == "__main__": os.makedirs(anim_dir, exist_ok=True) anim.fixWriteDefaults(guid_map, anim_dir + "TaSTT_Reset_Animation.anim") print(str(anim)) + elif args.cmd == "gen_off_anims": if not args.fx0 or not args.guid_map: print("--fx0 and --guid_map required") diff --git a/osc_ctrl.py b/osc_ctrl.py index 5b4b3f6..14f4ba5 100644 --- a/osc_ctrl.py +++ b/osc_ctrl.py @@ -331,3 +331,4 @@ if __name__ == "__main__": while not sendMessageLazy(client, line, tx_state): continue clear() + |
