Files
tbd-station-14/Content.Client/Administration/UI/SpawnExplosion/SpawnExplosionEui.cs
Leon Friedrich 56168e592e Explosion refactor (#5230)
* Explosions

* fix yaml typo

and prevent silly UI inputs

* oop

* Use modified contains() checks

And remove IEnumerable

* Buff nuke, nerf meteors

* optimize the entity lookup stuff a bit

* fix tile (0,0) error

forgot to do an initial Enumerator.MoveNext(), so the first tile was always the "null" tile.

* remove celebration

* byte -> int

* remove diag edge tile dict

* fix one bug

but there is another

* fix the other bug

turns out dividing a ushort leads to rounding errors.  Why TF is the grid tile size even a ushort in the first place.

* improve edge map

* fix minor bug

If the initial-explosion tile had an airtight entity on it, the tile was processed twice.

* some reviews (transform queries, eye.mapid, and tilesizes in overlays)

* Apply suggestions from code review

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* is map paused

* GetAllTiles ignores space by default

* WriteLine -> WriteError

* First -> FirstOrDefault()

* default prototype const string

* entity query

* misc review changes

* grid edge max distance

* fix fire texture defn

bad use of type serializer and ioc-resolves

* Remove ExplosionLaunched

And allow nukes to throw items towards the outer part of an explosion

* no hot-reload disclaimer

* replace prototype id string with int index

* optimise damage a tiiiiny bit.

* entity queries

* comments

* misc mirror comments

* cvars

* admin logs

* move intensity-per-state to prototype

* update tile event to ECS event

* git mv

* Tweak rpg & minibomb

also fix merge bug

* you don't exist anymore go away

* Fix build

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-03-31 21:39:26 -05:00

82 lines
2.4 KiB
C#

using Content.Client.Eui;
using Content.Shared.Administration;
using Content.Shared.Eui;
using JetBrains.Annotations;
using Robust.Client.Graphics;
using Robust.Shared.Map;
namespace Content.Client.Administration.UI.SpawnExplosion;
[UsedImplicitly]
public sealed class SpawnExplosionEui : BaseEui
{
[Dependency] private readonly IOverlayManager _overlayManager = default!;
private readonly SpawnExplosionWindow _window;
private ExplosionDebugOverlay? _debugOverlay;
public SpawnExplosionEui()
{
IoCManager.InjectDependencies(this);
_window = new SpawnExplosionWindow(this);
_window.OnClose += SendClosedMessage;
}
public override void Opened()
{
base.Opened();
_window.OpenCentered();
}
public override void Closed()
{
base.Closed();
_window.OnClose -= SendClosedMessage;
_window.Close();
ClearOverlay();
}
public void SendClosedMessage()
{
SendMessage(new SpawnExplosionEuiMsg.Close());
}
public void ClearOverlay()
{
if (_overlayManager.HasOverlay<ExplosionDebugOverlay>())
_overlayManager.RemoveOverlay<ExplosionDebugOverlay>();
_debugOverlay = null;
}
public void RequestPreviewData(MapCoordinates epicenter, string typeId, float totalIntensity, float intensitySlope, float maxIntensity)
{
var msg = new SpawnExplosionEuiMsg.PreviewRequest(epicenter, typeId, totalIntensity, intensitySlope, maxIntensity);
SendMessage(msg);
}
/// <summary>
/// Receive explosion preview data and add a client-side explosion preview overlay
/// </summary>
/// <param name="msg"></param>
public override void HandleMessage(EuiMessageBase msg)
{
if (msg is not SpawnExplosionEuiMsg.PreviewData data)
return;
if (_debugOverlay == null)
{
_debugOverlay = new();
_overlayManager.AddOverlay(_debugOverlay);
}
_debugOverlay.Tiles = data.Explosion.Tiles;
_debugOverlay.SpaceTiles = data.Explosion.SpaceTiles;
_debugOverlay.Intensity = data.Explosion.Intensity;
_debugOverlay.Slope = data.Slope;
_debugOverlay.TotalIntensity = data.TotalIntensity;
_debugOverlay.Map = data.Explosion.Epicenter.MapId;
_debugOverlay.SpaceMatrix = data.Explosion.SpaceMatrix;
_debugOverlay.SpaceTileSize = data.Explosion.SpaceTileSize;
}
}