From 9b751fc079454a19664bf4c0f149f7a047123d1a Mon Sep 17 00:00:00 2001 From: F77F <66768086+F77F@users.noreply.github.com> Date: Wed, 28 Oct 2020 08:52:39 -0500 Subject: [PATCH] Add weightlessness status effect. (#2384) * Add weightlessness status effect. * remove system, add new action * Update Content.Shared/GameObjects/Components/Mobs/SharedWeightlessStatusComponent.cs Co-authored-by: Paul Ritter * Update Content.Shared/GameObjects/Components/Mobs/SharedWeightlessStatusComponent.cs Co-authored-by: Paul Ritter * Update Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs Co-authored-by: Paul Ritter * Update Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs Co-authored-by: Paul Ritter * fix paul's typo. does not run. * add client side component * move logic to eventbus * remove client/server components and clean up code * remove useless component, revert human.yml changes. Co-authored-by: scuffedjays Co-authored-by: Paul Ritter --- .../EntitySystems/WeightlessStatusSystem.cs | 35 ++++++++++++++++++ .../Mobs/SharedStatusEffectsComponent.cs | 3 +- .../MovementIgnoreGravityComponent.cs | 7 +++- .../WeightlessChangeMessage.cs | 21 +++++++++++ .../StatusEffects/Weightless/weightless.png | Bin 0 -> 786 bytes 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 Content.Server/GameObjects/EntitySystems/WeightlessStatusSystem.cs create mode 100644 Content.Shared/GameObjects/EntitySystemMessages/WeightlessChangeMessage.cs create mode 100644 Resources/Textures/Interface/StatusEffects/Weightless/weightless.png diff --git a/Content.Server/GameObjects/EntitySystems/WeightlessStatusSystem.cs b/Content.Server/GameObjects/EntitySystems/WeightlessStatusSystem.cs new file mode 100644 index 0000000000..46cc8fb4b6 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/WeightlessStatusSystem.cs @@ -0,0 +1,35 @@ +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.EntitySystemMessages; +using Robust.Shared.GameObjects.Systems; + +namespace Content.Shared.GameObjects.EntitySystems +{ + + public sealed class WeightlessStatusSystem : EntitySystem + { + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(HandleWeightlessChanged); + } + + private void HandleWeightlessChanged(WeightlessChangeMessage msg) + { + var ent = msg.Entity; + if (!ent.TryGetComponent(out SharedStatusEffectsComponent status)) + { + return; + } + + if(msg.Weightless) + { + status.ChangeStatusEffect(StatusEffect.Weightless,"/Textures/Interface/StatusEffects/Weightless/weightless.png",null); + } + else + { + status.RemoveStatusEffect(StatusEffect.Weightless); + } + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedStatusEffectsComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedStatusEffectsComponent.cs index 8ffb4da6ed..68c6b41d2e 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedStatusEffectsComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedStatusEffectsComponent.cs @@ -68,6 +68,7 @@ namespace Content.Shared.GameObjects.Components.Mobs Buckled, Piloting, Pulling, - Pulled + Pulled, + Weightless } } diff --git a/Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs b/Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs index c69a2d8bf3..dd87e11e52 100644 --- a/Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/MovementIgnoreGravityComponent.cs @@ -1,8 +1,11 @@ #nullable enable +using System; +using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Physics; using Robust.Shared.IoC; +using Content.Shared.GameObjects.EntitySystemMessages; namespace Content.Shared.GameObjects.Components.Movement { @@ -18,8 +21,10 @@ namespace Content.Shared.GameObjects.Components.Movement { physicsManager ??= IoCManager.Resolve(); - return !entity.HasComponent() && + var isWeightless = !entity.HasComponent() && physicsManager.IsWeightless(entity.Transform.Coordinates); + entity.EntityManager.EventBus.RaiseEvent(EventSource.Local, new WeightlessChangeMessage(entity,isWeightless)); + return isWeightless; } } } diff --git a/Content.Shared/GameObjects/EntitySystemMessages/WeightlessChangeMessage.cs b/Content.Shared/GameObjects/EntitySystemMessages/WeightlessChangeMessage.cs new file mode 100644 index 0000000000..a6ff6f45d6 --- /dev/null +++ b/Content.Shared/GameObjects/EntitySystemMessages/WeightlessChangeMessage.cs @@ -0,0 +1,21 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.EntitySystemMessages +{ + [Serializable, NetSerializable] + public sealed class WeightlessChangeMessage : EntitySystemMessage + { + public readonly IEntity Entity; + public readonly bool Weightless; + + public WeightlessChangeMessage(IEntity ent, bool isNowWeightless) + { + Entity = ent; + Weightless = isNowWeightless; + } + } + +} diff --git a/Resources/Textures/Interface/StatusEffects/Weightless/weightless.png b/Resources/Textures/Interface/StatusEffects/Weightless/weightless.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee4f0108359a9f9112e3aaa171ebfbc8f7b5dc6 GIT binary patch literal 786 zcmV+t1MU2YP)cKoog45{V!hjcd-`F4XJw2JQoa zz@>vr(itm?JWEXs5C{gRG(}Nt0fuR7XO}c;6@2@!ua0^*5C|X`oYDXoqz4Re9Oo%G zRpM3(cOPw%AEi&1GSO~}#{GZ+uh|2@$?+kU(phNT4irTh`M!0!#wO6Jmer+nmMkpZ zf!0+?t6CmPVd4a+v~CAKkB=OK=Qj!j0FK`8sS_sv0Bndr>vq6#oa6Jk`4nVH0LO9u z5up9u)TmXUD9Yq(003l3F#22d@X2#x9^V%NGtpVdl3*jSwX;hAeWlR)@Pz=?axQPI z0-E{B@gZ8(vP$XrLO|=Pn2F8;wF;6e8IsQ30}XCn8NL!&N@u}_^eO-IyKanWHE?MH zYfoPiHbfvxf}UYt?_R%9&F|1_b8x;{cl<7RCLl`!8np^gs~BzhjRGluE~=|*+XNQT z;O2S1GJ%6Puha*RpAlOoIS_MjnmGX1%*_VO8cE>m!CPA<{Yobbi?;`YyUn}Rz(iI- z5&#unKyDSODPG~uo zCo=TS2>>KlGWOcR1PGY1^Ub<3-!$V^wT#UDbz**IH855UXx$EENx=EJYV>iF)3dP% z{A~-+nio`^)_QU!L+0jF@P)wlFCRy4Iu(812_4VLfLS&IfPLTZRkR+Q{sREq37nq( zV%-iVUQ7);s7TTo%P@@HKrEKfM3HCPZPC}`8N)EnM>A@|&)|-RuKRfY4-<#F){{B# Qk^lez07*qoM6N<$f+rqg!2kdN literal 0 HcmV?d00001