예제 #1
0
        public AttributeProcessor(object setWhom, FieldInfo fi, STFReader stf, object defaultValue)
        {
            _fi = fi;

            P = () =>
            {
                switch (_fi.FieldType.Name.ToLower())
                {
                case "int":
                case "int32":
                {
                    int?i = defaultValue as int?;
                    _fi.SetValue(setWhom,
                                 stf.ReadIntBlock(i));
                    break;
                }

                case "bool":
                case "boolean":
                {
                    bool?b = defaultValue as bool?;
                    _fi.SetValue(setWhom,
                                 stf.ReadBoolBlock(b.Value));
                    break;
                }

                case "string":
                {
                    string s = defaultValue as string;
                    _fi.SetValue(setWhom,
                                 stf.ReadStringBlock(s));
                    break;
                }

                case "float":
                case "single":
                {
                    float?f = defaultValue as float?;
                    _fi.SetValue(setWhom,
                                 stf.ReadFloatBlock(STFReader.Units.Any, f));
                    break;
                }

                case "double":
                {
                    double?d = defaultValue as double?;
                    _fi.SetValue(setWhom,
                                 stf.ReadDoubleBlock(d));
                    break;
                }

                case "vector3":
                {
                    Vector3 v3 = (defaultValue as string).ParseVector3();
                    {
                        _fi.SetValue(setWhom,
                                     stf.ReadVector3Block(STFReader.Units.Any, v3));
                    }
                    break;
                }

                case "vector4":
                {
                    Vector4 v4 = (defaultValue as string).ParseVector4();
                    {
                        stf.ReadVector4Block(STFReader.Units.Any, ref v4);
                        _fi.SetValue(setWhom, v4);
                    }
                    break;
                }

                case "color":
                {
                    Color c = (defaultValue as string).ParseColor();
                    {
                        Vector4 v4 = new Vector4(-1);
                        stf.ReadVector4Block(STFReader.Units.Any, ref v4);
                        if (v4.W == -1)
                        {
                            c.A = 255;
                            c.R = v4.X == -1 ? c.R : (byte)v4.X;
                            c.G = v4.Y == -1 ? c.G : (byte)v4.Y;
                            c.B = v4.Z == -1 ? c.B : (byte)v4.Z;
                        }
                        else
                        {
                            c.A = v4.X == -1 ? c.A : (byte)v4.X;
                            c.R = v4.Y == -1 ? c.R : (byte)v4.Y;
                            c.G = v4.Z == -1 ? c.G : (byte)v4.Z;
                            c.B = v4.W == -1 ? c.B : (byte)v4.W;
                        }
                        _fi.SetValue(setWhom, c);
                    }
                    break;
                }
                }
            };
        }
예제 #2
0
        public AttributeProcessor(object setWhom, FieldInfo fi, STFReader stf, object defaultValue)
        {
            fieldInfo = fi;

            Processor = () =>
            {
                switch (fieldInfo.FieldType.Name.ToUpperInvariant())
                {
                case "INT":
                case "INT32":
                {
                    int?i = defaultValue as int?;
                    fieldInfo.SetValue(setWhom,
                                       stf.ReadIntBlock(i));
                    break;
                }

                case "BOOL":
                case "BOOLEAN":
                {
                    bool?b = defaultValue as bool?;
                    fieldInfo.SetValue(setWhom,
                                       stf.ReadBoolBlock(b.Value));
                    break;
                }

                case "STRING":
                {
                    string s = defaultValue as string;
                    fieldInfo.SetValue(setWhom,
                                       stf.ReadStringBlock(s));
                    break;
                }

                case "FLOAT":
                case "SINGLE":
                {
                    float?f = defaultValue as float?;
                    fieldInfo.SetValue(setWhom,
                                       stf.ReadFloatBlock(STFReader.Units.Any, f));
                    break;
                }

                case "DOUBLE":
                {
                    double?d = defaultValue as double?;
                    fieldInfo.SetValue(setWhom,
                                       stf.ReadDoubleBlock(d));
                    break;
                }

                case "VECTOR3":
                {
                    Vector3 v3 = (defaultValue as string).ParseVector3();
                    {
                        fieldInfo.SetValue(setWhom,
                                           stf.ReadVector3Block(STFReader.Units.Any, v3));
                    }
                    break;
                }

                case "VECTOR4":
                {
                    Vector4 v4 = (defaultValue as string).ParseVector4();
                    {
                        stf.ReadVector4Block(STFReader.Units.Any, ref v4);
                        fieldInfo.SetValue(setWhom, v4);
                    }
                    break;
                }

                case "COLOR":
                {
                    Color c = (defaultValue as string).ParseColor();
                    {
                        Vector4 v4 = new Vector4(-1);
                        stf.ReadVector4Block(STFReader.Units.Any, ref v4);
                        if (v4.W == -1)
                        {
                            c.A = 255;
                            c.R = v4.X == -1 ? c.R : (byte)v4.X;
                            c.G = v4.Y == -1 ? c.G : (byte)v4.Y;
                            c.B = v4.Z == -1 ? c.B : (byte)v4.Z;
                        }
                        else
                        {
                            c.A = v4.X == -1 ? c.A : (byte)v4.X;
                            c.R = v4.Y == -1 ? c.R : (byte)v4.Y;
                            c.G = v4.Z == -1 ? c.G : (byte)v4.Z;
                            c.B = v4.W == -1 ? c.B : (byte)v4.W;
                        }
                        fieldInfo.SetValue(setWhom, c);
                    }
                    break;
                }
                }
            };
        }