Weapons/Components/WeaponComponent.cs
/// <summary>
/// Base weapon component. Attach alongside other weapon components on a weapon GameObject.
/// </summary>
[Title( "Weapon" ), Icon( "track_changes" )]
public abstract partial class WeaponComponent : Component
{
protected Weapon Weapon => Components.Get<Weapon>( FindMode.EverythingInSelfAndAncestors );
protected PlayerPawn Player => Weapon?.Player;
public bool IsActive { get; protected set; }
public TimeSince TimeSinceActivated { get; set; }
public virtual string Name => GetType().Name;
protected virtual bool EnableActivateEvents => true;
public T GetComponent<T>() where T : WeaponComponent
=> Components.Get<T>( FindMode.EverythingInSelfAndDescendants );
public void RunGameEvent( string eventName )
=> Player?.RunGameEvent( eventName );
protected virtual void OnStart( PlayerPawn player )
{
TimeSinceActivated = 10;
if ( EnableActivateEvents )
RunGameEvent( $"{Name}.start" );
}
protected virtual bool CanStart( PlayerPawn player ) => true;
public virtual void Simulate()
{
var player = Player;
var before = IsActive;
if ( !IsActive && CanStart( player ) )
{
OnStart( player );
IsActive = true;
}
else if ( before && !CanStart( player ) )
{
IsActive = false;
OnStop( player );
}
}
protected virtual void OnStop( PlayerPawn player )
{
if ( EnableActivateEvents )
RunGameEvent( $"{Name}.stop" );
}
protected virtual void OnDeactivate() { }
public virtual void FrameSimulate() { }
public virtual void OnGameEvent( string eventName ) { }
public virtual void BuildInput() { }
}