Weapons/ToolGun/Modes/Mass.cs
[Icon( "🍔" )]
[ClassName( "mass" )]
[Group( "Tools" )]
public class Mass : ToolMode
{
[Sync, Property, Title( "Mass (kg)" ), Range( 1, 250 ), Step( 0.5f )]
public float Value { get; set; } = 100.0f;
public override string Description => "#tool.hint.mass.description";
public override string PrimaryAction => "#tool.hint.mass.set";
public override string SecondaryAction => "#tool.hint.mass.copy";
public override string ReloadAction => "#tool.hint.mass.reset";
public override void OnControl()
{
var select = TraceSelect();
if ( !select.IsValid() ) return;
var rb = select.GameObject.GetComponent<Rigidbody>();
if ( !rb.IsValid() ) return;
if ( Input.Pressed( "attack1" ) ) SetMass( rb, Value );
else if ( Input.Pressed( "attack2" ) ) CopyMass( rb );
else if ( Input.Pressed( "reload" ) ) SetMass( rb, 0.0f );
else return;
ShootEffects( select );
}
[Rpc.Host]
private void SetMass( Rigidbody rb, float mass )
{
if ( !rb.IsValid() || rb.IsProxy ) return;
if ( mass <= 0f )
{
rb.GetComponent<PhysicalProperties>()?.Destroy();
rb.MassOverride = 0f;
return;
}
var mo = rb.GetOrAddComponent<PhysicalProperties>();
mo.Mass = mass;
mo.Apply();
}
[Rpc.Host]
private void CopyMass( Rigidbody rb )
{
if ( !rb.IsValid() || rb.IsProxy ) return;
var mo = rb.GetComponent<PhysicalProperties>();
Value = mo.IsValid() ? mo.Mass : rb.Mass;
}
}