public override void OnEnter() { int closestIndex = FindCutoffNode(); Node[] thePath = AStar.getPath(path[closestIndex], AStar.findNearestNode(theTransform.position)); if (thePath != null) { int reverseLength = closestIndex - 2; if (reverseLength <= 0) { reverseLength = closestIndex + 1; } Node[] reversedPath = new Node[reverseLength]; Array.Copy(path, 2, reversedPath, 0, reversedPath.Length); Array.Reverse(reversedPath); movementPath = new Node[reversedPath.Length + thePath.Length]; Array.Copy(thePath, movementPath, thePath.Length); Array.Copy(reversedPath, 0, movementPath, thePath.Length, reversedPath.Length); } else { movementPath = AStar.getPath(teamFlag, AStar.findNearestNode(theTransform.position)); } currentIndex = 0; Reached = false; sprint.startSprinting(); }
public override void OnExecute(float dt) { if (reached) { return; } timePassed += Time.deltaTime; bool seeEnemy = canSeeEnemy(); if (seeEnemy && timePassed >= 2.5f) { timePassed = 0.0f; Node[] generatedPath = AStar.avoidPositionPath(destination, AStar.findFurthestTargetNearNode(theTransform.position, enemyTransform.position), enemyTransform.position); if (generatedPath != null) { path = generatedPath; } currentIndex = 0; sprinter.startSprinting(); } Vector3 toDestination = path[currentIndex].theTransform.position - theTransform.position; toDestination.y = 0.0f; Vector3 movement = toDestination.normalized * sprinter.currentSpeed * dt; if (movement.magnitude > toDestination.magnitude) { movement = toDestination; } theTransform.position += movement; Vector3 firstPosition = theTransform.position; Vector3 secondPosition = path[currentIndex].theTransform.position; firstPosition.y = 0.0f; secondPosition.y = 0.0f; if (firstPosition == secondPosition) { ++currentIndex; reached = currentIndex == path.Length; } //sawEnemy = seeEnemy; }
public override void OnExecute(float dt) { bool seeEnemy = canSeeEnemy(); if (!sawEnemy && seeEnemy) { Node[] thePath = AStar.getPath(AStar.findNearestNode(theEnemy.position), AStar.findNearestTargetNode(theTransform.position, theEnemy.position)); currentIndex = 0; path = thePath; Reached = false; sprinter.startSprinting(); } if (Reached) { return; } Vector3 toDestination = path[currentIndex].theTransform.position - theTransform.position; toDestination.y = 0.0f; Vector3 movement = toDestination.normalized * sprinter.currentSpeed * dt; if (movement.magnitude > toDestination.magnitude) { movement = toDestination; } theTransform.position += movement; Vector3 firstPosition = theTransform.position; Vector3 secondPosition = path[currentIndex].theTransform.position; firstPosition.y = 0.0f; secondPosition.y = 0.0f; if (firstPosition == secondPosition) { ++currentIndex; Reached = currentIndex == path.Length; } sawEnemy = seeEnemy; }