public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out Vector4 value, out int mask)
        {
            var v = obj.GetField(fieldName);

            mask = 0;
            if (v != null && v.IsArray)
            {
                var ret = new Vector4();
                for (int i = 0; i < v.Count && i < 4; ++i)
                {
                    if (v[i].IsNumber)
                    {
                        mask  |= 1 << i;
                        ret[i] = v[i].n;
                    }
                }
                if (mask != 0)
                {
                    value = ret;
                    return(true);
                }
            }
            value = Vector4.zero;
            return(false);
        }
        public static bool IsModeMatched(UnitMaterialEditor gui, JSONObject args)
        {
            String mode;
            var    modeMatched = true;

            if (args != null && args.GetField(out mode, UnitMaterialEditor.Cfg.ArgsKey_Mode, String.Empty))
            {
                var renderMode = gui.FindPropEditor <ShaderGUI_RenderMode>();
                if (renderMode != null && !String.IsNullOrEmpty(mode))
                {
                    var names = mode.Split('|');
                    modeMatched = false;
                    for (int i = 0; i < names.Length; ++i)
                    {
                        var name = names[i].Trim();
                        if (name.Equals(renderMode._Mode.ToString(), StringComparison.OrdinalIgnoreCase))
                        {
                            modeMatched = true;
                            break;
                        }
                    }
                }
            }
            return(modeMatched);
        }
Beispiel #3
0
 public static int EvalLogicOpArg(UnitMaterialEditor gui, String express, out String returnValue)
 {
     returnValue = null;
     if (!String.IsNullOrEmpty(express))
     {
         var m = UnitMaterialEditor.Reg_LogicRef.Match(express);
         if (m.Success && m.Groups.Count > 2)
         {
             var rev = m.Groups[1].ToString().Trim() == "!";
             var id  = m.Groups[2].ToString().Trim();
             if (!String.IsNullOrEmpty(id))
             {
                 var ui = gui.FindPropEditor <UnitMaterialEditor>(id);
                 if (ui != null)
                 {
                     var b = ui.GetLogicOpResult(out returnValue);
                     if (rev)
                     {
                         b = !b;
                     }
                     return(b ? 1 : 0);
                 }
                 return(0);
             }
         }
         else
         {
             returnValue = express;
         }
     }
     return(-1);
 }
Beispiel #4
0
        public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out Vector4 value, out int comp)
        {
            var v = obj.GetField(fieldName);

            comp = 0;
            if (v != null && v.IsArray)
            {
                var ret = new Vector4();
                for (int i = 0; i < v.Count; ++i)
                {
                    if (v[i].IsNumber)
                    {
                        ret[i] = v[i].n;
                        ++comp;
                    }
                    else
                    {
                        break;
                    }
                }
                if (comp > 0)
                {
                    value = ret;
                    return(true);
                }
            }
            value = Vector4.zero;
            return(false);
        }
        public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out float value)
        {
            var v = obj.GetField(fieldName);

            if (v != null && v.IsNumber)
            {
                value = v.n;
                return(true);
            }
            value = 0;
            return(false);
        }
        public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out bool value)
        {
            var v = obj.GetField(fieldName);

            if (v != null && v.IsBool)
            {
                value = v.b;
                return(true);
            }
            value = false;
            return(false);
        }
        public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out String value)
        {
            var v = obj.GetField(fieldName);

            if (v != null && v.type == JSONObject.Type.STRING)
            {
                value = v.str;
                return(true);
            }
            value = String.Empty;
            return(false);
        }
Beispiel #8
0
        public static bool ParseValue(UnitMaterialEditor gui, JSONObject obj, String fieldName, out int value)
        {
            var v = obj.GetField(fieldName);

            if (v != null)
            {
                value = ( int )v.i;
                return(true);
            }
            value = 0;
            return(false);
        }
        public static bool TryParseVector4(UnitMaterialEditor gui, JSONObject obj, String fieldName, ref Vector4 value, out int comp)
        {
            var v = obj.GetField(fieldName);

            comp = 0;
            if (v != null)
            {
                if (v.IsArray)
                {
                    for (int i = 0; i < v.Count; ++i)
                    {
                        if (v[i].IsNumber)
                        {
                            value[i] = v[i].n;
                            ++comp;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if (comp > 0)
                    {
                        return(true);
                    }
                }
                else if (v.IsNumber)
                {
                    value[0] = v.f;
                    comp     = 1;
                    return(true);
                }
                else if (v.IsBool)
                {
                    value[0] = v.b ? 1 : 0;
                    comp     = 1;
                }
            }
            return(false);
        }
        public static int EvalLogicOpArg(UnitMaterialEditor gui, String express, MaterialProperty[] props, out String returnValue)
        {
            returnValue = null;
            if (!String.IsNullOrEmpty(express))
            {
                var m = UnitMaterialEditor.Reg_LogicRef.Match(express);
                if (m.Success && m.Groups.Count > 2)
                {
                    var rev = m.Groups[1].ToString().Trim() == "!";
                    var id  = m.Groups[2].ToString().Trim();
                    if (!String.IsNullOrEmpty(id))
                    {
                        var ui = gui.FindPropEditor <UnitMaterialEditor>(id);
                        if (ui != null)
                        {
                            var b = ui.GetLogicOpResult(out returnValue, props);
                            if (rev)
                            {
                                b = !b;
                            }
                            return(b ? 1 : 0);
                        }
                        else
                        {
                            var result   = false;
                            var material = gui.materialEditor.target as Material;
                            if (material != null && material.shader != null)
                            {
                                var shader = material.shader;
                                for (int i = 0; i < ShaderUtil.GetPropertyCount(shader); ++i)
                                {
                                    var name = ShaderUtil.GetPropertyName(shader, i);
                                    if (name == id)
                                    {
                                        switch (ShaderUtil.GetPropertyType(shader, i))
                                        {
                                        case ShaderUtil.ShaderPropertyType.Color:
                                            result = ShaderGUIHelper.Compare(">", material.GetColor(name), new Color(0, 0, 0, 0));
                                            break;

                                        case ShaderUtil.ShaderPropertyType.Float:
                                        case ShaderUtil.ShaderPropertyType.Range:
                                            result = material.GetFloat(name) > 0;
                                            break;

                                        case ShaderUtil.ShaderPropertyType.TexEnv:
                                            result = material.GetTexture(name) != null;
                                            break;

                                        case ShaderUtil.ShaderPropertyType.Vector:
                                            result = ShaderGUIHelper.Compare(">", material.GetVector(name), new Vector4(0, 0, 0, 0));
                                            break;
                                        }
                                        if (rev)
                                        {
                                            result = !result;
                                        }
                                        return(result ? 1 : 0);
                                    }
                                }
                            }
                        }
                        return(0);
                    }
                }
                else
                {
                    returnValue = express;
                }
            }
            return(-1);
        }
        public static int EvalLogicOpArg(UnitMaterialEditor gui, String express, MaterialProperty[] props)
        {
            String returnValue;

            return(EvalLogicOpArg(gui, express, props, out returnValue));
        }
        public static int ExcuteLogicOp(UnitMaterialEditor gui, MaterialProperty prop, MaterialProperty[] props, JSONObject args)
        {
            var _op = String.Empty;

            args.GetField(out _op, UnitMaterialEditor.Cfg.ArgsKey_OP, "==");
            if (prop == null)
            {
                var    ret = -1;
                String _id0, _id1;
                if (args.GetField(out _id0, UnitMaterialEditor.Cfg.ArgsKey_OP_Arg0, String.Empty))
                {
                    String ret0;
                    var    _0       = EvalLogicOpArg(gui, _id0, props, out ret0);
                    var    argIndex = 1;
                    while (args.GetField(out _id1, UnitMaterialEditor.Cfg.ArgsKey_OP_ArgPrefix + argIndex.ToString(), String.Empty))
                    {
                        String ret1;
                        var    _1 = EvalLogicOpArg(gui, _id1, props, out ret1);
                        if (_0 != -1 && _1 != -1)
                        {
                            ret = Compare(_op, _0, _1) ? 1 : 0;
                        }
                        else
                        {
                            if (ret0 != null && ret1 != null)
                            {
                                ret = Compare(_op, ret0, ret1) ? 1 : 0;
                            }
                        }
                        if (_op != "&&" && _op != "||")
                        {
                            break;
                        }
                        else
                        {
                            if (_op == "&&")
                            {
                                if (ret != 1)
                                {
                                    break;
                                }
                            }
                            else if (_op == "||")
                            {
                                if (ret == 1)
                                {
                                    break;
                                }
                            }
                        }
                        ++argIndex;
                        _0   = _1;
                        ret0 = ret1;
                    }
                }
                return(ret);
            }
            switch (prop.type)
            {
            case MaterialProperty.PropType.Texture: {
                var lh = prop.textureValue != null ? 1 : 0;
                int rh;
                if (!ShaderGUIHelper.ParseValue(gui, args, UnitMaterialEditor.Cfg.ArgsKey_OP_Ref, out rh))
                {
                    rh = 1;
                }
                return(ShaderGUIHelper.Compare(_op, lh, rh) ? 1 : 0);
            }

            case MaterialProperty.PropType.Vector: {
                Vector4 rh;
                int     mask;
                if (ShaderGUIHelper.ParseValue(gui, args, UnitMaterialEditor.Cfg.ArgsKey_OP_Ref, out rh, out mask))
                {
                    return(ShaderGUIHelper.Compare(_op, prop.vectorValue, rh, mask) ? 1 : 0);
                }
            }
            break;

            case MaterialProperty.PropType.Color: {
                Vector4 rh;
                int     mask;
                if (ShaderGUIHelper.ParseValue(gui, args, UnitMaterialEditor.Cfg.ArgsKey_OP_Ref, out rh, out mask))
                {
                    return(ShaderGUIHelper.Compare(_op, prop.colorValue, rh, mask) ? 1 : 0);
                }
            }
            break;

            case MaterialProperty.PropType.Range:
            case MaterialProperty.PropType.Float: {
                float rh = 0;
                ShaderGUIHelper.ParseValue(gui, args, UnitMaterialEditor.Cfg.ArgsKey_OP_Ref, out rh);
                return(ShaderGUIHelper.Compare(_op, prop.floatValue, rh) ? 1 : 0);
            }
            }
            return(-1);
        }
Beispiel #13
0
        public static int ExcuteLogicOp(UnitMaterialEditor gui, MaterialProperty prop, JSONObject args)
        {
            var _op = String.Empty;

            args.GetField(out _op, "op", "==");
            if (prop == null)
            {
                String _id0, _id1;
                if (args.GetField(out _id0, "arg0", String.Empty) && args.GetField(out _id1, "arg1", String.Empty))
                {
                    String ret0;
                    String ret1;
                    var    _0 = EvalLogicOpArg(gui, _id0, out ret0);
                    var    _1 = EvalLogicOpArg(gui, _id1, out ret1);
                    if (_0 != -1 && _1 != -1)
                    {
                        return(Compare(_op, _0, _1) ? 1 : 0);
                    }
                    else
                    {
                        if (ret0 != null && ret1 != null)
                        {
                            return(Compare(_op, ret0, ret1) ? 1 : 0);
                        }
                    }
                }
                return(-1);
            }
            switch (prop.type)
            {
            case MaterialProperty.PropType.Texture: {
                var lh = prop.textureValue != null ? 1 : 0;
                int rh;
                if (!ShaderGUIHelper.ParseValue(gui, args, "ref", out rh))
                {
                    rh = 1;
                }
                return(ShaderGUIHelper.Compare(_op, lh, rh) ? 1 : 0);
            }

            case MaterialProperty.PropType.Vector: {
                Vector4 rh;
                int     comp;
                if (ShaderGUIHelper.ParseValue(gui, args, "ref", out rh, out comp))
                {
                    return(ShaderGUIHelper.Compare(_op, prop.vectorValue, rh, comp) ? 1 : 0);
                }
            }
            break;

            case MaterialProperty.PropType.Color: {
                Vector4 rh;
                int     comp;
                if (ShaderGUIHelper.ParseValue(gui, args, "ref", out rh, out comp))
                {
                    var c = prop.colorValue;
                    return(ShaderGUIHelper.Compare(_op, new Vector4(c.r, c.g, c.b, c.r), rh, comp) ? 1 : 0);
                }
            }
            break;

            case MaterialProperty.PropType.Range:
            case MaterialProperty.PropType.Float: {
                float rh = 0;
                ShaderGUIHelper.ParseValue(gui, args, "ref", out rh);
                return(ShaderGUIHelper.Compare(_op, prop.floatValue, rh) ? 1 : 0);
            }
            }
            return(-1);
        }