51 lines
1.4 KiB
C#
51 lines
1.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace AI.FSM
|
|
{
|
|
public class IdleState : IState
|
|
{
|
|
private GameObject _owner;
|
|
private Transform _player;
|
|
private float _viewAngle;
|
|
|
|
public IdleState(GameObject owner, Transform player, float viewAngle)
|
|
{
|
|
_owner = owner;
|
|
_player = player;
|
|
_viewAngle = viewAngle;
|
|
}
|
|
|
|
public void Enter(IFiniteStateMachine fsm)
|
|
{
|
|
Debug.Log("IdleState Enter");
|
|
}
|
|
|
|
public void Update(IFiniteStateMachine fsm)
|
|
{
|
|
Debug.Log("IdleState Update");
|
|
|
|
// view angle
|
|
float angle = Vector3.Angle(_owner.transform.forward, _player.position - _owner.transform.position);
|
|
if (angle > _viewAngle) return;
|
|
|
|
// raycast
|
|
RaycastHit hit;
|
|
if (!Physics.Raycast(_owner.transform.position, _player.position - _owner.transform.position, out hit,
|
|
100f))
|
|
{
|
|
return;
|
|
}
|
|
|
|
PlayerController playerController = hit.collider.GetComponent<PlayerController>();
|
|
if (!playerController) return;
|
|
|
|
fsm.SetState(new PlayerDetectedState(_owner, _player, 10.0f));
|
|
}
|
|
|
|
public void Exit(IFiniteStateMachine fsm)
|
|
{
|
|
Debug.Log("IdleState Exit");
|
|
}
|
|
}
|
|
} |