summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TaSTT.shader709
-rw-r--r--dev_cheatsheat.txt11
-rw-r--r--generate.sh21
-rw-r--r--generate_animations.sh31
-rw-r--r--generate_fx.py922
-rw-r--r--generate_utils.py46
-rw-r--r--libtastt.py390
-rw-r--r--libunity.py46
-rw-r--r--osc_ctrl.py1
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()
+