Esempio n. 1
0
        //--------------------------------------------------------------------------------------------------

        public DxfDomSpline(string layer, int degree, double[] knots, Pnt2d[] controlPoints, double[] weights, SplineFlags flags)
        {
            LayerName     = layer;
            Degree        = degree;
            Knots         = knots;
            ControlPoints = controlPoints;
            Weights       = weights;
            Flags         = flags;
        }
Esempio n. 2
0
        //--------------------------------------------------------------------------------------------------

        public override bool Read(DxfReader reader)
        {
            Pnt2d controlPoint      = default;
            int   controlPointCount = 0;
            var   controlPointList  = new List <Pnt2d>();
            var   controlReadBits   = new BitVector32(0);

            int knotCount  = 0;
            var knotList   = new List <double>();
            var weightList = new List <double>();

            Pnt2d fitPoint      = default;
            int   fitPointCount = 0;
            var   fitPointList  = new List <Pnt2d>();
            var   fitReadBits   = new BitVector32(0);

            var tanReadBits = new BitVector32(0);

            Flags = SplineFlags.None;

            while (reader.GroupCode > 0)
            {
                switch (reader.GroupCode)
                {
                case 70:
                    Flags = (SplineFlags)reader.ReadInteger();
                    break;

                case 71:
                    Degree = reader.ReadInteger();
                    break;

                case 72:
                    knotCount = reader.ReadInteger();
                    break;

                case 73:
                    controlPointCount = reader.ReadInteger();
                    break;

                case 74:
                    fitPointCount = reader.ReadInteger();
                    break;

                case 10:
                    controlPoint.X        = reader.ReadCoord();
                    controlReadBits[0b01] = true;
Esempio n. 3
0
        public override void CopyFrom(DxfHandledObject from, CloneContext cloneContext)
        {
            base.CopyFrom(from, cloneContext);
            DxfSpline dxfSpline = (DxfSpline)from;

            this.splineFlags_0 = dxfSpline.splineFlags_0;
            this.vector3D_0    = dxfSpline.vector3D_0;
            this.int_0         = dxfSpline.int_0;
            this.double_1      = dxfSpline.double_1;
            this.double_2      = dxfSpline.double_2;
            this.double_3      = dxfSpline.double_3;
            this.vector3D_1    = dxfSpline.vector3D_1;
            this.vector3D_2    = dxfSpline.vector3D_2;
            this.list_0.AddRange((IEnumerable <double>)dxfSpline.list_0);
            this.list_1.AddRange((IEnumerable <double>)dxfSpline.list_1);
            this.list_2.AddRange((IEnumerable <WW.Math.Point3D>)dxfSpline.list_2);
            this.list_3.AddRange((IEnumerable <WW.Math.Point3D>)dxfSpline.list_3);
            this.splineFlags1_0         = dxfSpline.splineFlags1_0;
            this.knotParameterization_0 = dxfSpline.knotParameterization_0;
        }
Esempio n. 4
0
            void ReadMovementUpdateData(InPacket packet)
            {
                flags = (ObjectUpdateFlags)packet.ReadUInt16();
                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LIVING))
                {
                    ReadMovementInfo(packet);

                    movementSpeeds = new Dictionary<UnitMoveType,float>();
                    movementSpeeds[UnitMoveType.MOVE_WALK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_TURN_RATE] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_PITCH_RATE] = packet.ReadSingle();

                    if (movementInfo.Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SPLINE_ENABLED))
                    {
                        splineFlags = (SplineFlags)packet.ReadUInt32();
                        if (splineFlags.HasFlag(SplineFlags.Final_Angle))
                            splineFacingAngle = packet.ReadSingle();
                        else if (splineFlags.HasFlag(SplineFlags.Final_Target))
                            splineFacingTargetGuid = packet.ReadUInt64();
                        else if (splineFlags.HasFlag(SplineFlags.Final_Point))
                            splineFacingPointX = packet.ReadVector3();

                        splineTimePassed = packet.ReadInt32();
                        splineDuration = packet.ReadInt32();
                        splineId = packet.ReadUInt32();
                        packet.ReadSingle();
                        packet.ReadSingle();
                        splineVerticalAcceleration = packet.ReadSingle();
                        splineEffectStartTime = packet.ReadInt32();
                        uint splineCount = packet.ReadUInt32();
                        for (uint index = 0; index < splineCount; index++)
                            splinePoints.Add(packet.ReadVector3());
                        splineEvaluationMode = (SplineEvaluationMode)packet.ReadByte();
                        splineEndPoint = packet.ReadVector3();
                    }
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_POSITION))
                {
                    transportGuid = packet.ReadPackedGuid();
                    position = packet.ReadVector3();
                    transportOffset = packet.ReadVector3();
                    o = packet.ReadSingle();
                    corpseOrientation = packet.ReadSingle();
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION))
                {
                    position = packet.ReadVector3();
                    o = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_UNKNOWN))
                    packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LOWGUID))
                    lowGuid = packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_HAS_TARGET))
                    targetGuid = packet.ReadPackedGuid();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_TRANSPORT))
                    transportTimer = packet.ReadUInt32();

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_VEHICLE))
                {
                    vehicledID = packet.ReadUInt32();
                    vehicleOrientation = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_ROTATION))
                    goRotation = packet.ReadInt64();
            }
Esempio n. 5
0
 public static bool HasAnyFlag(this SplineFlags flags, SplineFlags otherFlags)
 {
     return((flags & otherFlags) != SplineFlags.None);
 }
Esempio n. 6
0
		public static bool HasAnyFlag(this SplineFlags flags, SplineFlags otherFlags)
		{
			return (flags & otherFlags) != 0;
		}
Esempio n. 7
0
        protected virtual void ReadMovementData()
        {
            this.UnkByte = Reader.ReadByte();
            m_currentPosition = Reader.ReadVector3();
            m_tickCount = Reader.ReadUInt32();
            m_splineType = (SplineType)Reader.ReadByte();

            switch (m_splineType)
            {
                case SplineType.Normal:
                    break;
                case SplineType.Stop:
                    // client sets following values to:
                    // movementFlags = 0x1000;
                    // moveTime = 0;
                    // splinesCount = 1;
                    m_points = new Vector3[0];
                    return;
                case SplineType.FacingSpot:
                    m_facingSpot = Reader.ReadVector3();
                    break;
                case SplineType.FacingTarget:
                    m_facingTarget = Reader.ReadGuid();
                    break;
                case SplineType.FacingAngle:
                    m_facingAngle = Reader.ReadSingle();
                    break;
                default:
                    throw new Exception("Not updated SplineType switch in MonsterMove (Read)");
            }

            m_splineFlags = (SplineFlags)Reader.ReadUInt32();

            if ((m_splineFlags & SplineFlags.Animation) != 0)
            {
                m_animEmote = Reader.ReadByte();
                m_animTime = Reader.ReadUInt32();
            }

            m_moveTime = Reader.ReadUInt32();

            if ((m_splineFlags & SplineFlags.Parabolic) != 0)
            {
                m_trajectorySingle = Reader.ReadSingle();
                m_trajectoryUInt32 = Reader.ReadUInt32();
            }

            uint pointCount = Reader.ReadUInt32();
            m_points = new Vector3[pointCount];

            if ((m_splineFlags & (SplineFlags.Flying | SplineFlags.CatMullRom)) != 0)
            {
                for (uint i = 0; i < pointCount; ++i)
                    m_points[i] = Reader.ReadVector3();
            }
            else
            {
                m_points[0] = Reader.ReadVector3();

                var packedAgainst = new Vector3();
                packedAgainst.X = (m_currentPosition.X + m_points[0].X) * 0.5f;
                packedAgainst.Y = (m_currentPosition.Y + m_points[0].Y) * 0.5f;
                packedAgainst.Z = (m_currentPosition.Z + m_points[0].Z) * 0.5f;

                for (uint i = 1; i < pointCount; ++i)
                    m_points[i] = Reader.ReadUInt32().UnpackAgainst(ref packedAgainst);
            }
        }
Esempio n. 8
0
		public static bool Has(this SplineFlags flags, SplineFlags toCheck)
		{
			return (flags & toCheck) != 0;
		}
Esempio n. 9
0
        protected virtual void ReadMovementData()
        {
            this.UnkByte      = Reader.ReadByte();
            m_currentPosition = Reader.ReadVector3();
            m_tickCount       = Reader.ReadUInt32();
            m_splineType      = (SplineType)Reader.ReadByte();

            switch (m_splineType)
            {
            case SplineType.Normal:
                break;

            case SplineType.Stop:
                // client sets following values to:
                // movementFlags = 0x1000;
                // moveTime = 0;
                // splinesCount = 1;
                m_points = new Vector3[0];
                return;

            case SplineType.FacingSpot:
                m_facingSpot = Reader.ReadVector3();
                break;

            case SplineType.FacingTarget:
                m_facingTarget = Reader.ReadGuid();
                break;

            case SplineType.FacingAngle:
                m_facingAngle = Reader.ReadSingle();
                break;

            default:
                throw new Exception("Not updated SplineType switch in MonsterMove (Read)");
            }

            m_splineFlags = (SplineFlags)Reader.ReadUInt32();

            if ((m_splineFlags & SplineFlags.Animation) != 0)
            {
                m_animEmote = Reader.ReadByte();
                m_animTime  = Reader.ReadUInt32();
            }

            m_moveTime = Reader.ReadUInt32();

            if ((m_splineFlags & SplineFlags.Parabolic) != 0)
            {
                m_trajectorySingle = Reader.ReadSingle();
                m_trajectoryUInt32 = Reader.ReadUInt32();
            }

            uint pointCount = Reader.ReadUInt32();

            m_points = new Vector3[pointCount];

            if ((m_splineFlags & (SplineFlags.Flying | SplineFlags.CatMullRom)) != 0)
            {
                for (uint i = 0; i < pointCount; ++i)
                {
                    m_points[i] = Reader.ReadVector3();
                }
            }
            else
            {
                m_points[0] = Reader.ReadVector3();

                var packedAgainst = new Vector3();
                packedAgainst.X = (m_currentPosition.X + m_points[0].X) * 0.5f;
                packedAgainst.Y = (m_currentPosition.Y + m_points[0].Y) * 0.5f;
                packedAgainst.Z = (m_currentPosition.Z + m_points[0].Z) * 0.5f;

                for (uint i = 1; i < pointCount; ++i)
                {
                    m_points[i] = Reader.ReadUInt32().UnpackAgainst(ref packedAgainst);
                }
            }
        }
Esempio n. 10
0
            void ReadMovementUpdateData(InPacket packet)
            {
                flags = (ObjectUpdateFlags)packet.ReadUInt16();
                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LIVING))
                {
                    ReadMovementInfo(packet);

                    movementSpeeds = new Dictionary <UnitMoveType, float>();
                    movementSpeeds[UnitMoveType.MOVE_WALK]        = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN]         = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_RUN_BACK]    = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM]        = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_SWIM_BACK]   = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT]      = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_FLIGHT_BACK] = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_TURN_RATE]   = packet.ReadSingle();
                    movementSpeeds[UnitMoveType.MOVE_PITCH_RATE]  = packet.ReadSingle();

                    if (movementInfo.Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SPLINE_ENABLED))
                    {
                        splineFlags = (SplineFlags)packet.ReadUInt32();
                        if (splineFlags.HasFlag(SplineFlags.Final_Angle))
                        {
                            splineFacingAngle = packet.ReadSingle();
                        }
                        else if (splineFlags.HasFlag(SplineFlags.Final_Target))
                        {
                            splineFacingTargetGuid = packet.ReadUInt64();
                        }
                        else if (splineFlags.HasFlag(SplineFlags.Final_Point))
                        {
                            splineFacingPointX = packet.ReadVector3();
                        }

                        splineTimePassed = packet.ReadInt32();
                        splineDuration   = packet.ReadInt32();
                        splineId         = packet.ReadUInt32();
                        packet.ReadSingle();
                        packet.ReadSingle();
                        splineVerticalAcceleration = packet.ReadSingle();
                        splineEffectStartTime      = packet.ReadInt32();
                        uint splineCount = packet.ReadUInt32();
                        for (uint index = 0; index < splineCount; index++)
                        {
                            splinePoints.Add(packet.ReadVector3());
                        }
                        splineEvaluationMode = (SplineEvaluationMode)packet.ReadByte();
                        splineEndPoint       = packet.ReadVector3();
                    }
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_POSITION))
                {
                    transportGuid   = packet.ReadPackedGuid();
                    position        = packet.ReadVector3();
                    transportOffset = packet.ReadVector3();
                    o = packet.ReadSingle();
                    corpseOrientation = packet.ReadSingle();
                }
                else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION))
                {
                    position = packet.ReadVector3();
                    o        = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_UNKNOWN))
                {
                    packet.ReadUInt32();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LOWGUID))
                {
                    lowGuid = packet.ReadUInt32();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_HAS_TARGET))
                {
                    targetGuid = packet.ReadPackedGuid();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_TRANSPORT))
                {
                    transportTimer = packet.ReadUInt32();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_VEHICLE))
                {
                    vehicledID         = packet.ReadUInt32();
                    vehicleOrientation = packet.ReadSingle();
                }

                if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_ROTATION))
                {
                    goRotation = packet.ReadInt64();
                }
            }