//TODO: Add valid ctors. /// <inheritdoc /> public MonsterMoveInfo(MonsterMoveType moveType, ObjectGuid finalTarget, float finalOrientation, Vector3 <float> finalPoint) { MoveType = moveType; FinalTarget = finalTarget; FinalOrientation = finalOrientation; FinalPoint = finalPoint; }
public void MoveTowards(Vector3 direction, MonsterMoveType type) { status.moveType = type; status.moveDir = new Vector3(direction.x, 0f, 0f).normalized; }
public static RealmPacketOut ConstructMultiWaypointMovePacket <T>(Unit movingUnit, uint moveTime, MonsterMoveFlags moveFlags, IEnumerable <T> waypoints) where T : IPathVertex { var numWaypoints = waypoints.Count(); var packet = new RealmPacketOut(RealmServerOpCode.SMSG_MONSTER_MOVE, (9 + 12 + 4 + 1 + 4 + 4 + 4 + (numWaypoints * 4 * 3))); movingUnit.EntityId.WritePacked(packet); //if (movingUnit.IsOnTransport) //{ // packet.OpCode = RealmServerOpCode.SMSG_MONSTER_MOVE_TRANSPORT; // movingUnit.Transport.EntityId.WritePacked(packet); // packet.Write((byte)movingUnit.TransportSeat); //} packet.Write(false); // some boolean flag packet.Write(movingUnit.Position); // OnMonsterMove_serverLoc packet.Write(Utility.GetSystemTime()); const MonsterMoveType moveType = MonsterMoveType.Normal; packet.Write((byte)moveType); switch (moveType) { case MonsterMoveType.Normal: break; // TODO: implement other cases //case MonsterMoveType.Stop: // { // return packet; // } //case MonsterMoveType.FinalFacingPoint: // { // // OnMonsterMove_final_facingSpot // packet.Write(0.0f); // packet.Write(0.0f); // packet.Write(0.0f); // } //case MonsterMoveType.FinalFacingGuid: // { // packet.Write(0ul); // } //case MonsterMoveType.FinalFacingAngle: // { // // OnMonsterMove_final_facingAngle // packet.Write(movingUnit.Orientation); // } } packet.Write((uint)moveFlags); if (moveFlags.HasFlag(MonsterMoveFlags.Flag_0x200000)) { // TODO: what does this flag mean? packet.Write((byte)0); packet.Write(0); } packet.Write(moveTime); if (moveFlags.HasFlag(MonsterMoveFlags.Flag_0x800)) { // TODO: what does this flag mean? packet.Write(0.0f); packet.Write(0); } packet.Write(numWaypoints); if (moveFlags.HasAnyFlag(MonsterMoveFlags.Flag_0x2000_FullPoints_1 | MonsterMoveFlags.Flag_0x40000_FullPoints_2)) { foreach (IPathVertex waypoint in waypoints) { packet.Write(waypoint.Position); // + 12*numWaypoints } } else { // OnMonsterMove_pathPoints_compressed foreach (IPathVertex waypoint in waypoints) { packet.Write(waypoint.Position.ToDeltaPacked(movingUnit.Position, waypoints.First().Position)); // + 12*numWaypoints } } return(packet); }