OverlayManager refactor and Flash (#1218)
* Flash component, overlay and shader Add BeginDraw method to Overlay.cs * Add flash icons, sounds * Progress * Multiple overlays without enums * This is probably the worst way to do this IDK * Remove nullable reference type * Add AttackEventArgs as parameter to OnHitEntities MeleeWeaponComponent.Attack now continues when OnHitEntities returns true (it hit something) Add OverlayType enum so client and server can agree on overlay ids Move IConfigurable to its own file Add AoE flash with shorter duration Flashing someone slows them down * Add arc to flash Set item size to something reasonable Remove chat log message when flash burns out * Remove unused interface
This commit is contained in:
@@ -1,6 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Timers;
|
||||
using Robust.Shared.ViewVariables;
|
||||
using YamlDotNet.RepresentationModel;
|
||||
using Component = Robust.Shared.GameObjects.Component;
|
||||
|
||||
namespace Content.Shared.GameObjects.Components.Mobs
|
||||
{
|
||||
@@ -13,21 +21,72 @@ namespace Content.Shared.GameObjects.Components.Mobs
|
||||
public sealed override uint? NetID => ContentNetIDs.OVERLAYEFFECTS;
|
||||
}
|
||||
|
||||
public enum ScreenEffects
|
||||
[Serializable, NetSerializable]
|
||||
public class OverlayContainer
|
||||
{
|
||||
None,
|
||||
CircleMask,
|
||||
GradientCircleMask,
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public string ID { get; }
|
||||
|
||||
public OverlayContainer([NotNull] string id)
|
||||
{
|
||||
ID = id;
|
||||
}
|
||||
|
||||
public OverlayContainer(OverlayType type) : this(type.ToString())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj is OverlayContainer container)
|
||||
{
|
||||
return container.ID == ID;
|
||||
}
|
||||
|
||||
if (obj is string idString)
|
||||
{
|
||||
return idString == ID;
|
||||
}
|
||||
|
||||
return base.Equals(obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return (ID != null ? ID.GetHashCode() : 0);
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public class OverlayEffectComponentState : ComponentState
|
||||
{
|
||||
public ScreenEffects ScreenEffect;
|
||||
public List<OverlayContainer> Overlays;
|
||||
|
||||
public OverlayEffectComponentState(ScreenEffects screenEffect) : base(ContentNetIDs.OVERLAYEFFECTS)
|
||||
public OverlayEffectComponentState(List<OverlayContainer> overlays) : base(ContentNetIDs.OVERLAYEFFECTS)
|
||||
{
|
||||
ScreenEffect = screenEffect;
|
||||
Overlays = overlays;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public class TimedOverlayContainer : OverlayContainer
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public int Length { get; }
|
||||
|
||||
public TimedOverlayContainer(string id, int length) : base(id)
|
||||
{
|
||||
Length = length;
|
||||
}
|
||||
|
||||
public void StartTimer(Action finished) => Timer.Spawn(Length, finished);
|
||||
}
|
||||
|
||||
public enum OverlayType
|
||||
{
|
||||
GradientCircleMaskOverlay,
|
||||
CircleMaskOverlay,
|
||||
FlashOverlay
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user