Explosions and Grenades, Triggers, OnDestroy, OnExAct, Fueltanks and destructible tables (#247)
* initial explosiveComponent * remove garbagee * assets * tile mass deletion baby * grenades * tweaks * Update Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs Co-Authored-By: Pieter-Jan Briers <pieterjan.briers@gmail.com> * Ex_act based on damage, fixes and tweaks * One finishing touch Done the most cringe way * ex_act explosions, tables are destructible now also adds fuel tanks * adds ex_act to mobs
This commit is contained in:
committed by
Pieter-Jan Briers
parent
f1aeaaa640
commit
10801af2f7
53
Content.Server/GameObjects/EntitySystems/TriggerSystem.cs
Normal file
53
Content.Server/GameObjects/EntitySystems/TriggerSystem.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.GameObjects.Systems;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Timers;
|
||||
|
||||
namespace Content.Server.GameObjects.EntitySystems
|
||||
{
|
||||
/// <summary>
|
||||
/// This interface gives components behavior when being "triggered" by timer or other conditions
|
||||
/// </summary>
|
||||
public interface ITimerTrigger
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when one object is triggering some event
|
||||
/// </summary>
|
||||
bool Trigger(TimerTriggerEventArgs eventArgs);
|
||||
}
|
||||
|
||||
public class TimerTriggerEventArgs : EventArgs
|
||||
{
|
||||
public IEntity User { get; set; }
|
||||
public IEntity Source { get; set; }
|
||||
}
|
||||
|
||||
[UsedImplicitly]
|
||||
public sealed class TriggerSystem : EntitySystem
|
||||
{
|
||||
public void HandleTimerTrigger(TimeSpan delay, IEntity user, IEntity trigger)
|
||||
{
|
||||
|
||||
Timer.Spawn(delay, () =>
|
||||
{
|
||||
var timerTriggerEventArgs = new TimerTriggerEventArgs
|
||||
{
|
||||
User = user,
|
||||
Source = trigger
|
||||
};
|
||||
var timerTriggers = trigger.GetAllComponents<ITimerTrigger>().ToList();
|
||||
|
||||
foreach (var timerTrigger in timerTriggers)
|
||||
{
|
||||
if (timerTrigger.Trigger(timerTriggerEventArgs))
|
||||
{
|
||||
// If an IOnTimerTrigger returns a status completion we finish our trigger
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user