public TriangleStruct(uint triangleAddress) { Address = triangleAddress; SurfaceType = Config.Stream.GetUInt16(triangleAddress + TriangleOffsetsConfig.SurfaceType); ExertionForceIndex = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.ExertionForceIndex); ExertionAngle = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.ExertionAngle); Flags = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.Flags); Room = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.Room); YMin = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.YMin); YMax = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.YMax); X1 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.X1); Y1 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Y1); Z1 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Z1); X2 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.X2); Y2 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Y2); Z2 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Z2); X3 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.X3); Y3 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Y3); Z3 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.Z3); NormX = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormX); NormY = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormY); NormZ = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormZ); NormOffset = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormOffset); AssociatedObject = Config.Stream.GetUInt32(triangleAddress + TriangleOffsetsConfig.AssociatedObject); Classification = TriangleUtilities.CalculateClassification(NormY); XProjection = (Flags & TriangleOffsetsConfig.XProjectionMask) != 0; BelongsToObject = (Flags & TriangleOffsetsConfig.BelongsToObjectMask) != 0; NoCamCollision = (Flags & TriangleOffsetsConfig.NoCamCollisionMask) != 0; FieldValueList = new List <object> { "0x" + Address.ToString("X8"), Classification, SurfaceType, ExertionForceIndex, ExertionAngle, "0x" + Flags.ToString("X2"), XProjection, BelongsToObject, NoCamCollision, Room, YMin, YMax, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, NormX, NormY, NormZ, NormOffset, "0x" + AssociatedObject.ToString("X8"), }; }
private TriangleDataModel(uint triangleAddress) { Address = triangleAddress; SurfaceType = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.SurfaceType); ExertionForceIndex = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.ExertionForceIndex); ExertionAngle = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.ExertionAngle); Flags = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.Flags); Room = Config.Stream.GetByte(triangleAddress + TriangleOffsetsConfig.Room); YMinMinus5 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.YMinMinus5); YMaxPlus5 = Config.Stream.GetInt16(triangleAddress + TriangleOffsetsConfig.YMaxPlus5); X1 = TriangleOffsetsConfig.GetX1(triangleAddress); Y1 = TriangleOffsetsConfig.GetY1(triangleAddress); Z1 = TriangleOffsetsConfig.GetZ1(triangleAddress); X2 = TriangleOffsetsConfig.GetX2(triangleAddress); Y2 = TriangleOffsetsConfig.GetY2(triangleAddress); Z2 = TriangleOffsetsConfig.GetZ2(triangleAddress); X3 = TriangleOffsetsConfig.GetX3(triangleAddress); Y3 = TriangleOffsetsConfig.GetY3(triangleAddress); Z3 = TriangleOffsetsConfig.GetZ3(triangleAddress); NormX = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormX); NormY = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormY); NormZ = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormZ); NormOffset = Config.Stream.GetSingle(triangleAddress + TriangleOffsetsConfig.NormOffset); AssociatedObject = Config.Stream.GetUInt32(triangleAddress + TriangleOffsetsConfig.AssociatedObject); Classification = TriangleUtilities.CalculateClassification(NormY); XProjection = (Flags & TriangleOffsetsConfig.XProjectionMask) != 0; BelongsToObject = (Flags & TriangleOffsetsConfig.BelongsToObjectMask) != 0; NoCamCollision = (Flags & TriangleOffsetsConfig.NoCamCollisionMask) != 0; Description = TableConfig.TriangleInfo.GetDescription(SurfaceType); Slipperiness = TableConfig.TriangleInfo.GetSlipperiness(SurfaceType) ?? 0; SlipperinessDescription = TableConfig.TriangleInfo.GetSlipperinessDescription(SurfaceType); FrictionMultiplier = TableConfig.TriangleInfo.GetFrictionMultiplier(SurfaceType); SlopeAccel = TableConfig.TriangleInfo.GetSlopeAccel(SurfaceType); SlopeDecelValue = TableConfig.TriangleInfo.GetSlopeDecelValue(SurfaceType); Exertion = TableConfig.TriangleInfo.GetExertion(SurfaceType) ?? false; FieldValueList = new List <object> { HexUtilities.FormatValue(Address, 8), Classification, HexUtilities.FormatValue(SurfaceType, 2), Description, HexUtilities.FormatValue(Slipperiness, 2), SlipperinessDescription, Exertion, ExertionForceIndex, ExertionAngle, HexUtilities.FormatValue(Flags, 2), XProjection, BelongsToObject, NoCamCollision, Room, YMinMinus5, YMaxPlus5, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, NormX, NormY, NormZ, NormOffset, HexUtilities.FormatValue(AssociatedObject, 8), }; }