//-------------------------------------------------------------------------------------------------- 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; }
//-------------------------------------------------------------------------------------------------- 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;
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; }
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(); }
public static bool HasAnyFlag(this SplineFlags flags, SplineFlags otherFlags) { return((flags & otherFlags) != SplineFlags.None); }
public static bool HasAnyFlag(this SplineFlags flags, SplineFlags otherFlags) { return (flags & otherFlags) != 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); } }
public static bool Has(this SplineFlags flags, SplineFlags toCheck) { return (flags & toCheck) != 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); } } }
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(); } }