public void Read(ManeuverType maneuverType, int startTick, Euler3 direction, MovementOptions movementOptions) { base.ManeuverType = maneuverType; this.startTick = new Tick(startTick); this.direction = direction; options = movementOptions; }
public void Read(ManeuverType maneuverType, int startTick, QWEASD qweasd, MovementOptions movementOptions) { base.ManeuverType = maneuverType; this.startTick = new Tick(startTick); this.qweasd = qweasd; options = movementOptions; }
public void Read(ManeuverType maneuverType, int startTick, Vector3 position, Euler3 euler3) { base.ManeuverType = maneuverType; this.startTick = new Tick(startTick); this.position = position; this.euler3 = euler3; }
public ManeuverCommandData(ManeuverCommand _command, ManeuverType _type, Vector3 _direction) { command = _command; type = _type; direction = _direction; targetDirection = _direction; }
public DirectionalWithoutRollManeuver(ManeuverType maneuverType, int startTick, Euler3 direction, MovementOptions movementOptions) { base.ManeuverType = maneuverType; this.startTick = new Tick(startTick); this.direction = direction; options = movementOptions; }
//Perform an update depending on the maneuver //and return whether or not the maneuver will continue public bool UpdateManeuver(ManeuverType current, Transform player) { bool continueManeuver = false; if (current == ManeuverType.LOOP) continueManeuver = UpdateLoop(player); else if (current == ManeuverType.U_TURN1) continueManeuver = UpdateUTurn1(player); else if (current == ManeuverType.U_TURN2) continueManeuver = UpdateUTurn2(player); else if (current == ManeuverType.L_DODGE) continueManeuver = UpdateLDodge(player); else if (current == ManeuverType.R_DODGE) continueManeuver = UpdateRDodge(player); return continueManeuver; }
//Manually choose a maneuver public ManeuverType ManualManeuver(Transform player, ManeuverType maneuver) { if (maneuver == ManeuverType.L_DODGE) { //Save coordinates start = player; end = player; loopCount = 0; //Return Maneuver Type return ManeuverType.L_DODGE; } else if (maneuver == ManeuverType.R_DODGE) { //Save coordinates start = player; end = player; loopCount = 0; //Return Maneuver Type return ManeuverType.R_DODGE; } else if (maneuver == ManeuverType.U_TURN1) { //Save coordinates start = player; player.Rotate(Vector3.left * 180); end = player; player.Rotate(Vector3.left * 180); //Return Maneuver Type return ManeuverType.U_TURN1; } else if (maneuver == ManeuverType.LOOP) { //Save coordinates start = player; end = player; loopCount = 0; //Return Maneuver Type return ManeuverType.LOOP; } else return ManeuverType.NONE; }
public void SyncMove(int index, SpaceEntityType spaceEntityType, uint objectId) { Client c = Server.GetClientByIndex(index); c.lastSyncSendTime = DateTime.UtcNow; if (!c.Character.PlayerShip.isSpawned && c.Character.PlayerShip.MovementOptions.speed > 0) { c.Character.PlayerShip.isSpawned = true; c.Character.PlayerShip.ManeuverController.AddManeuver(new TurnManeuver(ManeuverType.Turn, Server.GetSectorById(c.Character.PlayerShip.sectorId).Tick.Current.value, c.Character.PlayerShip.qweasd, c.Character.PlayerShip.MovementOptions)); // Avoid problems with setting speed and not moving due to being at the rest maneuver } BgoProtocolWriter buffer = NewMessage(); buffer.Write((ushort)Reply.SyncMove); buffer.Write(objectId); Sector s = Server.GetSectorById(c.Character.PlayerShip.sectorId); buffer.Write(s.Tick.Current - 1); // tick c.Character.PlayerShip.MovementFrame.Write(buffer); //c.Character.ManeuverController.GetTickFrame(s.Tick.Current - 1).Write(buffer); Maneuver lastManeuverAtTick = c.Character.PlayerShip.ManeuverController.GetLastManeuverAtTick(s.Tick.Current); ManeuverType maneuverType = lastManeuverAtTick.ManeuverType; buffer.Write((byte)maneuverType); buffer.Write(lastManeuverAtTick.GetStartTick()); switch (maneuverType) { case ManeuverType.Rest: buffer.Write(c.Character.PlayerShip.MovementFrame.position); buffer.Write(c.Character.PlayerShip.MovementFrame.euler3); break; case ManeuverType.Turn: case ManeuverType.TurnQweasd: buffer.Write((byte)c.Character.PlayerShip.qweasd.Bitmask); break; case ManeuverType.Directional: case ManeuverType.DirectionalWithoutRoll: buffer.Write(c.Character.PlayerShip.direction); break; } ObjectStats currentShipStats = c.Character.PlayerShip.currentShipStats; //gear buffer.Write((byte)c.Character.PlayerShip.shipGear); //speed buffer.Write(c.Character.PlayerShip.shipGear == Gear.Regular ? c.Character.PlayerShip.shipSpeed : currentShipStats.BoostSpeed); //acceleration buffer.Write(currentShipStats.Acceleration); //inertiaCompensation buffer.Write(currentShipStats.InertiaCompensation); //pitchAcceleration buffer.Write(currentShipStats.PitchAcceleration); //pitchMaxSpeed buffer.Write(currentShipStats.PitchMaxSpeed); //yawAcceleration buffer.Write(currentShipStats.YawAcceleration); //yawMaxSpeed buffer.Write(currentShipStats.YawMaxSpeed); //rollAcceleration buffer.Write(currentShipStats.RollAcceleration); //rollMaxSpeed buffer.Write(currentShipStats.RollMaxSpeed); //strafeAcceleration buffer.Write(currentShipStats.StrafeAcceleration); //strafeMaxSpeed buffer.Write(currentShipStats.StrafeMaxSpeed); SendMessageToSector(index, buffer); }