Пример #1
0
        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"),
            };
        }
Пример #2
0
        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),
            };
        }