Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Porting over My Cruise Control Code From Frontier #1482

Merged
merged 1 commit into from
Jan 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Content.Client/Shuttles/UI/NavScreen.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,18 +77,18 @@
MinWidth="82"
MaxWidth="82"/>
<controls:Button Name="DampenerOn"
Text="{controls:Loc 'shuttle-console-inertia-dampener-dampen'}"
Text="{controls:Loc 'shuttle-console-inertia-dampener-dampened'}"
TextAlign="Center"
ToggleMode="True"
MinWidth="82"
MaxWidth="82"/>
<controls:Button Name="AnchorOn"
Text="{controls:Loc 'shuttle-console-inertia-dampener-anchor'}"
Text="{controls:Loc 'shuttle-console-inertia-dampener-anchored'}"
TextAlign="Center"
ToggleMode="True"
MinWidth="82"
MaxWidth="82"/>
</controls:BoxContainer>
<!-- End Frontier - Inertia dampener controls-->
<!--end Inertia dampener controls-->
</controls:BoxContainer>
</controls:BoxContainer>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// New Frontiers - This file is licensed under AGPLv3
// Copyright (c) 2024 New Frontiers Contributors
// NeuPanda - This file is licensed under AGPLv3
// Copyright (c) 2025 NeuPanda
// See AGPLv3.txt for details.
using Content.Client.Shuttles.UI;
using Content.Shared._NF.Shuttles.Events;
Expand Down
58 changes: 26 additions & 32 deletions Content.Client/_NF/Shuttles/UI/NavScreen.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,48 +1,42 @@
// New Frontiers - This file is licensed under AGPLv3
// Copyright (c) 2024 New Frontiers Contributors
// NeuPanda - This file is licensed under AGPLv3
// Copyright (c) 2025 NeuPanda
// See AGPLv3.txt for details.
using Content.Shared._NF.Shuttles.Events;
using Robust.Client.UserInterface.Controls;

namespace Content.Client.Shuttles.UI;

public sealed partial class NavScreen
namespace Content.Client.Shuttles.UI
{
private readonly ButtonGroup _buttonGroup = new();
public event Action<NetEntity?, InertiaDampeningMode>? OnInertiaDampeningModeChanged;

private void NfInitialize()
public sealed partial class NavScreen
{
DampenerOff.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Off);
DampenerOn.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Dampen);
AnchorOn.OnPressed += _ => SetDampenerMode(InertiaDampeningMode.Anchor);
private readonly ButtonGroup _buttonGroup = new();
public event Action<NetEntity?, InertiaDampeningMode>? OnInertiaDampeningModeChanged;

DampenerOff.Group = _buttonGroup;
DampenerOn.Group = _buttonGroup;
AnchorOn.Group = _buttonGroup;
private void NfInitialize()
{

// Send off a request to get the current dampening mode.
_entManager.TryGetNetEntity(_shuttleEntity, out var shuttle);
OnInertiaDampeningModeChanged?.Invoke(shuttle, InertiaDampeningMode.Query);
}
DampenerOff.OnPressed += _ => SwitchDampenerMode(InertiaDampeningMode.Off);
DampenerOn.OnPressed += _ => SwitchDampenerMode(InertiaDampeningMode.Dampened);
AnchorOn.OnPressed += _ => SwitchDampenerMode(InertiaDampeningMode.Anchored);

private void SetDampenerMode(InertiaDampeningMode mode)
{
NavRadar.DampeningMode = mode;
_entManager.TryGetNetEntity(_shuttleEntity, out var shuttle);
OnInertiaDampeningModeChanged?.Invoke(shuttle, mode);
}
var group = new ButtonGroup();
DampenerOff.Group = group;
DampenerOn.Group = group;
AnchorOn.Group = group;
}

private void NfUpdateState()
{
if (NavRadar.DampeningMode == InertiaDampeningMode.Station)
DampenerModeButtons.Visible = false;
else
private void SwitchDampenerMode(InertiaDampeningMode mode)
{
NavRadar.DampeningMode = mode;
_entManager.TryGetNetEntity(_shuttleEntity, out var shuttle);
OnInertiaDampeningModeChanged?.Invoke(shuttle, mode);
}

private void NfUpdateState()
{
DampenerModeButtons.Visible = true;
DampenerOff.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Off;
DampenerOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Dampen;
AnchorOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Anchor;
DampenerOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Dampened;
AnchorOn.Pressed = NavRadar.DampeningMode == InertiaDampeningMode.Anchored;
}
}
}
4 changes: 2 additions & 2 deletions Content.Client/_NF/Shuttles/UI/ShuttleConsoleWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// New Frontiers - This file is licensed under AGPLv3
// Copyright (c) 2024 New Frontiers Contributors
// NeuPanda - This file is licensed under AGPLv3
// Copyright (c) 2025 NeuPanda
// See AGPLv3.txt for details.
using Content.Shared._NF.Shuttles.Events;

Expand Down
35 changes: 16 additions & 19 deletions Content.Client/_NF/Shuttles/UI/ShuttleNavControl.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,30 +1,27 @@
// New Frontiers - This file is licensed under AGPLv3
// Copyright (c) 2024 New Frontiers Contributors
// NeuPanda - This file is licensed under AGPLv3
// Copyright (c) 2025 NeuPanda
// See AGPLv3.txt for details.
using Content.Shared._NF.Shuttles.Events;
using Content.Shared.Shuttles.BUIStates;
using Robust.Shared.Physics.Components;
using System.Numerics;
using Robust.Client.Graphics;
using Robust.Shared.Collections;

namespace Content.Client.Shuttles.UI;

public sealed partial class ShuttleNavControl
namespace Content.Client.Shuttles.UI
{
public InertiaDampeningMode DampeningMode { get; set; }

private void NfUpdateState(NavInterfaceState state)
public sealed partial class ShuttleNavControl
{
public InertiaDampeningMode DampeningMode { get; set; }

if (!EntManager.GetCoordinates(state.Coordinates).HasValue ||
!EntManager.TryGetComponent(
EntManager.GetCoordinates(state.Coordinates).GetValueOrDefault().EntityId,
out TransformComponent? transform) ||
!EntManager.TryGetComponent(transform.GridUid, out PhysicsComponent? _))
return;
private void NfUpdateState(NavInterfaceState state)
{

DampeningMode = state.DampeningMode;
if (!EntManager.GetCoordinates(state.Coordinates).HasValue ||
!EntManager.TryGetComponent(EntManager.GetCoordinates(state.Coordinates).GetValueOrDefault().EntityId, out TransformComponent? transform) ||
!EntManager.TryGetComponent(transform.GridUid, out PhysicsComponent? physicsComponent))
{
return;
}

DampeningMode = state.DampeningMode;
}
}
}

6 changes: 3 additions & 3 deletions Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ private void UpdateState(EntityUid consoleUid, ref DockingInterfaceState? dockSt
}
else
{
navState = new NavInterfaceState(0f, null, null, new Dictionary<NetEntity, List<DockingPortState>>(), InertiaDampeningMode.Dampen); // Frontier: inertia dampening);
navState = new NavInterfaceState(0f, null, null, new Dictionary<NetEntity, List<DockingPortState>>(), InertiaDampeningMode.Dampened); // Frontier: inertia dampening);
mapState = new ShuttleMapInterfaceState(
FTLState.Invalid,
default,
Expand Down Expand Up @@ -373,7 +373,7 @@ public void ClearPilots(ShuttleConsoleComponent component)
public NavInterfaceState GetNavState(Entity<RadarConsoleComponent?, TransformComponent?> entity, Dictionary<NetEntity, List<DockingPortState>> docks)
{
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2))
return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, null, null, docks, Shared._NF.Shuttles.Events.InertiaDampeningMode.Dampen); // Frontier: add inertia dampening
return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, null, null, docks, Shared._NF.Shuttles.Events.InertiaDampeningMode.Dampened); // Frontier: add inertia dampening

return GetNavState(
entity,
Expand All @@ -389,7 +389,7 @@ public NavInterfaceState GetNavState(
Angle angle)
{
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2))
return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, GetNetCoordinates(coordinates), angle, docks, InertiaDampeningMode.Dampen); // Frontier: add inertial dampening
return new NavInterfaceState(SharedRadarConsoleSystem.DefaultMaxRange, GetNetCoordinates(coordinates), angle, docks, InertiaDampeningMode.Dampened); // Frontier: add inertial dampening

return new NavInterfaceState(
entity.Comp1.MaxRange,
Expand Down
15 changes: 10 additions & 5 deletions Content.Server/Station/Systems/StationDampeningSystem.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Server.Shuttles.Components;
using Content.Server.Station.Events;
using Content.Shared.Physics;

Expand All @@ -17,12 +18,16 @@ private void OnInitStation(ref StationPostInitEvent ev)
// If the station grid doesn't have defined dampening, give it a small dampening by default
// This will ensure cargo tech pros won't fling the station 1000 megaparsec away from the galaxy
if (!TryComp<PassiveDampeningComponent>(grid, out var dampening))
{
dampening = AddComp<PassiveDampeningComponent>(grid);
dampening.Enabled = true;
dampening.LinearDampening = 0.01f;
dampening.AngularDampening = 0.01f;
}

EntityManager.TryGetComponent(grid, out ShuttleComponent? shuttleComponent);

// PassiveDampeningComponent conflicts with shuttles cruise control a frontier QOL and is resetting dampeners causing issues.
// so if a station which shuttles have the station component too, then don't reset the physics to a near off state when it gets bumped
dampening.Enabled = true;
dampening.LinearDampening = shuttleComponent?.LinearDamping ?? 0.01f;
dampening.AngularDampening = shuttleComponent?.AngularDamping ?? 0.01f;

}
}
}
69 changes: 25 additions & 44 deletions Content.Server/_NF/Shuttles/Systems/ShuttleSystem.cs
Original file line number Diff line number Diff line change
@@ -1,57 +1,49 @@
// New Frontiers - This file is licensed under AGPLv3
// Copyright (c) 2024 New Frontiers Contributors
// NeuPanda - This file is licensed under AGPLv3
// Copyright (c) 2025 NeuPanda
// See AGPLv3.txt for details.
using Content.Server._NF.Station.Components;
using Content.Server.Shuttles.Components;
using Content.Server.Station.Components;
using Content.Shared._NF.Shuttles.Events;
using Content.Shared.CCVar;
using Robust.Shared.Physics.Components;

namespace Content.Server.Shuttles.Systems;

public sealed partial class ShuttleSystem
{
private const float SpaceFrictionStrength = 0.0015f;
private const float AnchorDampeningStrength = 0.5f;
private float _spaceFrictionStrength;
private float _anchorDampeningStrength;
private void NfInitialize()
{
SubscribeLocalEvent<ShuttleConsoleComponent, SetInertiaDampeningRequest>(OnSetInertiaDampening);
_spaceFrictionStrength = _cfg.GetCVar(CCVars.SpaceFrictionStrength);
_anchorDampeningStrength = _cfg.GetCVar(CCVars.AnchorDampeningStrength);
}

private void OnSetInertiaDampening(EntityUid uid, ShuttleConsoleComponent component, SetInertiaDampeningRequest args)
{
// Ensure that the entity requested is a valid shuttle (stations should not be togglable)
if (!EntityManager.TryGetComponent(uid, out TransformComponent? transform) ||
if (!EntityManager.TryGetComponent(GetEntity(args.ShuttleEntityUid), out TransformComponent? transform) ||
!transform.GridUid.HasValue ||
!EntityManager.TryGetComponent(transform.GridUid, out PhysicsComponent? physicsComponent) ||
!EntityManager.TryGetComponent(transform.GridUid, out ShuttleComponent? shuttleComponent))
return;

if (args.Mode == InertiaDampeningMode.Query)
{
_console.RefreshShuttleConsoles(transform.GridUid.Value);
return;
}

if (!EntityManager.HasComponent<ShuttleComponent>(transform.GridUid) ||
EntityManager.TryGetComponent<StationDataComponent>(_station.GetOwningStation(transform.GridUid), out var stationData)
&& stationData.StationConfig != null)
return;
_console.RefreshShuttleConsoles(transform.GridUid.Value);

var linearDampeningStrength = args.Mode switch
{
InertiaDampeningMode.Off => SpaceFrictionStrength,
InertiaDampeningMode.Dampen => shuttleComponent.LinearDamping,
InertiaDampeningMode.Anchor => AnchorDampeningStrength,
_ => shuttleComponent.LinearDamping, // other values: default to some sane behaviour (assume normal dampening)
InertiaDampeningMode.Off => _spaceFrictionStrength,
InertiaDampeningMode.Dampened => shuttleComponent.LinearDamping, // should i use Dampener Strength instead?
InertiaDampeningMode.Anchored => _anchorDampeningStrength,
_ => shuttleComponent.LinearDamping, // if some how we end up here... just keep calm and carry on with your bad self
};

var angularDampeningStrength = args.Mode switch
{
InertiaDampeningMode.Off => SpaceFrictionStrength,
InertiaDampeningMode.Dampen => shuttleComponent.AngularDamping,
InertiaDampeningMode.Anchor => AnchorDampeningStrength,
_ => shuttleComponent.AngularDamping, // other values: default to some sane behaviour (assume normal dampening)
InertiaDampeningMode.Off => _spaceFrictionStrength,
InertiaDampeningMode.Dampened => shuttleComponent.AngularDamping,
InertiaDampeningMode.Anchored => _anchorDampeningStrength,
_ => shuttleComponent.AngularDamping, // if some how we end up here... just keep calm and carry on with your bad self
};

_physics.SetLinearDamping(transform.GridUid.Value, physicsComponent, linearDampeningStrength);
Expand All @@ -61,27 +53,16 @@ private void OnSetInertiaDampening(EntityUid uid, ShuttleConsoleComponent compon

public InertiaDampeningMode NfGetInertiaDampeningMode(EntityUid entity)
{
if (!EntityManager.TryGetComponent<TransformComponent>(entity, out var xform))
return InertiaDampeningMode.Dampen;
if (!EntityManager.TryGetComponent<TransformComponent>(entity, out var xform) ||
!EntityManager.TryGetComponent(xform.GridUid, out PhysicsComponent? physicsComponent))
return InertiaDampeningMode.Dampened;

var owningStation = _station.GetOwningStation(xform.GridUid);
if (physicsComponent.LinearDamping == _anchorDampeningStrength)
return InertiaDampeningMode.Anchored;

// Not a shuttle, shouldn't be togglable
if (!EntityManager.HasComponent<ShuttleComponent>(xform.GridUid) ||
EntityManager.TryGetComponent<StationDataComponent>(owningStation, out var stationData)
&& stationData.StationConfig != null)
return InertiaDampeningMode.Station;

if (!EntityManager.TryGetComponent(xform.GridUid, out PhysicsComponent? physicsComponent))
return InertiaDampeningMode.Dampen;

if (physicsComponent.LinearDamping >= AnchorDampeningStrength)
return InertiaDampeningMode.Anchor;

if (physicsComponent.LinearDamping <= SpaceFrictionStrength)
else if (physicsComponent.LinearDamping == _spaceFrictionStrength)
return InertiaDampeningMode.Off;

return InertiaDampeningMode.Dampen;
else
return InertiaDampeningMode.Dampened;
}

}
Loading
Loading