Make magical vision drain Mana (#1832)
* added generic Entity Effects status effect component * added Magic Vision Statuseffect component * renamed visionmask to Visibilitymask and added StatusEffectComponent notice comment * added two event listeners on MagicVisonStatusEffect applied and removed * moved changes to server side * moved Component serverside * removed Overlay Property * Added magic vison status effect prototype and applying * cleaned upnew lines * added new prototype * moved Magic vision status effect component to shared again * fixed applying mask * cleaned new lines * Moved to components folder * marked MagicVisionComponent obsolete and changed protoid name * Added parent MobStatusEffectBase * added mana cost to Magical vision spell * removed unneeded constructor * Added the system * added statuseffect eventlistners for applied and removed also removed old event listners * removed old magic vision component check * Removed Data field attribute * added back Data field attribute * added access atribute * moved Status effect update to server * removed shared System moved all to server side * Update Content.Shared/_CP14/StatusEffect/Components/CP14EntityEffectsStatusEffectComponent.cs Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com> * Fix typo in DataField attribute for Effects list * Obliterated CP14MagicVisionComponent from existence * Fix comment capitalization in CP14EntityEffectsStatusEffectComponent * Fix summary capitalization in CP14EntityEffectsStatusEffectComponent * Refactor CP14MagicVisionSystem.cs by removing blank lines Removed unnecessary blank lines for cleaner code. * Remove status effect event handlers Removed event subscription and related methods for status effects. * Remove empty line in OnExamined method * Added a Spell toggle status effect * fixed datfields shouldnt be static * imlpemented status applying in yml * cleaned white space :3 * changed toggle to has status effect * fix leftover * added check for firsttime predict so it doesnt get applied twice * added getvismaskevent to statuseffect relay * changed event lisnter to use CP14MagicVisionStatusEffectComponent to prevent future conflicts * removed unneeded _status property * added check for if its the last status effect on remove * added check if Status effect is already present if applied * changed check to component instead of entity * changed ent target to player.localEntity * fix: removed has effect check as it already has the effect when first apllied * changed event to on player attached * removed first time predicted check * changed cooldown to 0.5 seconds * made Spell mana change effect not save * added status efect applied event listner back and moved apply and remove overlay to separete methods * removed replaced action event * added fix to let nextupdate catch up to CurTime * fix: status effect not beeing removed when crit or dead * fix: Action beeing able to be used while dead * fix: added prediction check to applied back for double apply and remove bug --------- Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared._CP14.MagicVision;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.StatusEffectNew;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
@@ -9,6 +10,7 @@ using Robust.Shared.Audio;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client._CP14.MagicVision;
|
||||
@@ -21,6 +23,8 @@ public sealed class CP14ClientMagicVisionSystem : CP14SharedMagicVisionSystem
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly IOverlayManager _overlayMan = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly StatusEffectsSystem _status = default!;
|
||||
|
||||
|
||||
private CP14MagicVisionOverlay? _overlay;
|
||||
private CP14MagicVisionNoirOverlay? _overlay2;
|
||||
@@ -36,71 +40,39 @@ public sealed class CP14ClientMagicVisionSystem : CP14SharedMagicVisionSystem
|
||||
|
||||
SubscribeLocalEvent<CP14MagicVisionMarkerComponent, AfterAutoHandleStateEvent>(OnHandleStateMarker);
|
||||
|
||||
SubscribeLocalEvent<CP14MagicVisionComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<CP14MagicVisionComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
|
||||
SubscribeLocalEvent<CP14MagicVisionStatusEffectComponent, StatusEffectRelayedEvent<LocalPlayerAttachedEvent>>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<CP14MagicVisionStatusEffectComponent, StatusEffectRelayedEvent<LocalPlayerDetachedEvent>>(OnPlayerDetached);
|
||||
|
||||
SubscribeLocalEvent<CP14MagicVisionStatusEffectComponent, StatusEffectAppliedEvent>(OnStatusEffectApplied);
|
||||
SubscribeLocalEvent<CP14MagicVisionStatusEffectComponent, StatusEffectRemovedEvent>(OnStatusEffectRemoved);
|
||||
|
||||
SubscribeLocalEvent<CP14MagicVisionComponent, ComponentInit>(OnComponentInit);
|
||||
SubscribeLocalEvent<CP14MagicVisionComponent, ComponentShutdown>(OnComponentShutdown);
|
||||
}
|
||||
|
||||
private void OnComponentShutdown(Entity<CP14MagicVisionComponent> ent, ref ComponentShutdown args)
|
||||
private void OnPlayerAttached(Entity<CP14MagicVisionStatusEffectComponent> ent, ref StatusEffectRelayedEvent<LocalPlayerAttachedEvent> args)
|
||||
{
|
||||
if (_player.LocalEntity != ent)
|
||||
return;
|
||||
if (_overlay != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
_overlay = null;
|
||||
}
|
||||
if (_overlay2 != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay2);
|
||||
_overlay2 = null;
|
||||
}
|
||||
|
||||
_audio.PlayGlobal(_endSound, ent);
|
||||
ApplyOverlay(ent);
|
||||
}
|
||||
|
||||
private void OnComponentInit(Entity<CP14MagicVisionComponent> ent, ref ComponentInit args)
|
||||
private void OnStatusEffectApplied(Entity<CP14MagicVisionStatusEffectComponent> ent, ref StatusEffectAppliedEvent args)
|
||||
{
|
||||
if (_player.LocalEntity != ent)
|
||||
//Prevents it from beeing applied twice
|
||||
if (_timing.IsFirstTimePredicted == true)
|
||||
return;
|
||||
|
||||
_overlay = new CP14MagicVisionOverlay();
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
_overlay.StartOverlay = _timing.CurTime;
|
||||
|
||||
_overlay2 = new CP14MagicVisionNoirOverlay();
|
||||
_overlayMan.AddOverlay(_overlay2);
|
||||
|
||||
_audio.PlayGlobal(_startSound, ent);
|
||||
ApplyOverlay(ent);
|
||||
}
|
||||
|
||||
private void OnPlayerAttached(Entity<CP14MagicVisionComponent> ent, ref LocalPlayerAttachedEvent args)
|
||||
private void OnPlayerDetached(Entity<CP14MagicVisionStatusEffectComponent> ent, ref StatusEffectRelayedEvent<LocalPlayerDetachedEvent> args)
|
||||
{
|
||||
_overlay = new CP14MagicVisionOverlay();
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
_overlay.StartOverlay = _timing.CurTime;
|
||||
|
||||
_overlay2 = new CP14MagicVisionNoirOverlay();
|
||||
_overlayMan.AddOverlay(_overlay2);
|
||||
|
||||
_audio.PlayGlobal(_startSound, ent);
|
||||
RemoveOverlay(ent);
|
||||
}
|
||||
|
||||
private void OnPlayerDetached(Entity<CP14MagicVisionComponent> ent, ref LocalPlayerDetachedEvent args)
|
||||
private void OnStatusEffectRemoved(Entity<CP14MagicVisionStatusEffectComponent> ent, ref StatusEffectRemovedEvent args)
|
||||
{
|
||||
if (_overlay != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
_overlay = null;
|
||||
}
|
||||
if (_overlay2 != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay2);
|
||||
_overlay2 = null;
|
||||
}
|
||||
_audio.PlayGlobal(_endSound, ent);
|
||||
//Prevents it from beeing removed twice
|
||||
if (_timing.IsFirstTimePredicted == true)
|
||||
return;
|
||||
|
||||
RemoveOverlay(ent);
|
||||
}
|
||||
|
||||
protected override void OnExamined(Entity<CP14MagicVisionMarkerComponent> ent, ref ExaminedEvent args)
|
||||
@@ -156,4 +128,36 @@ public sealed class CP14ClientMagicVisionSystem : CP14SharedMagicVisionSystem
|
||||
var alpha = 1 - progress;
|
||||
_sprite.SetColor(ent.Owner, Color.White.WithAlpha((float)alpha));
|
||||
}
|
||||
|
||||
private void ApplyOverlay(Entity<CP14MagicVisionStatusEffectComponent> ent)
|
||||
{
|
||||
_overlay = new CP14MagicVisionOverlay();
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
_overlay.StartOverlay = _timing.CurTime;
|
||||
|
||||
_overlay2 = new CP14MagicVisionNoirOverlay();
|
||||
_overlayMan.AddOverlay(_overlay2);
|
||||
|
||||
_audio.PlayGlobal(_startSound, ent);
|
||||
}
|
||||
|
||||
private void RemoveOverlay(Entity<CP14MagicVisionStatusEffectComponent> ent)
|
||||
{
|
||||
// Check if it is the last Magic Vision Status Effect
|
||||
if (_status.HasEffectComp<CP14MagicVisionStatusEffectComponent>(_player.LocalEntity))
|
||||
return;
|
||||
|
||||
if (_overlay != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
_overlay = null;
|
||||
}
|
||||
if (_overlay2 != null)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay2);
|
||||
_overlay2 = null;
|
||||
}
|
||||
|
||||
_audio.PlayGlobal(_endSound, ent);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user