Beispiel #1
0
 public BaseState GetCurrentState()
 {
     return(mImpl.GetCurrentState(this));
 }
    private bool FireRaycasts(IStateMachine stateMachine)
    {
        var agentEyes  = stateMachine.GetAgent().GetEyes();
        var agentStats = stateMachine.GetAgent().GetStats();

        for (var i = 0; i < 5; i++)
        {
            RaycastHit hit;
            Vector3    rayDirection;

            switch (i)
            {
            case 0:
                rayDirection = agentEyes.transform.forward - agentEyes.right;
                break;

            case 1:
                rayDirection = (agentEyes.transform.forward - agentEyes.right / 2);
                break;

            case 2:
                rayDirection = agentEyes.transform.forward;
                break;

            case 3:
                rayDirection = (agentEyes.transform.forward + agentEyes.right / 2);
                break;

            case 4:
                rayDirection = agentEyes.transform.forward + agentEyes.right;
                break;

            default:
                rayDirection = new Vector3();
                break;
            }

            Debug.DrawRay(agentEyes.transform.position, rayDirection * agentStats.ViewDistance, stateMachine.GetCurrentState().GetCurrentStateColor());
            var layerMask = 1 << 10;

            // invert bitmask to collide with all layers except 10
            layerMask = ~layerMask;

            if (Physics.Raycast(agentEyes.transform.position, rayDirection, out hit, agentStats.ViewDistance, layerMask) &&
                hit.collider.CompareTag("agent"))
            {
                stateMachine.GetAgent().Target = hit.transform;
                return(true);
            }
        }

        return(false);
    }