internal Shader(SBR block) { block.VerifyID(TokenID.Terrain_Shader); Name = block.ReadString(); while (!block.EndOfBlock()) { using (SBR subBlock = block.ReadSubBlock()) { switch (subBlock.ID) { case TokenID.Terrain_TexSlots: int size = (int)subBlock.ReadUInt(); Textureslots = new List <TextureSlot>(size); for (int i = 0; i < size; ++i) { Textureslots.Add(new TextureSlot(subBlock.ReadSubBlock())); } break; case TokenID.Terrain_UVCalcs: size = (int)subBlock.ReadUInt(); UVCalcs = new List <UVCalc>(size); for (int i = 0; i < size; ++i) { UVCalcs.Add(new UVCalc(subBlock.ReadSubBlock())); } break; default: break; } } } }
public LodControl(SBR block) { block.VerifyID(TokenID.Lod_Control); DistanceLevelsHeader = new DistanceLevelsHeader(block.ReadSubBlock()); DistanceLevels = new DistanceLevels(block.ReadSubBlock()); block.VerifyEndOfBlock(); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { SBR sbrValue = (SBR)value; if (sbrValue == null) { return(new ValidationResult("SBR segment is required")); } if (!(sbrValue.SBR1 == "A" || sbrValue.SBR1 == "B" || sbrValue.SBR1 == "C" || sbrValue.SBR1 == "D" || sbrValue.SBR1 == "E" || sbrValue.SBR1 == "F" || sbrValue.SBR1 == "G" || sbrValue.SBR1 == "H" || sbrValue.SBR1 == "P" || sbrValue.SBR1 == "S" || sbrValue.SBR1 == "T" || sbrValue.SBR1 == "U")) { return(new ValidationResult("the only allowed values for SBR01 should be ABCDEFGHPSTU")); } string ErrorString = string.Empty; if (!(sbrValue.SBR2 == "18" || string.IsNullOrEmpty(sbrValue.SBR2))) { ErrorString += "SBR02 can only be 18 "; } if (!(string.IsNullOrEmpty(sbrValue.SBR5) || sbrValue.SBR5 == "12" || sbrValue.SBR5 == "13" || sbrValue.SBR5 == "14" || sbrValue.SBR5 == "15" || sbrValue.SBR5 == "16" || sbrValue.SBR5 == "41" || sbrValue.SBR5 == "42" || sbrValue.SBR5 == "47")) { ErrorString += "SBR05 can only be 12 13 14 15 16 41 42 43 47 "; } if (!(string.IsNullOrEmpty(sbrValue.SBR9) || sbrValue.SBR9 == "11" || sbrValue.SBR9 == "12" || sbrValue.SBR9 == "13" || sbrValue.SBR9 == "14" || sbrValue.SBR9 == "15" || sbrValue.SBR9 == "16" || sbrValue.SBR9 == "17" || sbrValue.SBR9 == "AM" || sbrValue.SBR5 == "BL" || sbrValue.SBR5 == "CH" || sbrValue.SBR5 == "CI" || sbrValue.SBR5 == "DS" || sbrValue.SBR5 == "FI" || sbrValue.SBR5 == "HM" || sbrValue.SBR5 == "LM" || sbrValue.SBR5 == "MA" || sbrValue.SBR5 == "MB" || sbrValue.SBR5 == "MC" || sbrValue.SBR5 == "OF" || sbrValue.SBR5 == "TV" || sbrValue.SBR5 == "VA" || sbrValue.SBR5 == "WC" || sbrValue.SBR5 == "ZZ")) { ErrorString += "SBR09 can only be 11 12 13 14 15 16 17 AM BL CH CI DS FI HM LM MA MB MC OF TV VA WC ZZ "; } ErrorString += ValidateElement.GetValidation(sbrValue.SBR3, Element.Situational, 1, 50, "SBR03") + ValidateElement.GetValidation(sbrValue.SBR4, Element.Situational, 1, 60, "SBR04"); if (ErrorString == string.Empty) { return(null); } return(new ValidationResult(ErrorString)); }
public LightModelConfig(SBR block) { block.VerifyID(TokenID.Light_Model_Cfg); Flags = block.ReadFlags(); UVOperations = new UVOperations(block.ReadSubBlock()); block.VerifyEndOfBlock(); }
public UVOperationCopy(SBR block) { block.VerifyID(TokenID.UV_OP_Copy); TextureAddressMode = block.ReadInt(); SourceUVIndex = block.ReadInt(); block.VerifyEndOfBlock(); }
public AnimationNode(SBR block) { block.VerifyID(TokenID.Anim_node); Name = block.Label; Controllers = new Controllers(block.ReadSubBlock()); block.VerifyEndOfBlock(); }
public SlerpRotation(SBR block) { block.VerifyID(TokenID.Slerp_Rot); Frame = block.ReadInt(); quaternion = new Quaternion(block.ReadFloat(), block.ReadFloat(), -block.ReadFloat(), block.ReadFloat()); block.VerifyEndOfBlock(); }
internal Range(SBR block, TokenID expectedToken) { block.VerifyID(expectedToken); LowerLimit = block.ReadFloat(); UpperLimit = block.ReadFloat(); block.VerifyEndOfBlock(); }
internal Size2D(SBR block, TokenID expectedToken) { block.VerifyID(expectedToken); Width = block.ReadFloat(); Height = block.ReadFloat(); block.VerifyEndOfBlock(); }
private void ReadTrackItemId(SBR block) { block.VerifyID(TokenID.TrItemId); block.ReadInt(); //don't mind the database id, should be 0 always (TrackDB) ItemId = block.ReadInt(); block.VerifyEndOfBlock(); }
public CarSpawnerObject(SBR block, int detailLevel, int tileX, int tileZ) { DetailLevel = detailLevel; CarFrequency = 5.0f; CarAverageSpeed = 20.0f; ReadBlock(block, tileX, tileZ); }
internal UVOperations(SBR block) { block.VerifyID(TokenID.UV_Ops); int count = Capacity = block.ReadInt(); while (count-- > 0) { SBR subBlock = block.ReadSubBlock(); switch (subBlock.ID) { case TokenID.UV_OP_Copy: Add(new UVOperationCopy(subBlock)); break; case TokenID.UV_Op_ReflectMapFull: Add(new UVOperationReflectMapFull(subBlock)); break; case TokenID.UV_Op_Reflectmap: Add(new UVOperationReflectMap(subBlock)); break; case TokenID.UV_Op_UniformScale: Add(new UVOperationUniformScale(subBlock)); break; case TokenID.UV_Op_NonUniformScale: Add(new UVOperationNonUniformScale(subBlock)); break; default: throw new InvalidDataException($"Unexpected uv_op: {subBlock.ID}"); } } block.VerifyEndOfBlock(); }
public terrain_shader(SBR block) { block.VerifyID(TokenID.terrain_shader); ShaderName = block.ReadString(); while (!block.EndOfBlock()) { using (var subBlock = block.ReadSubBlock()) { switch (subBlock.ID) { case TokenID.terrain_texslots: terrain_texslots = new terrain_texslot[subBlock.ReadUInt()]; for (var i = 0; i < terrain_texslots.Length; ++i) { terrain_texslots[i] = new terrain_texslot(subBlock.ReadSubBlock()); } break; case TokenID.terrain_uvcalcs: terrain_uvcalcs = new terrain_uvcalc[subBlock.ReadUInt()]; for (var i = 0; i < terrain_uvcalcs.Length; ++i) { terrain_uvcalcs[i] = new terrain_uvcalc(subBlock.ReadSubBlock()); } break; default: break; } } } }
public terrain_patchset(SBR block) { block.VerifyID(TokenID.terrain_patchset); while (!block.EndOfBlock()) { using (var subBlock = block.ReadSubBlock()) { switch (subBlock.ID) { case TokenID.terrain_patchset_distance: terrain_patchset_distance = subBlock.ReadInt(); break; case TokenID.terrain_patchset_npatches: terrain_patchset_npatches = subBlock.ReadInt(); break; case TokenID.terrain_patchset_patches: terrain_patchset_patches = new terrain_patchset_patch[terrain_patchset_npatches * terrain_patchset_npatches]; for (var i = 0; i < terrain_patchset_patches.Length; ++i) { terrain_patchset_patches[i] = new terrain_patchset_patch(subBlock.ReadSubBlock()); } break; } } } }
public GeometryInfo(SBR block) { block.VerifyID(TokenID.Geometry_Info); FaceNormals = block.ReadInt(); TextureLightCmds = block.ReadInt(); NodeXTriListIndices = block.ReadInt(); TriListIndices = block.ReadInt(); LineListIndices = block.ReadInt(); NodeXTriListIndices = block.ReadInt(); TriLists = block.ReadInt(); LineLists = block.ReadInt(); PointLists = block.ReadInt(); NodeXTriLists = block.ReadInt(); GeometryNodes = new GeometryNodes(block.ReadSubBlock()); { var subBlock = block.ReadSubBlock(); subBlock.VerifyID(TokenID.Geometry_Node_Map); GeometryNodeMap = new int[subBlock.ReadInt()]; for (var i = 0; i < GeometryNodeMap.Length; ++i) { GeometryNodeMap[i] = subBlock.ReadInt(); } subBlock.VerifyEndOfBlock(); } block.VerifyEndOfBlock(); }
protected void ReadBlock(SBR block, int tileX, int tileZ) { PositionHolder holder = new PositionHolder() { TileX = tileX, TileZ = tileZ, }; while (!block.EndOfBlock()) { using (var subBlock = block.ReadSubBlock()) { if (subBlock.ID == TokenID.UiD) { UiD = subBlock.ReadUInt(); } else { AddOrModifyObj(subBlock, holder); } } } worldPosition = PositionHolder.WorldPositionFromMSTSLocation(holder, UiD); if (this is HazardObject hazard) //remember the Quaternation component { hazard.Direction = holder.Direction; } }
public IndexedTriList(SBR block) { block.VerifyID(TokenID.Indexed_TriList); VertexIndices = new VertexIndices(block.ReadSubBlock()); { var subBlock = block.ReadSubBlock(); subBlock.VerifyID(TokenID.Normal_Idxs); NormalIndices = new int[subBlock.ReadInt()]; for (var i = 0; i < NormalIndices.Length; ++i) { NormalIndices[i] = subBlock.ReadInt(); subBlock.ReadInt(); // skip the '3' value - its purpose unknown } subBlock.VerifyEndOfBlock(); } { var subBlock = block.ReadSubBlock(); subBlock.VerifyID(TokenID.Flags); Flags = new uint[subBlock.ReadInt()]; for (var i = 0; i < Flags.Length; ++i) { Flags[i] = subBlock.ReadFlags(); } subBlock.VerifyEndOfBlock(); } block.VerifyEndOfBlock(); }
private void ReadLocation(SBR block, PositionHolder holder) { block.VerifyID(TokenID.Position); holder.Location = new Vector3(block.ReadFloat(), block.ReadFloat(), block.ReadFloat()); holder.LocationSet = true; block.VerifyEndOfBlock(); }
public Shape(SBR block) { block.VerifyID(TokenID.Shape); ShapeHeader = new ShapeHeader(block.ReadSubBlock()); Volumes = new Volumes(block.ReadSubBlock()); ShaderNames = new ShaderNames(block.ReadSubBlock()); TextureFilterNames = new TextureFilterNames(block.ReadSubBlock()); Points = new Points(block.ReadSubBlock()); UVPoints = new UVPoints(block.ReadSubBlock()); Normals = new Normals(block.ReadSubBlock()); SortVectors = new SortVectors(block.ReadSubBlock()); Colors = new Colors(block.ReadSubBlock()); Matrices = new Matrices(block.ReadSubBlock()); ImageNames = new ImageNames(block.ReadSubBlock()); Textures = new Textures(block.ReadSubBlock()); LightMaterials = new LightMaterials(block.ReadSubBlock()); LightModelConfigs = new LightModelConfigs(block.ReadSubBlock()); VertexStates = new VertexStates(block.ReadSubBlock()); PrimaryStates = new PrimaryStates(block.ReadSubBlock()); LodControls = new LodControls(block.ReadSubBlock()); if (!block.EndOfBlock()) { Animations = new Animations(block.ReadSubBlock()); } block.VerifyEndOfBlock(); }
private void ReadDirection(SBR block, PositionHolder holder) { block.VerifyID(TokenID.QDirection); holder.Direction = new Quaternion(block.ReadFloat(), block.ReadFloat(), block.ReadFloat(), block.ReadFloat()); holder.DirectionSet = true; block.VerifyEndOfBlock(); }
public LinearKey(SBR block) { block.VerifyID(TokenID.Linear_Key); Frame = block.ReadInt(); position = new Vector3(block.ReadFloat(), block.ReadFloat(), -block.ReadFloat()); block.VerifyEndOfBlock(); }
internal CapacityData(SBR block) { block.VerifyID(TokenID.PickupCapacity); QuantityAvailableKG = (float)Mass.Kilogram.FromLb(block.ReadFloat()); FeedRateKGpS = (float)Mass.Kilogram.FromLb(block.ReadFloat()); block.VerifyEndOfBlock(); }
public UVOperations(SBR block) { block.VerifyID(TokenID.UV_Ops); var count = Capacity = block.ReadInt(); while (count-- > 0) { var subBlock = block.ReadSubBlock(); switch (subBlock.ID) { case TokenID.UV_OP_Copy: Add(new UVOperationCopy(subBlock)); break; case TokenID.UV_Op_ReflectMapFull: Add(new UVOperationReflectMapFull(subBlock)); break; case TokenID.UV_Op_Reflectmap: Add(new UVOperationReflectMap(subBlock)); break; case TokenID.UV_Op_UniformScale: this.Add(new UVOperationUniformScale(subBlock)); break; case TokenID.UV_Op_NonUniformScale: this.Add(new UVOperationNonUniformScale(subBlock)); break; default: throw new System.Exception("Unexpected uv_op: " + subBlock.ID.ToString()); } } block.VerifyEndOfBlock(); }
public TextData(SBR block) { block.VerifyID(TokenID.Speed_Text_Size); Size = block.ReadFloat(); Offset = new Vector2(block.ReadFloat(), block.ReadFloat()); block.VerifyEndOfBlock(); }
public PrimaryState(SBR block) { block.VerifyID(TokenID.Prim_State); Name = block.Label; Flags = block.ReadFlags(); ShaderIndex = block.ReadInt(); { var subBlock = block.ReadSubBlock(); subBlock.VerifyID(TokenID.Tex_Idxs); TextureIndices = new int[subBlock.ReadInt()]; for (var i = 0; i < TextureIndices.Length; ++i) { TextureIndices[i] = subBlock.ReadInt(); } subBlock.VerifyEndOfBlock(); } ZBias = block.ReadFloat(); VertexStateIndex = block.ReadInt(); AlphaTestMode = block.ReadInt(); LightConfigIndex = block.ReadInt(); ZBufferMode = block.ReadInt(); block.VerifyEndOfBlock(); }
protected virtual void AddOrModifyObj(SBR subBlock, PositionHolder holder) { switch (subBlock.ID) { case TokenID.FileName: FileName = subBlock.ReadString(); break; case TokenID.Position: //Position = new STFPositionItem(subBlock); ReadLocation(subBlock, holder); break; case TokenID.QDirection: //QDirection = new STFQDirectionItem(subBlock); ReadDirection(subBlock, holder); break; case TokenID.Matrix3x3: //Matrix3x3 = ReadMatrix3x3(subBlock); ReadPosition(subBlock, holder); break; case TokenID.VDbId: ViewDbId = subBlock.ReadUInt(); break; case TokenID.StaticFlags: StaticFlags = subBlock.ReadFlags(); break; default: subBlock.Skip(); break; } }
public DistanceLevel(SBR block) { block.VerifyID(TokenID.Distance_Level); DistanceLevelHeader = new DistanceLevelHeader(block.ReadSubBlock()); SubObjects = new SubObjects(block.ReadSubBlock()); block.VerifyEndOfBlock(); }
private void ReadCrossingParameters(SBR block) { block.VerifyID(TokenID.LevelCrParameters); WarningTime = block.ReadFloat(); MinimumDistance = block.ReadFloat(); block.VerifyEndOfBlock(); }
/// <summary> /// constructor /// </summary> /// <param name="filename">file to read and parse</param> public MstsShapeFile(string filename) { var file = SBR.Open(filename); shape = new MstsShape(file.ReadSubBlock()); file.VerifyEndOfBlock(); }
internal PatchSet(SBR block) { block.VerifyID(TokenID.Terrain_PatchSet); while (!block.EndOfBlock()) { using (SBR subBlock = block.ReadSubBlock()) { switch (subBlock.ID) { case TokenID.Terrain_PatchSet_Distance: Distance = subBlock.ReadInt(); break; case TokenID.Terrain_PatchSet_NPatches: PatchSize = subBlock.ReadInt(); break; case TokenID.Terrain_PatchSet_Patches: Patches = new List <Patch>(PatchSize * PatchSize); for (int i = 0; i < (PatchSize * PatchSize); ++i) { Patches.Add(new Patch(subBlock.ReadSubBlock())); } break; } } } }