public void Attack(EnemiesAIStateController controller)
        {
            if (controller.m_EnemyController.currentPathTimer <= 0 && controller.m_EnemyController.agent.enabled)
            {
                controller.m_EnemyController.agent.destination = GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position;
                controller.m_EnemyController.currentPathTimer  = controller.enemyStats.pathCheckFrequenzy;
            }

            if (controller.m_EnemyController.agent.isOnOffMeshLink)
            {
                controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed;
            }
            else
            {
                controller.m_EnemyController.agent.speed = controller.enemyStats.runSpeed;
            }
            //---------------------------------------------------------------------------------------

            if (controller.enemyStats.enemyLevel == 3 && !controller.m_EnemyController.mine.isActive)
            {
                //drop bombs
                controller.m_EnemyController.mine.isActive = true;
            }
            // explosions timer
            controller.m_EnemyController.currentExplosionTimer -= Time.deltaTime;

            if (controller.m_EnemyController.currentExplosionTimer <= 0)
            {
                controller.m_EnemyController.canExplode = true;
            }
        }
Пример #2
0
 public void Move(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.agent.isOnOffMeshLink)
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed;
     }
     else
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.speed;
     }
     //---------------------------------------------------------------------------------------
     if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position)
     {
         controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position;
         controller.m_EnemyController.firstPatrolSet    = true;
         //Debug.Log(controller.m_EnemyController.agent.destination);
     }
     //---------------------------------------------------------------------------------------
     // check if has reached the next patrol point. I am using a normal distance check for this, don't need the remainingPath precision in this case
     if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position).sqrMagnitude
         <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance)
     {
         //Debug.Log("Next");
         controller.m_EnemyController.SetNextPatrolPoint();
     }
 }
Пример #3
0
 public void Sight(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.currentViewTimer <= 0)
     { // check distance between target and enemy without Vector2.Distance
         float rayDistance = (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position).sqrMagnitude;
         if (rayDistance <= (controller.enemyStats.chasingView * controller.enemyStats.chasingView) && GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.isAlive)
         {
             controller.m_EnemyController.numRayHitPlayer = 0;
             for (int y = 0; y < controller.m_EnemyController.raycastEyes.Length; y++)
             {
                 Debug.DrawLine(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position, Color.red);
                 if (Physics2D.LinecastNonAlloc(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.TargetForEnemies.position, controller.m_EnemyController.lineCastHits, controller.enemyStats.obstacleMask) <= 0)
                 {
                     controller.m_EnemyController.numRayHitPlayer++;
                 }
             }
             if (controller.m_EnemyController.numRayHitPlayer == 0)
             {
                 controller.m_EnemyController.playerSeen = false;
             }
         }
         else
         {
             controller.m_EnemyController.playerSeen = false;
         }
         controller.m_EnemyController.currentViewTimer = controller.enemyStats.viewCheckFrequenzy;
     }
 }
        public void MoveAnim(EnemiesAIStateController controller)
        {
            if (controller.m_EnemyController.agent.isOnOffMeshLink)
            {
                controller.m_EnemyController.enemyAnim.SetBool("Jump", true);
            }
            else
            {
                controller.m_EnemyController.enemyAnim.SetBool("Jump", false);
            }
            //---------------------------------------------------------------------------------------

            Vector3 move = controller.m_EnemyController.agent.velocity;

            if (move.magnitude > 1f)
            {
                move.Normalize();
            }
            move = controller.m_EnemyController.thisTransform.InverseTransformDirection(move);
            move = Vector3.ProjectOnPlane(move, Vector3.up);

            float m_ForwardAmount = move.z;

            m_ForwardAmount = Mathf.Clamp(Mathf.Abs(m_ForwardAmount), 0, 1f);

            controller.m_EnemyController.enemyAnim.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime);
        }
Пример #5
0
 public void Move(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.agent.isOnOffMeshLink) // on NavMesh Link change the speed to "jump"
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed;
     }
     else // if not on NavMesh Link return to normal speed
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.speed;
     }
     //---------------------------------------------------------------------------------------
     if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position)
     {
         controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position;
         controller.m_EnemyController.firstPatrolSet    = true;
         //Debug.Log(controller.m_EnemyController.agent.destination);
     }
     //---------------------------------------------------------------------------------------
     // check if has reached the next patrol point
     if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.agent.destination).sqrMagnitude
         <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance)
     {
         controller.m_EnemyController.SetNextPatrolPoint();
     }
 }
Пример #6
0
 public void Attack(EnemiesAIStateController controller)
 {
     if (controller.enemyStats.enemyLevel == 3 && !controller.m_EnemyController.swoopCoroutineInExecution && controller.m_EnemyController.playerSeen)
     {
         controller.m_EnemyController.startSwoopCR = true;
     }
 }
Пример #7
0
        public void Sight(EnemiesAIStateController controller)
        {
            if (controller.m_EnemyController.currentViewTimer <= 0)
            {
                // check distance between players and enemy without Vector2.Distance
                for (int i = 0; i < GMController.instance.playerInfo.Length; i++)
                {
                    controller.m_EnemyController.playerSeenDistance[i] = new TargetDistance(i, (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[i].PlayerController.TargetForEnemies.position).sqrMagnitude);
                }

                System.Array.Sort(controller.m_EnemyController.playerSeenDistance);

                // check if the target is in sight based on the distance (check first the closer one)
                for (int i = 0; i < controller.m_EnemyController.playerSeenDistance.Length; i++)
                {   // if the target is in range and is alive
                    if (controller.m_EnemyController.playerSeenDistance[i].distance <= (controller.enemyStats.attackView * controller.enemyStats.attackView) &&
                        GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.isAlive)
                    {
                        for (int y = 0; y < controller.m_EnemyController.raycastEyes.Length; y++)
                        {
                            Debug.DrawLine(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.TargetForEnemies.position, Color.red);
                            if (Physics2D.LinecastNonAlloc(controller.m_EnemyController.raycastEyes[y].position, GMController.instance.playerInfo[controller.m_EnemyController.playerSeenDistance[i].targetIndex].PlayerController.TargetForEnemies.position, controller.m_EnemyController.lineCastHits, controller.enemyStats.obstacleMask) <= 0)
                            {
                                controller.m_EnemyController.playerSeenIndex = controller.m_EnemyController.playerSeenDistance[i].targetIndex;
                                controller.m_EnemyController.playerSeen      = true;
                            }
                        }
                    }
                }
                controller.m_EnemyController.currentViewTimer = controller.enemyStats.viewCheckFrequenzy;
            }
        }
 public void Move(EnemiesAIStateController controller)
 {
     if (!controller.m_EnemyController.mine.isActive)// activate mines
     {
         //drop mines
         controller.m_EnemyController.mine.isActive = true;
     }
     //---------------------------------------------------------------------------------------
     if (controller.m_EnemyController.agent.isOnOffMeshLink)
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed;
     }
     else
     {
         controller.m_EnemyController.agent.speed = controller.enemyStats.speed;
     }
     //---------------------------------------------------------------------------------------
     if (!controller.m_EnemyController.firstPatrolSet && controller.m_EnemyController.agent.destination != controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position)
     {
         controller.m_EnemyController.agent.destination = controller.m_EnemyController.patrolPoints[controller.m_EnemyController.currentDestinationCount].position;
         controller.m_EnemyController.firstPatrolSet    = true;
     }
     //---------------------------------------------------------------------------------------
     // check if has reached the next patrol point
     if (controller.m_EnemyController.firstPatrolSet && (controller.m_EnemyController.thisTransform.position - controller.m_EnemyController.agent.destination).sqrMagnitude
         <= controller.m_EnemyController.agent.stoppingDistance * controller.m_EnemyController.agent.stoppingDistance)
     {
         //Debug.Log("Next");
         controller.m_EnemyController.SetNextPatrolPoint();
     }
 }
Пример #9
0
 public void Timer(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.currentBiteTimer > 0)
     {
         controller.m_EnemyController.currentBiteTimer -= Time.deltaTime;
     }
 }
Пример #10
0
 public void Life(EnemiesAIStateController controller)
 {
     //enemy die
     if (controller.m_EnemyController.currentLife <= 0 && !controller.m_EnemyController.startDieCoroutine)
     {
         controller.m_EnemyController.startDieCoroutine = true;
     }
 }
Пример #11
0
 public void Move(EnemiesAIStateController controller)
 {
     controller.m_EnemyController.agent.velocity = Vector3.zero;
     controller.m_EnemyController.agent.enabled  = false;
     controller.m_EnemyController.rb.velocity    = Vector2.zero;
     controller.m_EnemyController.rb.AddRelativeForce((controller.m_EnemyController.thisTransform.forward * controller.enemyStats.ninjaJumpLenght) + (Vector3.up * controller.enemyStats.ninjaJumpHeight), ForceMode2D.Impulse);
     controller.m_EnemyController.currentJumpTimer = controller.enemyStats.ninjaJumpCooldown;
 }
 public void Attack(EnemiesAIStateController controller)
 {
     controller.m_EnemyController.isAggroAnim = true;
     controller.m_EnemyController.enemyAnim.SetTrigger("Aggro");
     controller.m_EnemyController.agent.enabled = false;
     //controller.m_EnemyController.agent.isStopped = true;
     controller.m_EnemyController.agent.speed = 0;
 }
Пример #13
0
 public void Move(EnemiesAIStateController controller)
 {
     //controller.m_EnemyController.worldDeltaPosition = controller.m_EnemyController.agent.nextPosition - controller.m_EnemyController.playerMesh.position;
     ////Pull agent towards character
     //if (controller.m_EnemyController.worldDeltaPosition.magnitude > controller.m_EnemyController.agent.radius)
     //    controller.m_EnemyController.agent.nextPosition = controller.m_EnemyController.playerMesh.position + 0.9f * controller.m_EnemyController.worldDeltaPosition;
     controller.m_EnemyController.rb.velocity   = Vector2.zero;
     controller.m_EnemyController.agent.enabled = true;
 }
 public void MoveAnim(EnemiesAIStateController controller)
 {
     controller.m_EnemyController.agent.isStopped = true;
     if (controller.enemyStats.enemyLevel == 3)
     {
         controller.m_EnemyController.mine.MineGrapple();
     }
     controller.m_EnemyController.startDieCoroutine = true;
 }
Пример #15
0
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (!controller.m_EnemyController.onGround)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #16
0
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.currentLife <= 0)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #17
0
 public void Move(EnemiesAIStateController controller)
 {
     if (controller.enemyStats.enemyLevel >= 2)
     {
         controller.m_EnemyController.rb.velocity = new Vector2(controller.enemyStats.speed * controller.m_EnemyController.direction, controller.m_EnemyController.rb.velocity.y);
     }
     else
     {
         controller.m_EnemyController.rb.velocity = Vector2.zero;
     }
 }
Пример #18
0
        public void MoveCheck(EnemiesAIStateController controller)
        {
            RaycastHit2D groundCheck = Physics2D.Raycast(controller.m_EnemyController.checkPosition.position, Vector2.down, controller.enemyStats.groundRayDistance, controller.enemyStats.obstacleMask);

            Debug.DrawRay(controller.m_EnemyController.checkPosition.position, Vector2.down, Color.red);
            if (!groundCheck)
            {
                controller.m_EnemyController.direction *= -1;
                controller.m_EnemyController.RotateTowardDirection(controller.m_EnemyController.thisTransform, controller.m_EnemyController.direction);
            }
        }
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (GMController.instance.GetGameStatus() && GMController.instance.gameStart)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.playerSeen)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #21
0
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.currentJumpTimer <= 0 && controller.m_EnemyController.onGround && !controller.m_EnemyController.agent.isOnOffMeshLink)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #22
0
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (!controller.m_EnemyController.playerSeen || !GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].PlayerController.isAlive)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #23
0
 public override bool Decide(EnemiesAIStateController controller)
 {
     if (!controller.m_EnemyController.isAggroAnim)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #24
0
 public void Attack(EnemiesAIStateController controller)
 {
     if (controller.enemyStats.enemyLevel < 3 && controller.m_EnemyController.currentBulletTimer <= 0)
     {
         controller.m_EnemyController.bullet.EmitBullet(controller.m_EnemyController.attackSpawn, controller.m_EnemyController.thisMesh.forward);
         controller.m_EnemyController.currentBulletTimer = controller.enemyStats.bulletCooldown;
     }
     else if (controller.enemyStats.enemyLevel == 3 && controller.m_EnemyController.currentBulletTimer <= 0 && controller.m_EnemyController.isBarrageDone)
     {
         controller.m_EnemyController.canBarrageCR = true;
     }
 }
        public void Turn(EnemiesAIStateController controller)
        {
            Vector3 relativePoint = controller.m_EnemyController.thisTransform.InverseTransformPoint(GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position);

            if (relativePoint.x < 0.0)
            {
                controller.m_EnemyController.MeshLookAtPlayerDir(-1, 90);
            }
            else if (relativePoint.x > 0.0)
            {
                controller.m_EnemyController.MeshLookAtPlayerDir(1, 90);
            }
        }
Пример #26
0
 public void Sight(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.playerSeen && controller.m_EnemyController.currentBulletTimer <= 0)
     {
         controller.m_EnemyController.bullet.EmitBullet(controller.m_EnemyController.attackSpawn, controller.m_EnemyController.playerSeenIndex);
         controller.m_EnemyController.currentBulletTimer = controller.enemyStats.bulletCooldown;
         controller.m_EnemyController.playerSeen         = false;
     }
     else
     {
         controller.m_EnemyController.playerSeen = false;
     }
 }
Пример #27
0
 public void Move(EnemiesAIStateController controller)
 {
     //sinusoidal movement
     if (!controller.m_EnemyController.playerSeen)
     {
         if (controller.m_EnemyController.m_EnemyStats.enemyLevel == 1) // if lvl 1 moves in a straight line
         {
             controller.m_EnemyController.thisTransform.position += new Vector3(controller.enemyStats.speed * controller.m_EnemyController.direction * Time.deltaTime, 0, 0);
         }
         else if (controller.m_EnemyController.m_EnemyStats.enemyLevel >= 2)// if lvl 2 or more moves in a sine movement
         {
             controller.m_EnemyController.thisTransform.position += new Vector3(controller.enemyStats.speed * controller.m_EnemyController.direction * Time.deltaTime, Mathf.Sin(Time.time * controller.enemyStats.sinusoidalMovement) * Time.deltaTime * controller.enemyStats.sinusoidalMovement, 0);
         }
     }
 }
        public void MoveAnim(EnemiesAIStateController controller)
        {
            if (!controller.m_EnemyController.playerSeen)
            {
                if (controller.m_EnemyController.agent.isOnOffMeshLink)
                {
                    controller.m_EnemyController.enemyAnim.SetBool("Jump", true);
                }
                else
                {
                    controller.m_EnemyController.enemyAnim.SetBool("Jump", false);
                }
                //---------------------------------------------------------------------------------------

                Vector3 move = controller.m_EnemyController.agent.velocity;
                if (move.magnitude > 1f)
                {
                    move.Normalize();
                }
                move = controller.m_EnemyController.thisTransform.InverseTransformDirection(move);
                move = Vector3.ProjectOnPlane(move, Vector3.down);

                float m_ForwardAmount = move.z;
                m_ForwardAmount = Mathf.Clamp(m_ForwardAmount, 0, 0.5f);

                controller.m_EnemyController.enemyAnim.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime);
                //---------------------------------------------------------------------------------------

                //Vector3 worldDeltaPosition = controller.m_EnemyController.agent.nextPosition - controller.m_EnemyController.thisTransform.position;

                //// Map 'worldDeltaPosition' to local space
                //float dx = Vector3.Dot(controller.m_EnemyController.thisTransform.right, worldDeltaPosition);
                //float dz = Vector3.Dot(controller.m_EnemyController.thisTransform.forward, worldDeltaPosition);
                //Vector3 deltaPosition = new Vector3(dx, controller.m_EnemyController.thisTransform.position.y, dz);

                //// Low-pass filter the deltaMove
                //float smooth = Mathf.Min(1.0f, Time.deltaTime / 0.15f);
                //controller.m_EnemyController.smoothDeltaPosition = Vector3.Lerp(controller.m_EnemyController.smoothDeltaPosition, deltaPosition, smooth);

                //// Update velocity if time advances
                //if (Time.deltaTime > 1e-5f)
                //    controller.m_EnemyController.velocity = controller.m_EnemyController.smoothDeltaPosition / Time.deltaTime;

                //controller.m_EnemyController.enemyAnim.SetFloat("Forward", Mathf.Clamp((controller.m_EnemyController.velocity.magnitude), 0, 0.5f));
                //controller.m_EnemyController.agent.speed = (controller.m_EnemyController.enemyAnim.deltaPosition / Time.deltaTime).magnitude;
            }
        }
Пример #29
0
        public void Attack(EnemiesAIStateController controller)
        {
            // set the player as destination---------------------------------------------------------
            if (controller.m_EnemyController.currentPathTimer <= 0 && controller.enemyStats.enemyLevel <= 2)
            {
                controller.m_EnemyController.agent.destination = GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position;
                controller.m_EnemyController.currentPathTimer  = controller.enemyStats.pathCheckFrequenzy;
            }
            //change agent speed if is on NavLink----------------------------------------------------
            if (controller.m_EnemyController.agent.isOnOffMeshLink)
            {
                controller.m_EnemyController.agent.speed = controller.enemyStats.jumpSpeed;
            }
            // USING REMAINING DISTANCE
            else if (!controller.m_EnemyController.agent.isOnOffMeshLink && controller.m_EnemyController.agent.remainingDistance > controller.m_EnemyController.agent.stoppingDistance)
            {
                controller.m_EnemyController.agent.speed = controller.enemyStats.runSpeed;
            }
            else // if the agent is closer than the stopping distance then stops itself
            {
                controller.m_EnemyController.agent.velocity = Vector3.zero;
                controller.m_EnemyController.lookAtPlayer   = new Vector3(GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position.x, controller.m_EnemyController.thisTransform.position.y, 0);
                controller.m_EnemyController.thisTransform.LookAt(controller.m_EnemyController.lookAtPlayer);
            }
            //---------------------------------------------------------------------------------------
            // if the player is in reach the agent will attack
            float biteDistance = (controller.m_EnemyController.thisTransform.position - GMController.instance.playerInfo[controller.m_EnemyController.playerSeenIndex].Player.transform.position).sqrMagnitude;

            if (biteDistance <= (controller.enemyStats.triggerBiteDistance * controller.enemyStats.triggerBiteDistance) && controller.m_EnemyController.currentBiteTimer <= 0)
            {
                controller.m_EnemyController.enemyAnim.SetTrigger("Bite");
                Collider2D hit = Physics2D.OverlapCircle(controller.m_EnemyController.attackSpawn.position, controller.enemyStats.biteRadius, controller.enemyStats.hitMask);
                if (hit != null)
                {
                    controller.m_EnemyController.DamagePlayer(hit);
                }
                controller.m_EnemyController.currentBiteTimer = controller.enemyStats.biteCooldown;
            }
        }
Пример #30
0
 public void Life(EnemiesAIStateController controller)
 {
     if (controller.m_EnemyController.agent.enabled)
     {
         controller.m_EnemyController.agent.isStopped = true;
     }
     //enemy die
     // if the timer is up and die from explosion don't give points to players
     if (controller.m_EnemyController.canExplode)
     {
         controller.m_EnemyController.enemyOwnership = -1;
     }
     // if timer is up or is lv 2+ trigger the explosion
     if (controller.m_EnemyController.canExplode || controller.enemyStats.enemyLevel >= 2)
     {
         controller.m_EnemyController.enemyAnim.SetTrigger("Explosion");
     }
     // if is lv 1 and died from being hit then gives the points to players and die
     else
     {
         controller.m_EnemyController.enemyAnim.SetTrigger("Death");
     }
 }