Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

Commit

Permalink
adaptando RotatableSystem.cs pras funções de rotacionar não precisare…
Browse files Browse the repository at this point in the history
…m chamar SharedInterectionSystem que não estão presentes no EE
  • Loading branch information
Nagel-P authored and rbertoche committed Oct 3, 2024
1 parent a424034 commit 70d2c7d
Showing 1 changed file with 30 additions and 44 deletions.
74 changes: 30 additions & 44 deletions Content.Server/Rotatable/RotatableSystem.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
using Content.Server.Popups;
using Content.Shared.ActionBlocker;
using Content.Shared.Input;
using Content.Shared.Interaction;
using Content.Shared.Popups;
using Content.Shared.Rotatable;
using Content.Shared.Verbs;
using Robust.Shared.Input.Binding;
using Robust.Shared.Map;
using Robust.Shared.Player;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Utility;
using Robust.Shared.Map;
using Content.Shared.Input;
using Content.Shared.ActionBlocker;
using Robust.Shared.Input.Binding;
using Robust.Shared.Player;

namespace Content.Server.Rotatable
{
Expand All @@ -20,7 +20,6 @@ public sealed class RotatableSystem : EntitySystem
{
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;

public override void Initialize()
{
Expand All @@ -39,16 +38,12 @@ private void AddFlipVerb(EntityUid uid, FlippableComponent component, GetVerbsEv
if (!args.CanAccess || !args.CanInteract)
return;

// Check if the object is anchored.
if (EntityManager.TryGetComponent(uid, out PhysicsComponent? physics) && physics.BodyType == BodyType.Static)
return;

Verb verb = new()
{
Act = () => Flip(uid, component),
Act = () => TryFlip(uid, component, args.User),
Text = Loc.GetString("flippable-verb-get-data-text"),
Category = VerbCategory.Rotate,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/flip.svg.192dpi.png")),
Priority = -3, // show flip last
DoContactInteraction = true
};
Expand All @@ -59,63 +54,47 @@ private void AddRotateVerbs(EntityUid uid, RotatableComponent component, GetVerb
{
if (!args.CanAccess
|| !args.CanInteract
|| Transform(uid).NoLocalRotation) // Good ol prototype inheritance, eh?
|| Transform(uid).NoLocalRotation)
return;

// Check if the object is anchored, and whether we are still allowed to rotate it.
if (!component.RotateWhileAnchored &&
EntityManager.TryGetComponent(uid, out PhysicsComponent? physics) &&
physics.BodyType == BodyType.Static)
return;

Verb resetRotation = new()
Verb resetRotation = new ()
{
DoContactInteraction = true,
Act = () => EntityManager.GetComponent<TransformComponent>(uid).LocalRotation = Angle.Zero,
Category = VerbCategory.Rotate,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")),
Text = "Reset",
Priority = -2, // show CCW, then CW, then reset
Priority = -2,
CloseMenu = false,
};
args.Verbs.Add(resetRotation);

// rotate clockwise
Verb rotateCW = new()
{
Act = () => EntityManager.GetComponent<TransformComponent>(uid).LocalRotation -= component.Increment,
Category = VerbCategory.Rotate,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/rotate_cw.svg.192dpi.png")),
Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/rotate_cw.svg.192dpi.png")),
Priority = -1,
CloseMenu = false, // allow for easy double rotations.
CloseMenu = false,
};
args.Verbs.Add(rotateCW);

// rotate counter-clockwise
Verb rotateCCW = new()
{
Act = () => EntityManager.GetComponent<TransformComponent>(uid).LocalRotation += component.Increment,
Category = VerbCategory.Rotate,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/rotate_ccw.svg.192dpi.png")),
Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/rotate_ccw.svg.192dpi.png")),
Priority = 0,
CloseMenu = false, // allow for easy double rotations.
CloseMenu = false,
};
args.Verbs.Add(rotateCCW);
}

/// <summary>
/// Replace a flippable entity with it's flipped / mirror-symmetric entity.
/// </summary>
public void Flip(EntityUid uid, FlippableComponent component)
{
var oldTransform = EntityManager.GetComponent<TransformComponent>(uid);
var entity = EntityManager.SpawnEntity(component.MirrorEntity, oldTransform.Coordinates);
var newTransform = EntityManager.GetComponent<TransformComponent>(entity);
newTransform.LocalRotation = oldTransform.LocalRotation;
newTransform.Anchored = false;
EntityManager.DeleteEntity(uid);
}

public bool HandleRotateObjectClockwise(ICommonSession? playerSession, EntityCoordinates coordinates, EntityUid entity)
{
if (playerSession?.AttachedEntity is not { Valid: true } player || !Exists(player))
Expand All @@ -124,10 +103,9 @@ public bool HandleRotateObjectClockwise(ICommonSession? playerSession, EntityCoo
if (!TryComp<RotatableComponent>(entity, out var rotatableComp))
return false;

if (!_actionBlocker.CanInteract(player, entity) || !_interaction.InRangeAndAccessible(player, entity))
if (!_actionBlocker.CanInteract(player, entity))
return false;

// Check if the object is anchored, and whether we are still allowed to rotate it.
if (!rotatableComp.RotateWhileAnchored && EntityManager.TryGetComponent(entity, out PhysicsComponent? physics) &&
physics.BodyType == BodyType.Static)
{
Expand All @@ -147,10 +125,9 @@ public bool HandleRotateObjectCounterclockwise(ICommonSession? playerSession, En
if (!TryComp<RotatableComponent>(entity, out var rotatableComp))
return false;

if (!_actionBlocker.CanInteract(player, entity) || !_interaction.InRangeAndAccessible(player, entity))
if (!_actionBlocker.CanInteract(player, entity))
return false;

// Check if the object is anchored, and whether we are still allowed to rotate it.
if (!rotatableComp.RotateWhileAnchored && EntityManager.TryGetComponent(entity, out PhysicsComponent? physics) &&
physics.BodyType == BodyType.Static)
{
Expand All @@ -170,18 +147,27 @@ public bool HandleFlipObject(ICommonSession? playerSession, EntityCoordinates co
if (!TryComp<FlippableComponent>(entity, out var flippableComp))
return false;

if (!_actionBlocker.CanInteract(player, entity) || !_interaction.InRangeAndAccessible(player, entity))
if (!_actionBlocker.CanInteract(player, entity))
return false;

// Check if the object is anchored.
if (EntityManager.TryGetComponent(entity, out PhysicsComponent? physics) && physics.BodyType == BodyType.Static)
{
_popup.PopupEntity(Loc.GetString("flippable-component-try-flip-is-stuck"), entity, player);
return false;
}

Flip(entity, flippableComp);
TryFlip(entity, flippableComp, player);
return true;
}

public void TryFlip(EntityUid uid, FlippableComponent component, EntityUid user)
{
var oldTransform = EntityManager.GetComponent<TransformComponent>(uid);
var entity = EntityManager.SpawnEntity(component.MirrorEntity, oldTransform.Coordinates);
var newTransform = EntityManager.GetComponent<TransformComponent>(entity);
newTransform.LocalRotation = oldTransform.LocalRotation;
newTransform.Anchored = false;
EntityManager.DeleteEntity(uid);
}
}
}

0 comments on commit 70d2c7d

Please sign in to comment.