mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-30 16:17:27 +00:00
* Initial radial menu prototyping for the RCD
* Radial UI buttons can send messages to the server
* Beginning to update RCDSystem
* RCD building system in progress
* Further updates
* Added extra effects, RCDSystem now reads RCD prototype data
* Replacing tiles is instant, multiple constructions are allowed, deconstruction is broken
* Added extra functionality to RadialContainers plus documentation
* Fixed localization of RCD UI strings
* Menu opens near cursor, added basic RCD
* Avoiding merge conflict
* Implemented atomized construction / deconstruction rules
* Increased RCD ammo base charges
* Moved input context definition to content
* Removed obsoleted code
* Updates to system
* Switch machine and computer frames for electrical cabling
* Added construction ghosts
* Fixed issue with keybind detection code
* Fixed RCD construction ghost mispredications
* Code clean up
* Updated deconstruction effects
* RCDs effects don't rotate
* Code clean up
* Balancing for ammo counts
* Code clean up
* Added missing localized strings
* More clean up
* Made directional window handling more robust
* Added documentation to radial menus and made them no longer dependent on Content
* Made radial containers more robust
* Further robustness to the radial menu
* The RCD submenu buttons are only shown when the destination layer has at least one children
* Expanded upon deconstructing plus construction balance
* Fixed line endings
* Updated list of RCD deconstructable entities. Now needs a component to deconstruct instead of a tag
* Bug fixes
* Revert unnecessary change
* Updated RCD strings
* Fixed bug
* More fixes
* Deconstructed tiles/subflooring convert to lattice instead
* Fixed failed tests (Linux doesn't like invalid spritespecifer paths)
* Fixing merge conflict
* Updated airlock assembly
* Fixing merge conflict
* Fixing merge conflict
* More fixing...
* Removed erroneous project file change
* Fixed string handling issue
* Trying to fix merge conflict
* Still fixing merge conflicts
* Balancing
* Hidden RCD construction ghosts when in 'build' mode
* Fixing merge conflict
* Implemented requested changes (Part 1)
* Added more requested changes
* Fix for failed test. Removed sussy null suppression
* Made requested changes - custom construction ghost system was replaced
* Fixing merge conflict
* Fixed merge conflict
* Fixed bug in RCD construction ghost validation
* Fixing merge conflict
* Merge conflict fixed
* Made required update
* Removed lingering RCD deconstruct tag
* Fixing merge conflict
* Merge conflict fixed
* Made requested changes
* Bug fixes and balancing
* Made string names more consistent
* Can no longer stack catwalks
(cherry picked from commit 02273ca0e7)
79 lines
2.8 KiB
C#
79 lines
2.8 KiB
C#
using Content.Shared.Hands.Components;
|
|
using Content.Shared.Interaction;
|
|
using Content.Shared.RCD;
|
|
using Content.Shared.RCD.Components;
|
|
using Content.Shared.RCD.Systems;
|
|
using Robust.Client.Placement;
|
|
using Robust.Client.Player;
|
|
using Robust.Shared.Enums;
|
|
|
|
namespace Content.Client.RCD;
|
|
|
|
public sealed class RCDConstructionGhostSystem : EntitySystem
|
|
{
|
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
|
[Dependency] private readonly RCDSystem _rcdSystem = default!;
|
|
[Dependency] private readonly IPlacementManager _placementManager = default!;
|
|
|
|
private string _placementMode = typeof(AlignRCDConstruction).Name;
|
|
private Direction _placementDirection = default;
|
|
|
|
public override void Update(float frameTime)
|
|
{
|
|
base.Update(frameTime);
|
|
|
|
// Get current placer data
|
|
var placerEntity = _placementManager.CurrentPermission?.MobUid;
|
|
var placerProto = _placementManager.CurrentPermission?.EntityType;
|
|
var placerIsRCD = HasComp<RCDComponent>(placerEntity);
|
|
|
|
// Exit if erasing or the current placer is not an RCD (build mode is active)
|
|
if (_placementManager.Eraser || (placerEntity != null && !placerIsRCD))
|
|
return;
|
|
|
|
// Determine if player is carrying an RCD in their active hand
|
|
var player = _playerManager.LocalSession?.AttachedEntity;
|
|
|
|
if (!TryComp<HandsComponent>(player, out var hands))
|
|
return;
|
|
|
|
var heldEntity = hands.ActiveHand?.HeldEntity;
|
|
|
|
if (!TryComp<RCDComponent>(heldEntity, out var rcd))
|
|
{
|
|
// If the player was holding an RCD, but is no longer, cancel placement
|
|
if (placerIsRCD)
|
|
_placementManager.Clear();
|
|
|
|
return;
|
|
}
|
|
|
|
// Update the direction the RCD prototype based on the placer direction
|
|
if (_placementDirection != _placementManager.Direction)
|
|
{
|
|
_placementDirection = _placementManager.Direction;
|
|
RaiseNetworkEvent(new RCDConstructionGhostRotationEvent(GetNetEntity(heldEntity.Value), _placementDirection));
|
|
}
|
|
|
|
// If the placer has not changed, exit
|
|
_rcdSystem.UpdateCachedPrototype(heldEntity.Value, rcd);
|
|
|
|
if (heldEntity == placerEntity && rcd.CachedPrototype.Prototype == placerProto)
|
|
return;
|
|
|
|
// Create a new placer
|
|
var newObjInfo = new PlacementInformation
|
|
{
|
|
MobUid = heldEntity.Value,
|
|
PlacementOption = _placementMode,
|
|
EntityType = rcd.CachedPrototype.Prototype,
|
|
Range = (int) Math.Ceiling(SharedInteractionSystem.InteractionRange),
|
|
IsTile = (rcd.CachedPrototype.Mode == RcdMode.ConstructTile),
|
|
UseEditorContext = false,
|
|
};
|
|
|
|
_placementManager.Clear();
|
|
_placementManager.BeginPlacing(newObjInfo);
|
|
}
|
|
}
|