Fix remote piloting rotation (#9439)

This commit is contained in:
metalgearsloth
2022-07-05 23:40:30 +10:00
committed by GitHub
parent 4ac5c6af49
commit 88053e86ea

View File

@@ -24,7 +24,7 @@ namespace Content.Server.Physics.Controllers
/// client namespace. /// client namespace.
/// </summary> /// </summary>
private HashSet<EntityUid> _excludedMobs = new(); private HashSet<EntityUid> _excludedMobs = new();
private Dictionary<ShuttleComponent, List<(PilotComponent, IMoverComponent)>> _shuttlePilots = new(); private Dictionary<ShuttleComponent, List<(PilotComponent, IMoverComponent, TransformComponent)>> _shuttlePilots = new();
protected override Filter GetSoundPlayers(EntityUid mover) protected override Filter GetSoundPlayers(EntityUid mover)
{ {
@@ -60,7 +60,7 @@ namespace Content.Server.Physics.Controllers
private void HandleShuttleMovement(float frameTime) private void HandleShuttleMovement(float frameTime)
{ {
var newPilots = new Dictionary<ShuttleComponent, List<(PilotComponent, IMoverComponent)>>(); var newPilots = new Dictionary<ShuttleComponent, List<(PilotComponent Pilot, IMoverComponent Mover, TransformComponent ConsoleXform)>>();
// We just mark off their movement and the shuttle itself does its own movement // We just mark off their movement and the shuttle itself does its own movement
foreach (var (pilot, mover) in EntityManager.EntityQuery<PilotComponent, SharedPlayerInputMoverComponent>()) foreach (var (pilot, mover) in EntityManager.EntityQuery<PilotComponent, SharedPlayerInputMoverComponent>())
@@ -85,11 +85,11 @@ namespace Content.Server.Physics.Controllers
if (!newPilots.TryGetValue(shuttleComponent, out var pilots)) if (!newPilots.TryGetValue(shuttleComponent, out var pilots))
{ {
pilots = new List<(PilotComponent, IMoverComponent)>(); pilots = new List<(PilotComponent, IMoverComponent, TransformComponent)>();
newPilots[shuttleComponent] = pilots; newPilots[shuttleComponent] = pilots;
} }
pilots.Add((pilot, mover)); pilots.Add((pilot, mover, xform));
} }
// Reset inputs for non-piloted shuttles. // Reset inputs for non-piloted shuttles.
@@ -115,21 +115,13 @@ namespace Content.Server.Physics.Controllers
switch (shuttle.Mode) switch (shuttle.Mode)
{ {
case ShuttleMode.Cruise: case ShuttleMode.Cruise:
foreach (var (pilot, mover) in pilots) foreach (var (pilot, mover, consoleXform) in pilots)
{ {
var console = pilot.Console;
if (console == null)
{
DebugTools.Assert(false);
continue;
}
var sprint = mover.VelocityDir.sprinting; var sprint = mover.VelocityDir.sprinting;
if (sprint.Equals(Vector2.Zero)) continue; if (sprint.Equals(Vector2.Zero)) continue;
var offsetRotation = EntityManager.GetComponent<TransformComponent>(console.Owner).LocalRotation; var offsetRotation = consoleXform.LocalRotation;
linearInput += offsetRotation.RotateVec(new Vector2(0f, sprint.Y)); linearInput += offsetRotation.RotateVec(new Vector2(0f, sprint.Y));
angularInput += sprint.X; angularInput += sprint.X;
@@ -137,21 +129,13 @@ namespace Content.Server.Physics.Controllers
break; break;
case ShuttleMode.Strafing: case ShuttleMode.Strafing:
// No angular input possible // No angular input possible
foreach (var (pilot, mover) in pilots) foreach (var (pilot, mover, consoleXform) in pilots)
{ {
var console = pilot.Console;
if (console == null)
{
DebugTools.Assert(false);
continue;
}
var sprint = mover.VelocityDir.sprinting; var sprint = mover.VelocityDir.sprinting;
if (sprint.Equals(Vector2.Zero)) continue; if (sprint.Equals(Vector2.Zero)) continue;
var offsetRotation = EntityManager.GetComponent<TransformComponent>((console).Owner).LocalRotation; var offsetRotation = consoleXform.LocalRotation;
sprint = offsetRotation.RotateVec(sprint); sprint = offsetRotation.RotateVec(sprint);
linearInput += sprint; linearInput += sprint;