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); }