You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.6 KiB
C#
85 lines
1.6 KiB
C#
using Fusion;
|
|
using UnityEngine;
|
|
|
|
namespace Projectiles
|
|
{
|
|
/// <summary>
|
|
/// Component representing joined player. Each player can have a visual representation in the gameplay - player agent.
|
|
/// </summary>
|
|
public class Player : ContextBehaviour
|
|
{
|
|
// PUBLIC MEMBERS
|
|
|
|
[Networked]
|
|
public PlayerAgent ActiveAgent { get; private set; }
|
|
public PlayerAgent AgentPrefab => _agentPrefab;
|
|
|
|
// PRIVATE MEMBERS
|
|
|
|
[SerializeField]
|
|
private PlayerAgent _agentPrefab;
|
|
|
|
private PlayerAgent _assignedAgent;
|
|
private int _lastWeaponSlot;
|
|
|
|
// PUBLIC METHODS
|
|
|
|
public void AssignAgent(PlayerAgent agent)
|
|
{
|
|
ActiveAgent = agent;
|
|
ActiveAgent.Owner = this;
|
|
|
|
if (HasStateAuthority == true && _lastWeaponSlot != 0)
|
|
{
|
|
agent.Weapons.SwitchWeapon(_lastWeaponSlot, true);
|
|
}
|
|
}
|
|
|
|
public void ClearAgent()
|
|
{
|
|
if (ActiveAgent == null)
|
|
return;
|
|
|
|
ActiveAgent.Owner = null;
|
|
ActiveAgent = null;
|
|
}
|
|
|
|
// NetworkBehaviour INTERFACE
|
|
|
|
public override void Spawned()
|
|
{
|
|
if (Context.Gameplay != null)
|
|
{
|
|
Context.Gameplay.Join(this);
|
|
}
|
|
}
|
|
|
|
public override void FixedUpdateNetwork()
|
|
{
|
|
bool agentValid = ActiveAgent != null && ActiveAgent.Object != null;
|
|
if (agentValid == true && HasStateAuthority == true)
|
|
{
|
|
_lastWeaponSlot = ActiveAgent.Weapons.CurrentWeaponSlot;
|
|
}
|
|
}
|
|
|
|
public override void Despawned(NetworkRunner runner, bool hasState)
|
|
{
|
|
if (hasState == false)
|
|
return;
|
|
|
|
if (Context.Gameplay != null)
|
|
{
|
|
Context.Gameplay.Leave(this);
|
|
}
|
|
|
|
if (HasStateAuthority == true && ActiveAgent != null)
|
|
{
|
|
Runner.Despawn(ActiveAgent.Object);
|
|
}
|
|
|
|
ActiveAgent = null;
|
|
}
|
|
}
|
|
}
|