66 lines
1.8 KiB
C#
66 lines
1.8 KiB
C#
|
using UnityEngine;
|
|||
|
|
|||
|
namespace NeoFPS
|
|||
|
{
|
|||
|
[RequireComponent(typeof(ICharacter))]
|
|||
|
public abstract class CharacterInputBase : FpsInput
|
|||
|
{
|
|||
|
protected ICharacter m_Character = null;
|
|||
|
|
|||
|
private bool m_IsPlayer = false;
|
|||
|
private bool m_IsAlive = false;
|
|||
|
|
|||
|
public override FpsInputContext inputContext
|
|||
|
{
|
|||
|
get { return FpsInputContext.Character; }
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnAwake()
|
|||
|
{
|
|||
|
m_Character = GetComponent<ICharacter>();
|
|||
|
if (m_Character == null)
|
|||
|
{
|
|||
|
Debug.LogError("Input requires a character component.", gameObject);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
m_Character.onControllerChanged += OnControllerChanged;
|
|||
|
m_Character.onIsAliveChanged += OnIsAliveChanged;
|
|||
|
}
|
|||
|
|
|||
|
protected override void OnEnable()
|
|||
|
{
|
|||
|
m_IsPlayer = m_Character.controller != null && m_Character.controller.isPlayer;
|
|||
|
m_IsAlive = m_Character.isAlive;
|
|||
|
if (m_IsPlayer && m_IsAlive)
|
|||
|
PushContext();
|
|||
|
else
|
|||
|
PopContext();
|
|||
|
}
|
|||
|
|
|||
|
protected virtual void OnDestroy()
|
|||
|
{
|
|||
|
m_Character.onControllerChanged -= OnControllerChanged;
|
|||
|
m_Character.onIsAliveChanged -= OnIsAliveChanged;
|
|||
|
}
|
|||
|
|
|||
|
void OnControllerChanged(ICharacter character, IController controller)
|
|||
|
{
|
|||
|
m_IsPlayer = (controller != null && controller.isPlayer);
|
|||
|
if (m_IsPlayer && m_IsAlive)
|
|||
|
PushContext();
|
|||
|
else
|
|||
|
PopContext();
|
|||
|
}
|
|||
|
|
|||
|
void OnIsAliveChanged(ICharacter character, bool alive)
|
|||
|
{
|
|||
|
m_IsAlive = alive;
|
|||
|
if (m_IsPlayer && m_IsAlive)
|
|||
|
PushContext();
|
|||
|
else
|
|||
|
PopContext();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|