void Roam() { flying = false; LookAtSlowly (targetNode.worldPos); transform.Translate(Vector3.forward * (Time.deltaTime + 0.2f)); atTarget = false; if(Vector3.Distance(transform.position,targetNode.worldPos) < minRange) { atTarget = true; currentNode = targetNode; roaming = false; Next(currentNode.connectedNodes[Random.Range(0, (currentNode.GetConnectionCount()))]); StartCoroutine(WaitAtFlower()); } }
void Update() { //put this in update function (not in start) to avoid ArgumentOutOfRange(Index)Error if(_world.nodes.Count > 0 && startup) { currentNode = _world.nodes[Random.Range(0,_world.nodes.Count -1)]; Next(currentNode.connectedNodes[Random.Range(0, (currentNode.GetConnectionCount()))]); roaming = true; startup = false; } if(roaming) Roam(); if (flying) { if(FlyTrigger2.activeSelf) { Fly(FlyTrigger2); playerObj.transform.position = playerSeat.transform.position; } if(!FlyTrigger2.activeSelf) { Fly(FlyTrigger); playerObj.transform.position = playerSeat.transform.position; } } //if (landing) // Land (); if (waitingForPlayer) { roaming = false; if(Input.GetKey("e")) { StartCoroutine(WaitForPlayer()); waitingForPlayer = false; } } }
private void CalculateClosestNodes() { float distanceSqrToClosestNode = (m_closestNode.transform.position - transform.position).sqrMagnitude; int connectionCount = m_closestNode.GetConnectionCount(); float closestDistanceSqr = distanceSqrToClosestNode; int closestIndex = -1; Node closestNode = null; for (int i = 0; i < connectionCount; i++) { Connection connection = m_closestNode.GetConnection(i); if(!Connection.IsValid(connection)) continue; Node node = connection.TargetNode; var sqrDistance = (transform.position - node.transform.position).sqrMagnitude; if (sqrDistance < closestDistanceSqr) { closestIndex = i; closestDistanceSqr = sqrDistance; closestNode = node; } } //Find the new closest node if we have one if (closestIndex != -1) m_closestNode = closestNode; //check to see if we are at the closest node float distanceToClosest = (m_closestNode.transform.position - transform.position).magnitude; m_atNode = distanceToClosest < m_atNodeDistance ? m_closestNode : null; if (m_atNode == null) { Vector2 vectorFromNode = transform.position - m_closestNode.transform.position; Direction directionFromNode = DirectionHelper.VectorToDirection(vectorFromNode); Direction oppositeDirection = DirectionHelper.OppositeDirection(directionFromNode); for (int i = 0; i < m_closestNodes.Length; i++) { m_closestNodes[i] = null; } m_closestNodes[(int) oppositeDirection] = m_closestNode; Connection otherDirectionConnection = m_closestNode.GetConnection(directionFromNode); if (Connection.IsValid(otherDirectionConnection)) m_closestNodes[(int) directionFromNode] = otherDirectionConnection.TargetNode; } else { connectionCount = m_atNode.GetConnectionCount(); for (int i = 0; i < connectionCount; i++) { Connection connection = m_atNode.GetConnection(i); m_closestNodes[i] = Connection.IsValid(connection) ? connection.TargetNode : null; } } }