Player/Player.Spray.cs
public sealed partial class Player
{
[Property] float SprayTime { get; set; } = 5;
TimeUntil _timeUntilSprayAllowed { get; set; }
void ControlSpray()
{
if ( !Input.Pressed( "Spray" ) )
return;
if ( _timeUntilSprayAllowed > 0 ) return;
var tr = Scene.Trace.Ray( EyeTransform.Position, EyeTransform.Position + EyeTransform.Forward * 200 )
.IgnoreGameObject( GameObject )
.WithoutTags( "player" )
.Run();
if ( !tr.Hit ) return;
_timeUntilSprayAllowed = SprayTime;
Spray();
}
[Rpc.Host( NetFlags.OwnerOnly )]
private void Spray()
{
var sprayPrefab = GameObject.GetPrefab( "items/spray/player_spray.prefab" );
var tr = Scene.Trace.Ray( EyeTransform.Position, EyeTransform.Position + EyeTransform.Forward * 200 )
.IgnoreGameObject( GameObject )
.WithoutTags( "player" )
.Run();
if ( !tr.Hit ) return;
var sprays = Scene.GetAllComponents<Spray>().Where( x => x.Network.Owner == Network.Owner );
foreach ( var spray in sprays )
{
spray.GameObject.Destroy();
}
if ( sprayPrefab.IsValid() )
{
var _spray = sprayPrefab.Clone( tr.HitPosition + tr.Normal * 1, Rotation.LookAt( -tr.Normal ) );
_spray.NetworkSpawn( Rpc.Caller );
}
}
}