1 module creator.ext.param; 2 import inochi2d; 3 import inochi2d.fmt; 4 import inmath; 5 import creator; 6 7 class ExParameterGroup : Parameter { 8 public: 9 vec3 color = vec3(0.15, 0.15, 0.15); 10 Parameter[] children; 11 12 this() { super(); } 13 this(string name) { super(name, false); } 14 this(string name, Parameter[] children) { 15 super(name, false); 16 this.children = children; 17 } 18 19 override 20 void update() { 21 // This only gets called as the initiap part of the update step, and it should 22 // skip driven parameters, which are updated later. 23 auto enableDrivers = incActivePuppet().enableDrivers; 24 auto parameterDrivers = incActivePuppet().getParameterDrivers(); 25 foreach(ref child; children) { 26 if (!enableDrivers || child !in parameterDrivers) 27 child.update(); 28 } 29 } 30 31 override 32 FghjException deserializeFromFghj(Fghj data) { 33 data["groupUUID"].deserializeValue(this.uuid); 34 if (!data["name"].isEmpty) data["name"].deserializeValue(this.name); 35 if (!data["color"].isEmpty) data["color"].deserializeValue(this.color.vector); 36 if (!data["children"].isEmpty) data["children"].deserializeValue(this.children); 37 return null; 38 } 39 40 override 41 void serialize(ref InochiSerializer serializer) { 42 auto state = serializer.objectBegin; 43 serializer.putKey("groupUUID"); 44 serializer.putValue(uuid); 45 serializer.putKey("name"); 46 serializer.putValue(name); 47 serializer.putKey("color"); 48 serializer.serializeValue(color.vector); 49 serializer.putKey("children"); 50 serializer.serializeValue(children); 51 serializer.objectEnd(state); 52 } 53 54 override 55 void finalize(Puppet puppet) { 56 foreach(child; children) { 57 child.finalize(puppet); 58 } 59 } 60 } 61 62 void incRegisterExParameter() { 63 inParameterSetFactory((Fghj data) { 64 if (!data["groupUUID"].isEmpty) { 65 ExParameterGroup group = new ExParameterGroup; 66 data.deserializeValue(group); 67 return group; 68 } 69 70 Parameter param = new Parameter; 71 data.deserializeValue(param); 72 return param; 73 }); 74 }