From a0df248fcd828c3c9580ed3be906b3580c6703d2 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 31 Mar 2024 21:08:11 -0600 Subject: [PATCH] int, bool property support for shaders --- src/kiss_flixel/ShaderFrontend.hx | 56 ++++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/kiss_flixel/ShaderFrontend.hx b/src/kiss_flixel/ShaderFrontend.hx index 27f6fdf..714b143 100644 --- a/src/kiss_flixel/ShaderFrontend.hx +++ b/src/kiss_flixel/ShaderFrontend.hx @@ -162,31 +162,39 @@ class ShaderFrontend implements FrontendPlugin { var suffix = ""; var propGenerated = true; + + function simpleProperty(_type:String) { + suffix = _type; + type.fields.push({ + pos: pos, + name: '${name}${_type}', + kind: FProp("get", "set", Helpers.parseComplexType(_type)), + access: [APublic] + }); + type.fields.push({ + pos: pos, + name: 'set_${name}${_type}', + kind: FFun({ + args: [{type: Helpers.parseComplexType(_type), name: "value"}], + expr: macro {this.data.$name.value = [value]; return value;} + }) + }); + type.fields.push({ + pos: pos, + name: 'get_${name}${_type}', + kind: FFun({ + args: [], + expr: macro return this.data.$name.value[0] + }) + }); + } switch (uType) { case "float": - suffix = "Float"; - type.fields.push({ - pos: pos, - name: '${name}Float', - kind: FProp("get", "set", Helpers.parseComplexType("Float")), - access: [APublic] - }); - type.fields.push({ - pos: pos, - name: 'set_${name}Float', - kind: FFun({ - args: [{type: Helpers.parseComplexType("Float"), name: "value"}], - expr: macro {this.data.$name.value = [value]; return value;} - }) - }); - type.fields.push({ - pos: pos, - name: 'get_${name}Float', - kind: FFun({ - args: [], - expr: macro return this.data.$name.value[0] - }) - }); + simpleProperty("Float"); + case "bool": + simpleProperty("Bool"); + case "int": + simpleProperty("Int"); // case "vec3": // case "vec4": default: @@ -196,7 +204,7 @@ class ShaderFrontend implements FrontendPlugin { if (propGenerated) { var expressionInterpreted = hInterp.execute(hParser.parseString(expression)); - var primitives = ["float"]; + var primitives = ["float", "int", "bool"]; if (primitives.contains(uType)) { expressionInterpreted = macro $v{expressionInterpreted}; }