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; } } }; }
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; } } }; }