Example #1
0
        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();
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }