Piloting and thruster tuning (#5594)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
This commit is contained in:
@@ -404,46 +404,60 @@ namespace Content.Server.Shuttles.EntitySystems
|
||||
/// <summary>
|
||||
/// Considers a thrust direction as being active.
|
||||
/// </summary>
|
||||
public void EnableThrustDirection(ShuttleComponent component, DirectionFlag direction)
|
||||
public void EnableLinearThrustDirection(ShuttleComponent component, DirectionFlag direction)
|
||||
{
|
||||
if ((component.ThrustDirections & direction) != 0x0) return;
|
||||
|
||||
component.ThrustDirections |= direction;
|
||||
|
||||
if ((direction & (DirectionFlag.East | DirectionFlag.West)) != 0x0)
|
||||
var index = GetFlagIndex(direction);
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
{
|
||||
switch (component.Mode)
|
||||
{
|
||||
case ShuttleMode.Cruise:
|
||||
foreach (var comp in component.AngularThrusters)
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
|
||||
comp.Firing = true;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, true);
|
||||
}
|
||||
break;
|
||||
case ShuttleMode.Docking:
|
||||
var index = GetFlagIndex(direction);
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
|
||||
comp.Firing = true;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, true);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
comp.Firing = true;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
var index = GetFlagIndex(direction);
|
||||
}
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
/// <summary>
|
||||
/// Disables a thrust direction.
|
||||
/// </summary>
|
||||
public void DisableLinearThrustDirection(ShuttleComponent component, DirectionFlag direction)
|
||||
{
|
||||
if ((component.ThrustDirections & direction) == 0x0) return;
|
||||
|
||||
component.ThrustDirections &= ~direction;
|
||||
|
||||
var index = GetFlagIndex(direction);
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
|
||||
comp.Firing = false;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void DisableLinearThrusters(ShuttleComponent component)
|
||||
{
|
||||
foreach (DirectionFlag dir in Enum.GetValues(typeof(DirectionFlag)))
|
||||
{
|
||||
DisableLinearThrustDirection(component, dir);
|
||||
}
|
||||
|
||||
DebugTools.Assert(component.ThrustDirections == DirectionFlag.None);
|
||||
}
|
||||
|
||||
public void SetAngularThrust(ShuttleComponent component, bool on)
|
||||
{
|
||||
if (on)
|
||||
{
|
||||
foreach (var comp in component.AngularThrusters)
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
@@ -452,51 +466,9 @@ namespace Content.Server.Shuttles.EntitySystems
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disables a thrust direction.
|
||||
/// </summary>
|
||||
public void DisableThrustDirection(ShuttleComponent component, DirectionFlag direction)
|
||||
{
|
||||
if ((component.ThrustDirections & direction) == 0x0) return;
|
||||
|
||||
component.ThrustDirections &= ~direction;
|
||||
|
||||
if ((direction & (DirectionFlag.East | DirectionFlag.West)) != 0x0)
|
||||
{
|
||||
switch (component.Mode)
|
||||
{
|
||||
case ShuttleMode.Cruise:
|
||||
foreach (var comp in component.AngularThrusters)
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
|
||||
comp.Firing = false;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, false);
|
||||
}
|
||||
break;
|
||||
case ShuttleMode.Docking:
|
||||
var index = GetFlagIndex(direction);
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
|
||||
comp.Firing = false;
|
||||
appearanceComponent.SetData(ThrusterVisualState.Thrusting, false);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var index = GetFlagIndex(direction);
|
||||
|
||||
foreach (var comp in component.LinearThrusters[index])
|
||||
foreach (var comp in component.AngularThrusters)
|
||||
{
|
||||
if (!EntityManager.TryGetComponent(comp.OwnerUid, out AppearanceComponent? appearanceComponent))
|
||||
continue;
|
||||
@@ -507,16 +479,6 @@ namespace Content.Server.Shuttles.EntitySystems
|
||||
}
|
||||
}
|
||||
|
||||
public void DisableAllThrustDirections(ShuttleComponent component)
|
||||
{
|
||||
foreach (DirectionFlag dir in Enum.GetValues(typeof(DirectionFlag)))
|
||||
{
|
||||
DisableThrustDirection(component, dir);
|
||||
}
|
||||
|
||||
DebugTools.Assert(component.ThrustDirections == DirectionFlag.None);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
|
||||
Reference in New Issue
Block a user