示例#1
0
 public HasChainReturnedNode(AI reference) : base(reference)
 {
     m_EriAI = reference as EreshkigalAI;
 }
        public override BehaviourState UpdateNodeBehaviour()
        {
            for (int i = 0; i < m_AIReference.PlayerList.Count; i++)
            {
                //skip any players we've already hit and players that are dead or downed
                if (m_AIReference.PlayerList[i].Health.IsDead || m_AIReference.PlayerList[i].IsDowned)
                {
                    if (m_PlayersHit[m_AIReference.PlayerList[i].PlayerNumber] == true)
                    {
                        continue;
                    }
                    else
                    {
                        m_PlayersHit[m_AIReference.PlayerList[i].PlayerNumber] = true;
                    }
                }

                Vector3 playerPosition = m_AIReference.PlayerList[i].transform.position;
                Vector3 chainPosition  = m_ChainLineRenderer.LineRenderer.GetPosition(m_PointIndexes[i]);

                Vector3 displacement = m_AIReference.PlayerList[i].transform.position - chainPosition;
                Vector3 dir          = displacement.normalized;
                //float distance = displacement.magnitude;

                //m_ChainSpeeds[i] = distance / m_TravelTime;

                chainPosition += dir * m_ChainSpeeds[i] * Time.deltaTime;
                m_ChainLineRenderer.LineRenderer.SetPosition(m_PointIndexes[i], chainPosition);

                Collider[] colliders = Physics.OverlapSphere(chainPosition, 3.0f, m_AIReference.TargetLayerMask);

                foreach (Collider collider in colliders)
                {
                    if (collider.gameObject == m_AIReference.PlayerList[i].gameObject)
                    {
                        m_ChainLineRenderer.LineRenderer.SetPosition(m_PointIndexes[i], m_AIReference.PlayerList[i].transform.position);
                        m_AIReference.PlayerList[i].SetVelocity(Vector3.zero);
                        m_AIReference.PlayerList[i].SetUseGravity(false);
                        m_AIReference.PlayerList[i].photonView.RPC("SetIsImmobile", PhotonTargets.All, true);
                        m_PlayersHit[m_AIReference.PlayerList[i].PlayerNumber] = true;
                    }
                }
            }

            float playersHit = 0;

            foreach (KeyValuePair <int, bool> player in m_PlayersHit)
            {
                if (player.Value)
                {
                    playersHit++;
                }
            }

            if (playersHit == m_PlayersHit.Count)
            {
                EreshkigalAI e = m_AIReference as EreshkigalAI;
                e.photonView.RPC("ActivateChainPull", PhotonTargets.All);
                m_ChainLineRenderer.SetLineRendererEnabled(false);
                return(BehaviourState.Succeed);
            }

            return(BehaviourState.Running);
        }