Exemplo n.º 1
0
    //-------------------
    //State update, perform any actions for the given state
    //
    //Return bool: Has this state been completed, e.g. Attack has completed, idle would always return true
    //-------------------
    public override bool UpdateState()
    {
        if (!TargetInRange() || !m_targetPlayer.IsAlive()) //Early break out when target is no onger in range, or dead
        {
            return(true);
        }

        Vector3 targetDir = m_targetPlayer.transform.position - transform.position;

        targetDir.y = 0;

        //Rotate towards target
        transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(targetDir), m_rotationSpeed * Time.fixedDeltaTime);

        //Move forwards
        if (MOARMaths.SqrDistance(m_targetPlayer.gameObject, gameObject) > m_attackRangeSqr)
        {
            m_NPC.m_customPhysics.m_velocity.z = m_forwardSpeed;
        }
        else // Close enough to attack
        {
            //
        }
        return(false);
    }
Exemplo n.º 2
0
    private bool TargetInRange()
    {
        if (m_targetPlayer != null)
        {
            if (MOARMaths.SqrDistance(gameObject, m_targetPlayer.gameObject) < m_detectionRangeSqr)
            {
                return(true); //Early breakout
            }
            m_targetPlayer = null;
        }

        //See if any close target
        foreach (Player player in m_possibleTargets)
        {
            if (MOARMaths.SqrDistance(gameObject, player.gameObject) < m_detectionRangeSqr)
            {
                m_targetPlayer = player;
                return(true); //Early breakout
            }
        }

        return(false);
    }