// IWeapon
    public void Action(GameObject objectFiring, Vector3 argsStartPosition, Vector3 argsDirection)
    {
        if (m_Projectiles.Length == 0)
        {
            Singleton_Sound.m_instance.PlayAudioClipOneShot("Throw", 0.3f);

            Vector3 shotDirection = new Vector3((argsDirection.x + shotDirectionAddition.x) * singleShotModification.x, (argsDirection.y + shotDirectionAddition.y) * singleShotModification.y, (argsDirection.z + shotDirectionAddition.z) * singleShotModification.z);

            shotDirection.Normalize();

            m_FireProjectile.Fire(argsStartPosition, shotDirection, transform.rotation);
        }
        else
        {
            foreach (ProjectilesToFire p in m_Projectiles)
            {
                Singleton_Sound.m_instance.PlayAudioClipOneShot("Throw", 0.3f);

                Vector3 shotDirection = new Vector3((argsDirection.x + p.shootingDirectionAddition.x) * p.shootingDirectionModification.x, (argsDirection.y + p.shootingDirectionAddition.y) * p.shootingDirectionModification.y, (argsDirection.z + p.shootingDirectionAddition.z) * p.shootingDirectionModification.z);
                //Vector3 shotDirection = Vector3.one;
                Quaternion rotation;
                if (shotDirection.x > 0)
                {
                    rotation = Quaternion.Euler(p.rotation.x, p.rotation.y, p.rotation.z);
                }
                else
                {
                    rotation = Quaternion.Euler(p.rotation.x, p.rotation.y, -p.rotation.z);
                }
                shotDirection.Normalize();

                m_FireProjectile.Fire(argsStartPosition, shotDirection, rotation);
            }
        }
    }
        protected virtual void ExecuteSpecificWeapon(FireProjectile shooter)
        {
            // Check if the shooter exist
            if (shooter == null || shooter.firing)
            {
                return;
            }

            // Single shoot mode
            switch (shooter.fireMode)
            {
            case FireProjectile.FiringMode.Single:
                // Fire the main weapon and send the current ship's velocity as momentum
                shooter.Fire(bulletSpeed, currentVelocity * WeaponMomentum);
                break;

            case FireProjectile.FiringMode.Continuous:
                // Shoot as long as burst beam duration allows it
                shooter.Fire(bulletSpeed, currentVelocity * WeaponMomentum);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
    // Update is called once per frame
    void Update()
    {
        #region Rotate towards Target
        if (target != null)
        {
            if (visionRange.CanViewTarget(target))
            {
                targetSighted   = true;
                searchAttempted = false;

                //Stop what your doing and shoot someone
                if (basicPatrol != null && basicPatrol.patrolModeEnabled)
                {
                    basicPatrol.patrolModeEnabled = false;
                }
                if (basicSearch != null && basicSearch.searchEnabled)
                {
                    basicSearch.searchEnabled = false;
                }
                if (navMeshAgent.isActiveAndEnabled)
                {
                    navMeshAgent.enabled = false;
                    if (alertSource != null)
                    {
                        alertSource.Play();
                    }
                }

                lookRotation.transform.rotation = lookRotation.GetRotationTowardsTarget(target.transform.position);

                #region Fire Primary Weapon
                if (fireProjectileCooldown.IsOffCooldown() && facing.IsFacingDirectlyAtTarget(target))
                {
                    fireProjectile.Fire(projectileOriginTransform, target.transform.position);
                    fireProjectileCooldown.OnActionActivated();
                }
                #endregion
            }
            //Start searching
            else if (!visionRange.CanViewTarget(target) && targetSighted && !searchAttempted && !basicSearch.searchEnabled)
            {
                navMeshAgent.enabled = true;
                basicSearch.StartSearch(target.transform);
                searchAttempted = true;
                targetSighted   = false;
            }
            //Go back to patroling
            else if (!visionRange.CanViewTarget(target) && !basicSearch.searchEnabled && basicPatrol != null && !basicPatrol.patrolModeEnabled)
            {
                if (basicPatrol != null)
                {
                    basicPatrol.patrolModeEnabled = true;
                    navMeshAgent.enabled          = true;
                    basicPatrol.NavigateToNextWayPoint();
                }
            }
        }
        #endregion
    }
Exemple #4
0
    public void activateTrap()
    {
        if (canSpawnPart)
        {
            Singleton_Sound.m_instance.PlayAudioClipOneShot("DartFire", 0.2f);

            fProjectile.Fire(transform.position, transform.up, transform.rotation);
            canSpawnPart = false;
            StartCoroutine(delayDartSpawn(shootDelay));
        }
    }
Exemple #5
0
        virtual protected void ExecuteSpecificWeapon(FireProjectile shooter)
        {
            // Check if the shooter exist
            if (shooter == null || shooter.firing)
            {
                return;
            }

            // Single shoot mode
            if (shooter.fireMode == FireProjectile.FiringMode.Single)
            {
                // Fire the main weapon and send the current ship's velocity as momentum
                shooter.Fire(bulletSpeed, currentVelocity * WeaponMomentum);
            }
            // Continuous shoot mode
            else if (shooter.fireMode == FireProjectile.FiringMode.Continuous)
            {
                // Shoot as long as burst beam duration allows it
                shooter.Fire(bulletSpeed, currentVelocity * WeaponMomentum);
            }
        }
Exemple #6
0
    void Release(float heldTime)
    {
        float percentCharge = heldTime / fullChargeTime;


        if (percentCharge >= 1.0f)
        {
            //Fully charged so use special prefab.
            _projectileLauncher.projectilePrefab = fullyChargedFireBall;
        }
        else
        {
            _projectileLauncher.projectilePrefab = normalFireBall;
        }

        //Clamp strength to max charge strength.
        float strength = Mathf.Clamp(percentCharge * fullChargeStrength, 1, fullChargeStrength);


        _projectileLauncher.Fire(strength);
        //Camera.main.SendMessageUpwards ("ShakeWithIntensity", 1.0f);
    }
Exemple #7
0
    // Update is called once per frame
    void Update()
    {
        if (FindPlayer)
        {
            PlayerX   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyY    = Enemy.gameObject.transform.position.y;
            EnemyX    = Enemy.gameObject.transform.position.x;
            Distance  = EnemyX - PlayerX;
            Distance2 = EnemyX - PlayerX2;

            if (Distance < 0)
            {
                Distance = -Distance;
            }
            if (Distance2 < 0)
            {
                Distance2 = -Distance2;
            }

            if (Distance < Distance2)
            {
                DistanceY     = EnemyY - PlayerY;
                DistanceX     = EnemyX - PlayerX;
                ClosestPlayer = 1;
            }

            if (Distance2 < Distance)
            {
                DistanceY     = EnemyY - PlayerY2;
                DistanceX     = EnemyX - PlayerX2;
                ClosestPlayer = 2;
            }

            FindPlayer = false;
        }

        if (!Angered)
        {
            FindPlayer = true;
            if (PlayerX + 5 > EnemyX && PlayerX - 5 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }

            if (PlayerX2 + 5 > EnemyX && PlayerX2 - 5 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }
        }

        if (Time.time > RNGtimer)
        {
            RNG        = Random.Range(2, 100);
            RNGtimer  += 3;
            FindPlayer = true;
        }

        if (!Swoop && !AntiSwoopLeft && !AntiSwoopRight && !Shoot)
        {
            if (RNG > 30)
            {
                Swoop = true;
            }
            if (RNG > 0 && RNG <= 30)
            {
                Shoot = true;
            }

            RNG = 0;
        }


        if (Angered && Alive)
        {
            if (Swoop)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX && PlayerY < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX -= DistanceX / 80;
                        EnemyY -= DistanceY / 80;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopLeft = true;
                            Swoop         = false;
                        }
                    }
                    if (PlayerX > EnemyX && PlayerY < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= DistanceX / 80;
                        EnemyY -= DistanceY / 80;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopRight = true;
                            Swoop          = false;
                        }
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX && PlayerY2 < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX -= DistanceX / 60;
                        EnemyY -= DistanceY / 60;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopLeft = true;
                            Swoop         = false;
                        }
                    }
                    if (PlayerX2 > EnemyX && PlayerY2 < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= DistanceX / 60;
                        EnemyY -= DistanceY / 60;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopRight = true;
                            Swoop          = false;
                        }
                    }
                }
            }


            if (AntiSwoopLeft)
            {
                transform.localRotation = Quaternion.Euler(0, 180, 0);
                if (ClosestPlayer == 1)
                {
                    if (PlayerX - 6 < EnemyX)
                    {
                        EnemyX -= speed * 3;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                    if (PlayerY + 3 > EnemyY)
                    {
                        EnemyY += speed * 1.5f;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 - 6 < EnemyX)
                    {
                        EnemyX -= speed * 3;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                    if (PlayerY2 + 3 > EnemyY)
                    {
                        EnemyY += speed * 1.5f;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                }
            }


            if (AntiSwoopRight)
            {
                transform.localRotation = Quaternion.Euler(0, 0, 0);
                if (ClosestPlayer == 1)
                {
                    if (PlayerX + 6 > EnemyX)
                    {
                        EnemyX += speed * 3;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                    if (PlayerY + 3 > EnemyY)
                    {
                        EnemyY += speed * 1.5f;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 + 6 > EnemyX)
                    {
                        EnemyX += speed * 3;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                    if (PlayerY2 + 3 > EnemyY)
                    {
                        EnemyY += speed * 1.5f;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                }
            }
            Enemy.gameObject.transform.position = new Vector3(EnemyX, EnemyY, Enemy.gameObject.transform.position.z);
        }

        if (Shoot)
        {
            if (ClosestPlayer == 1)
            {
                Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position - transform.position;
                directionToFire.Normalize();
                fireProj.Fire(transform.position, directionToFire, transform.rotation);
                Shoot = false;
            }
            if (ClosestPlayer == 2)
            {
                Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position - transform.position;
                directionToFire.Normalize();
                fireProj.Fire(transform.position, directionToFire, transform.rotation);
                Shoot = false;
            }
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (!Alive)
        {
            Enemy.SetActive(false);
        }
    }
Exemple #8
0
    // Update is called once per frame
    void Update()
    {
        if (!Angered)
        {
            Shoot    = false;
            PlayerX  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX   = Enemy.gameObject.transform.position.x;
            EnemyY   = Enemy.gameObject.transform.position.y;
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (PlayerX + 15 > EnemyX && PlayerX - 15 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
        {
            Angered = true;
            if (Onetime)
            {
                timer   = Time.time;
                Onetime = false;
            }
        }

        if (PlayerX2 + 15 > EnemyX && PlayerX2 > EnemyX - 15 && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
        {
            Angered = true;
            if (Onetime)
            {
                timer   = Time.time;
                Onetime = false;
            }
        }

        if (Alive)
        {
            Enemy.SetActive(true);


            if (Angered)
            {
                if (Time.time > timer)
                {
                    FindPlayer = true;
                    Shoot      = true;
                    timer     += 2f;
                }
                // FindPlayer = true;
                if (FindPlayer)
                {
                    PlayerX   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
                    PlayerY   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
                    PlayerX2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
                    PlayerY2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
                    Distance  = EnemyX - PlayerX;
                    Distance2 = EnemyX - PlayerX2;
                    EnemyX    = Enemy.gameObject.transform.position.x;

                    if (Distance < 0)
                    {
                        Distance = -Distance;
                    }
                    if (Distance2 < 0)
                    {
                        Distance2 = -Distance2;
                    }

                    if (Distance < Distance2)
                    {
                        ClosestPlayer = 1;
                    }
                    if (Distance2 < Distance)
                    {
                        ClosestPlayer = 2;
                    }

                    FindPlayer = false;
                }
                if (Shoot)
                {
                    if (ClosestPlayer == 1)
                    {
                        Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position - transform.position;
                        directionToFire.Normalize();
                        fireProj.Fire(transform.position, directionToFire, transform.rotation);
                        Shoot = false;
                    }
                    if (ClosestPlayer == 2)
                    {
                        Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position - transform.position;
                        directionToFire.Normalize();
                        fireProj.Fire(transform.position, directionToFire, transform.rotation);
                        Shoot = false;
                    }
                }
            }
        }
        else
        {
            Enemy.SetActive(false);
        }
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        if (!Angered)
        {
            PlayerX  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX   = Enemy.gameObject.transform.position.x;
            EnemyY   = Enemy.gameObject.transform.position.y;
            if (PlayerX + 5 > EnemyX && PlayerX - 5 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }
            if (PlayerX2 + 5 > EnemyX && PlayerX2 - 5 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }
        }

        if (Alive && Angered)
        {
            EnemyPos   = new Vector2(Enemy.gameObject.transform.position.x, Enemy.gameObject.transform.position.y);
            PlayerY    = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerY2   = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            FindPlayer = true;


            if (FindPlayer && OneTime)
            {
                EnemyX     = Enemy.gameObject.transform.position.x;
                EnemyY     = Enemy.gameObject.transform.position.y;
                PlayerX    = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
                PlayerX2   = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
                ShootTime  = Time.time;
                Origin     = Time.time;
                wait       = Time.time + 0.25f;
                Deathtimer = Time.time + 30;

                Distance  = EnemyX - PlayerX;
                Distance2 = EnemyX - PlayerX2;

                if (Distance < 0)
                {
                    Distance = -Distance;
                }
                if (Distance2 < 0)
                {
                    Distance2 = -Distance2;
                }

                if (Distance < Distance2)
                {
                    //Finds if the player is on the left.
                    if (PlayerX < EnemyX)
                    {
                        MoveLeft = true;
                    }

                    //Finds if the player is on the right.
                    if (PlayerX > EnemyX)
                    {
                        MoveRight = true;
                    }
                }

                if (Distance2 < Distance)
                {
                    //Finds if the player is on the left.
                    if (PlayerX2 < EnemyX)
                    {
                        MoveLeft = true;
                    }

                    //Finds if the player is on the right.
                    if (PlayerX2 > EnemyX)
                    {
                        MoveRight = true;
                    }
                }

                if (Random.Range(2, 101) > 70)
                {
                    speed = speed * 1.5f;
                }
                OneTime = false;
            }

            if (Time.time > ShootTime)
            {
                ShootTime += 3;
                RNG        = Random.Range(1, 3);
                Shoot      = true;
            }


            if (Shoot)
            {
                if (RNG == 1)
                {
                    fireProj.Fire(transform.position, Vector3.down, transform.rotation);
                }
                else if (RNG == 2)
                {
                    if (MoveLeft)
                    {
                        fireProj.Fire(transform.position, Vector3.left, transform.rotation);
                    }
                    else
                    {
                        fireProj.Fire(transform.position, Vector3.right, transform.rotation);
                    }
                }
                Shoot = false;
            }

            //Will move the Zombie to the left if the player is on the left.
            if (MoveLeft)
            {
                transform.localRotation = Quaternion.Euler(0, 0, 0);
                if (EnemyPos.x > PlayerX - 8)
                {
                    //print("Moving Left");
                    Vector3 moveDirection = Vector3.left;
                    moveDirection.Normalize();
                    moveDirection.y  = 0;
                    moveDirection.x *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                }
                else if (!playerLevelReached) //if (EnemyPos.y > PlayerY + 2)
                {
                    if (setTarget)
                    {
                        targetPos = new Vector2(EnemyPos.x, EnemyPos.y - 1);
                        setTarget = false;
                    }
                    Vector2 direction = targetPos - EnemyPos;
                    direction.Normalize();

                    // EnemyPos = EnemyPos + (direction * speed);

                    Vector3 moveDirection = Vector3.down;
                    moveDirection.Normalize();
                    moveDirection.y *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 0.1f);
                    if (Vector2.Distance(new Vector2(0, EnemyPos.y), new Vector2(0, targetPos.y)) < 0.1f)
                    {
                        setTarget = true;
                        MoveLeft  = false;
                        MoveRight = true;
                        if (EnemyPos.y <= PlayerY + 0.5)
                        {
                            playerLevelReached = true;
                        }
                    }
                }
                else if (playerLevelReached)
                {
                    if (setTarget)
                    {
                        targetPos = new Vector2(EnemyPos.x, EnemyPos.y + 1);
                        setTarget = false;
                    }

                    Vector2 direction = targetPos - EnemyPos;
                    direction.Normalize();
                    direction.y *= speed;

                    // EnemyPos = EnemyPos + (direction * speed);

                    Vector3 moveDirection = Vector3.up;
                    moveDirection.Normalize();
                    moveDirection.y *= speed;
                    rb.velocity      = Vector3.Lerp(rb.velocity, direction, 0.1f);
                    if (Vector2.Distance(new Vector2(0, EnemyPos.y), new Vector2(0, targetPos.y)) < 0.1f)
                    {
                        setTarget = true;
                        MoveLeft  = false;
                        MoveRight = true;
                        if (EnemyPos.y <= PlayerY)
                        {
                            playerLevelReached = false;
                        }
                    }
                }

                if (transform.position.x == EnemyXOrigin && CheckIfStill)
                {
                    MoveLeft     = false;
                    MoveRight    = true;
                    CheckIfStill = false;
                }
                else
                {
                    CheckIfStill = false;
                }
            }

            //Will move the Zombie to the right if the player is on the right
            else if (MoveRight)
            {
                transform.localRotation = Quaternion.Euler(0, 180, 0);
                if (EnemyPos.x < PlayerX + 8)
                {
                    Vector3 moveDirection = Vector3.right;
                    moveDirection.Normalize();
                    moveDirection.y  = 0;
                    moveDirection.x *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                }
                else if (!playerLevelReached) // if (EnemyPos.y > PlayerY + 2)
                {
                    if (setTarget)
                    {
                        targetPos = new Vector2(EnemyPos.x, EnemyPos.y - 1); //line
                        setTarget = false;
                    }

                    Vector2 direction = targetPos - EnemyPos; //line
                    direction.Normalize();

                    // EnemyPos = EnemyPos + (direction * speed); //line

                    Vector3 moveDirection = Vector3.down;
                    moveDirection.Normalize();
                    moveDirection.y *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 0.1f);
                    if (Vector2.Distance(new Vector2(0, EnemyPos.y), new Vector2(0, targetPos.y)) < 0.1f) //line
                    {
                        setTarget = true;
                        MoveLeft  = true;
                        MoveRight = false;
                        if (EnemyPos.y <= PlayerY + 0.5)
                        {
                            playerLevelReached = true;
                        }
                    }
                }
                else if (playerLevelReached)
                {
                    if (setTarget)
                    {
                        targetPos = new Vector2(EnemyPos.x, EnemyPos.y + 1);
                        setTarget = false;
                    }

                    Vector2 direction = targetPos - EnemyPos;
                    direction.Normalize();
                    direction.y *= speed;

                    // EnemyPos = EnemyPos + (direction * speed);

                    Vector3 moveDirection = Vector3.up;
                    moveDirection.Normalize();
                    moveDirection.y   *= speed;
                    moveDirection.y   *= speed;
                    playerLevelReached = true;
                    rb.velocity        = Vector3.Lerp(rb.velocity, direction, 0.1f);
                    if (Vector2.Distance(new Vector2(0, EnemyPos.y), new Vector2(0, targetPos.y)) < 0.1f)
                    {
                        setTarget = true;
                        MoveLeft  = true;
                        MoveRight = false;
                        if (EnemyPos.y >= PlayerY)
                        {
                            playerLevelReached = false;
                        }
                    }
                }

                if (transform.position.x == EnemyXOrigin && CheckIfStill)
                {
                    MoveLeft     = true;
                    MoveRight    = false;
                    CheckIfStill = false;
                }
                else
                {
                    CheckIfStill = false;
                }
            }

            if (Time.time > Origin)
            {
                EnemyXOrigin = transform.position.x;
                Origin      += 1f;
            }

            if (Time.time > wait)
            {
                wait        += 0.5f;
                CheckIfStill = true;
            }

            //After how long the DeathTimer is the zombie will stop moving.
            if (Time.time > Deathtimer)
            {
                Alive = false;
            }
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (!Alive)
        {
            Enemy.SetActive(false);
        }
    }
Exemple #10
0
    void RangeAttack()
    {
        FireProjectile projectile = Instantiate(fireProjectile, Vector3.zero, Quaternion.identity) as FireProjectile;

        projectile.Fire(transform.position, _attackTarget.position);
    }
    // Update is called once per frame
    void Update()
    {
        if (FindPlayer)
        {
            PlayerX  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX   = Enemy.gameObject.transform.position.x;
            EnemyY   = Enemy.gameObject.transform.position.y;

            Distance  = EnemyX - PlayerX;
            Distance2 = EnemyX - PlayerX2;

            if (Distance < 0)
            {
                Distance = -Distance;
            }
            if (Distance2 < 0)
            {
                Distance2 = -Distance2;
            }

            if (Distance < Distance2)
            {
                DistanceY     = EnemyY - PlayerY;
                DistanceX     = EnemyX - PlayerX;
                ClosestPlayer = 1;
            }

            if (Distance2 < Distance)
            {
                DistanceY     = EnemyY - PlayerY2;
                DistanceX     = EnemyX - PlayerX2;
                ClosestPlayer = 2;
            }

            FindPlayer = false;
        }

        if (!Angered)
        {
            FindPlayer = true;
            if (PlayerX + 5 > EnemyX && PlayerX - 5 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }
            if (PlayerX2 + 5 > EnemyX && PlayerX2 - 5 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }
        }

        if (Angered)
        {
            if (PlayerX > EnemyX + 12 && PlayerX < EnemyX - 12 && PlayerY > EnemyY + 7 && PlayerY < EnemyY - 7 && PlayerX2 > EnemyX + 12 && PlayerX2 < EnemyX - 12 && PlayerY2 > EnemyY + 7 && PlayerY2 < EnemyY - 7)
            {
                Angered = false;
            }
        }

        if (Time.time > RNGtimer)
        {
            RNG        = Random.Range(2, 100);
            RNGtimer  += 3;
            FindPlayer = true;
        }

        if (!InAir && !MoveLeft && !MoveRight && !FlyUp && !FlyDown)
        {
            if (RNG <= 25 && RNG > 0)
            {
                MoveLeft = true;
            }
            else if (RNG <= 50 && RNG > 25)
            {
                MoveRight = true;
            }
            else if (RNG <= 100 && RNG > 50)
            {
                FlyUp = true;
            }
            RNG = 0;
        }


        else if (InAir && !FlyUp && !FlyDown && !Swoop && !AntiSwoopLeft && !AntiSwoopRight && !Shoot)
        {
            if (RNG <= 70 && RNG > 30)
            {
                FlyDown = true;
            }
            else if (RNG > 70 && RNG <= 90)
            {
                Swoop = true;
            }
            else if (RNG > 90)
            {
                Shoot = true;
            }
            RNG = 0;
        }

        if (Angered && Alive)
        {
            if (ClosestPlayer == 1)
            {
                //Will move the Zombie to the left if the player is on the left.
                if (MoveLeft && !InAir)
                {
                    transform.localRotation = Quaternion.Euler(0, 0, 0);
                    if (EnemyX > PlayerX - 8)
                    {
                        EnemyX -= speed;
                    }
                    else
                    {
                        MoveLeft = false;
                    }
                }
                //Will move the Zombie to the right if the player is on the right
                else if (MoveRight && !InAir)
                {
                    transform.localRotation = Quaternion.Euler(0, 180, 0);
                    if (EnemyX < PlayerX + 8)
                    {
                        EnemyX += speed;
                    }
                    else
                    {
                        MoveRight = false;
                    }
                }


                if (FlyUp)
                {
                    if (EnemyY < PlayerY + 4)
                    {
                        EnemyY += speed;
                        InAir   = true;
                    }
                    else
                    {
                        FlyUp = false;
                    }
                }
                else if (FlyDown)
                {
                    if (EnemyY > PlayerY)
                    {
                        EnemyY -= speed;
                        InAir   = false;
                    }
                    else
                    {
                        FlyDown = false;
                    }
                }


                if (Swoop && InAir)
                {
                    if (PlayerX < EnemyX && PlayerY < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX -= DistanceX / 40;
                        EnemyY -= DistanceY / 40;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopLeft = true;
                            Swoop         = false;
                        }
                    }
                    if (PlayerX > EnemyX && PlayerY < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= DistanceX / 40;
                        EnemyY -= DistanceY / 40;
                        if (PlayerX + 0.3f > EnemyX && PlayerX - 0.3f < EnemyX)
                        {
                            AntiSwoopRight = true;
                            Swoop          = false;
                        }
                    }
                }


                if (AntiSwoopLeft)
                {
                    if (PlayerX - 8 < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= speed * 4;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                    if (PlayerY + 4 > EnemyY)
                    {
                        EnemyY += speed * 2;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                }


                if (AntiSwoopRight)
                {
                    if (PlayerX + 8 > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX += speed * 4;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                    if (PlayerY + 4 > EnemyY)
                    {
                        EnemyY += speed * 2;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                }
                if (EnemyX > PlayerX + 8.1f)
                {
                    EnemyX -= speed * 5;
                    // Enemy.gameObject.transform.position = new Vector3(EnemyX, Enemy.gameObject.transform.position.y, Enemy.gameObject.transform.position.z)
                }
                else if (EnemyX < PlayerX - 8.1f)
                {
                    EnemyX += speed * 5;
                    // Enemy.gameObject.transform.position = new Vector3(EnemyX, Enemy.gameObject.transform.position.y, Enemy.gameObject.transform.position.z)
                }
                Enemy.gameObject.transform.position = new Vector3(EnemyX, EnemyY, Enemy.gameObject.transform.position.z);
            }

            if (ClosestPlayer == 2)
            {
                //Will move the Zombie to the left if the player is on the left.
                if (MoveLeft && !InAir)
                {
                    transform.localRotation = Quaternion.Euler(0, 0, 0);
                    if (EnemyX > PlayerX2 - 8)
                    {
                        EnemyX -= speed;
                    }
                    else
                    {
                        MoveLeft = false;
                    }
                }
                //Will move the Zombie to the right if the player is on the right
                else if (MoveRight && !InAir)
                {
                    transform.localRotation = Quaternion.Euler(0, 180, 0);
                    if (EnemyX < PlayerX2 + 8)
                    {
                        EnemyX += speed;
                    }
                    else
                    {
                        MoveRight = false;
                    }
                }


                if (FlyUp)
                {
                    if (EnemyY < PlayerY2 + 4)
                    {
                        EnemyY += speed;
                        InAir   = true;
                    }
                    else
                    {
                        FlyUp = false;
                    }
                }
                else if (FlyDown)
                {
                    if (EnemyY > PlayerY2)
                    {
                        EnemyY -= speed;
                        InAir   = false;
                    }
                    else
                    {
                        FlyDown = false;
                    }
                }


                if (Swoop && InAir)
                {
                    if (PlayerX2 < EnemyX && PlayerY2 < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX -= DistanceX / 40;
                        EnemyY -= DistanceY / 40;
                        if (PlayerX2 + 0.3f > EnemyX && PlayerX2 - 0.3f < EnemyX)
                        {
                            AntiSwoopLeft = true;
                            Swoop         = false;
                        }
                    }
                    if (PlayerX2 > EnemyX && PlayerY2 < EnemyY)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= DistanceX / 40;
                        EnemyY -= DistanceY / 40;
                        if (PlayerX2 + 0.3f > EnemyX && PlayerX2 - 0.3f < EnemyX)
                        {
                            AntiSwoopRight = true;
                            Swoop          = false;
                        }
                    }
                }


                if (AntiSwoopLeft)
                {
                    if (PlayerX2 - 8 < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        EnemyX -= speed * 4;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                    if (PlayerY2 + 4 > EnemyY)
                    {
                        EnemyY += speed * 2;
                    }
                    else
                    {
                        AntiSwoopLeft = false;
                    }
                }


                if (AntiSwoopRight)
                {
                    if (PlayerX2 + 8 > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        EnemyX += speed * 4;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                    if (PlayerY2 + 4 > EnemyY)
                    {
                        EnemyY += speed * 2;
                    }
                    else
                    {
                        AntiSwoopRight = false;
                    }
                }
                if (EnemyX > PlayerX2 + 8.1f)
                {
                    EnemyX -= speed * 5;
                    // Enemy.gameObject.transform.position = new Vector3(EnemyX, Enemy.gameObject.transform.position.y, Enemy.gameObject.transform.position.z)
                }
                else if (EnemyX < PlayerX2 - 8.1f)
                {
                    EnemyX += speed * 5;
                    // Enemy.gameObject.transform.position = new Vector3(EnemyX, Enemy.gameObject.transform.position.y, Enemy.gameObject.transform.position.z)
                }
                Enemy.gameObject.transform.position = new Vector3(EnemyX, EnemyY, Enemy.gameObject.transform.position.z);
            }


            if (Shoot)
            {
                if (ClosestPlayer == 1)
                {
                    Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position - transform.position;
                    directionToFire.Normalize();
                    fireProj.Fire(transform.position, directionToFire, transform.rotation);
                    Shoot = false;
                }
                if (ClosestPlayer == 2)
                {
                    Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position - transform.position;
                    directionToFire.Normalize();
                    fireProj.Fire(transform.position, directionToFire, transform.rotation);
                    Shoot = false;
                }
            }

            if (HP <= 0)
            {
                KillEntity();
            }

            if (!Alive)
            {
                Enemy.SetActive(false);
            }
        }
    }
Exemple #12
0
    // Update is called once per frame
    void Update()
    {
        if (Time.time > RNGTimer)
        {
            RNG       = Random.Range(2, 100);
            RNGTimer += 0.3f;
        }

        if (!Angered)
        {
            PlayerX  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX   = Enemy.gameObject.transform.position.x;
            EnemyY   = Enemy.gameObject.transform.position.y;

            if (PlayerX + 5 > EnemyX && PlayerX - 5 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }
            if (PlayerX2 + 5 > EnemyX && PlayerX2 - 5 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }
        }


        if (Alive && Angered)
        {
            EnemyPos  = new Vector2(Enemy.gameObject.transform.position.x, Enemy.gameObject.transform.position.y);
            PlayerPos = new Vector2(Player.gameObject.transform.position.x, Player.gameObject.transform.position.y);


            if (OneTime)
            {
                EnemyX    = Enemy.gameObject.transform.position.x;
                EnemyY    = Enemy.gameObject.transform.position.y;
                PlayerX   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
                PlayerX2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
                ShootTime = Time.time;
                Origin    = Time.time;
                wait      = Time.time + 0.25f;

                Distance  = EnemyX - PlayerX;
                Distance2 = EnemyX - PlayerX2;

                if (Distance < 0)
                {
                    Distance = -Distance;
                }
                if (Distance2 < 0)
                {
                    Distance2 = -Distance2;
                }

                if (Distance < Distance2)
                {
                    //Finds if the player is on the left.
                    if (PlayerX < EnemyX)
                    {
                        MoveLeft = true;
                    }

                    //Finds if the player is on the right.
                    if (PlayerX > EnemyX)
                    {
                        MoveRight = true;
                    }
                }

                if (Distance2 < Distance)
                {
                    //Finds if the player is on the left.
                    if (PlayerX2 < EnemyX)
                    {
                        MoveLeft = true;
                    }

                    //Finds if the player is on the right.
                    if (PlayerX2 > EnemyX)
                    {
                        MoveRight = true;
                    }
                }

                OneTime = false;
            }

            if (Time.time > ShootTime)
            {
                ShootTime += 3;
                Shoot      = true;
            }

            if (Time.time > Origin)
            {
                EnemyXOrigin = EnemyX;
                Origin      += 1f;
            }

            if (Time.time > wait)
            {
                wait        += 1.5f;
                CheckIfStill = true;
            }

            if (RNG > 0)
            {
                MoveTime = Time.time + 0.2f;
                if (RNG <= 90 && RNG > 50)
                {
                    FlyUp = true;
                }

                else if (RNG <= 100 && RNG > 90)
                {
                    FlyDown = true;
                }
                RNG = 0;
            }

            if (MoveTime < Time.time)
            {
                FlyUp   = false;
                FlyDown = false;
            }

            if (EnemyPos.y < PlayerPos.y + 0.5)
            {
                FlyDown = false;
                FlyUp   = true;
            }
            else if (EnemyPos.y > PlayerPos.y + 2)
            {
                FlyUp   = false;
                FlyDown = true;
            }

            if (Shoot)
            {
                Vector3 directionToFire = Player.transform.position - transform.position;
                directionToFire.Normalize();
                fireProj.Fire(transform.position, directionToFire, transform.rotation);
                Shoot = false;
            }

            //Will move the Zombie to the left if the player is on the left.
            if (MoveLeft)
            {
                transform.localRotation = Quaternion.Euler(0, 0, 0);
                if (EnemyPos.x > PlayerPos.x - 8)
                {
                    Vector3 moveDirection = Vector3.left;
                    moveDirection.Normalize();
                    moveDirection.y  = 0;
                    moveDirection.x *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                }
                else
                {
                    MoveLeft  = false;
                    MoveRight = true;
                }

                if (EnemyX == EnemyXOrigin && CheckIfStill)
                {
                    MoveLeft     = false;
                    MoveRight    = true;
                    CheckIfStill = false;
                }
                else
                {
                    CheckIfStill = false;
                }
            }

            //Will move the Zombie to the right if the player is on the right
            else if (MoveRight)
            {
                transform.localRotation = Quaternion.Euler(0, 180, 0);
                if (EnemyPos.x < PlayerPos.x + 8)
                {
                    Vector3 moveDirection = Vector3.right;
                    moveDirection.Normalize();
                    moveDirection.y  = 0;
                    moveDirection.x *= speed;

                    rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                }
                else
                {
                    MoveLeft  = true;
                    MoveRight = false;
                }

                if (EnemyX == EnemyXOrigin && CheckIfStill)
                {
                    MoveLeft     = true;
                    MoveRight    = false;
                    CheckIfStill = false;
                }
                else
                {
                    CheckIfStill = false;
                }
            }

            if (FlyUp)
            {
                Vector3 moveDirection = Vector3.up;
                moveDirection.Normalize();
                moveDirection.y *= speed;

                rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 0.3f);
            }

            else if (FlyDown)
            {
                Vector3 moveDirection = Vector3.down;
                moveDirection.Normalize();
                moveDirection.y *= speed;

                rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 0.3f);
            }
        }


        if (HP <= 0)
        {
            KillEntity();
        }

        if (!Alive)
        {
            Enemy.SetActive(false);
        }
    }
Exemple #13
0
    // Update is called once per frame
    void Update()
    {
        if (FindPlayer)
        {
            PlayerX    = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY    = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2   = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2   = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX     = Enemy.transform.position.x;
            EnemyY     = Enemy.transform.position.y;
            FindPlayer = false;

            Distance  = EnemyX - PlayerX;
            Distance2 = EnemyX - PlayerX2;

            if (Distance < 0)
            {
                Distance = -Distance;
            }
            if (Distance2 < 0)
            {
                Distance2 = -Distance2;
            }

            if (Distance < Distance2)
            {
                ClosestPlayer = 1;
            }
            if (Distance2 < Distance)
            {
                ClosestPlayer = 2;
            }
        }

        if (!Angered)
        {
            if (ClosestPlayer == 1)
            {
                if (PlayerX + 10 > EnemyX && PlayerX - 10 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
                {
                    Angered = true;
                }
            }

            if (ClosestPlayer == 2)
            {
                if (PlayerX2 + 10 > EnemyX && PlayerX2 - 10 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
                {
                    Angered = true;
                }
            }
        }

        if (Time.time > RNGtimer)
        {
            FindPlayer = true;
            RNG        = Random.Range(2, 100);
            RNGtimer  += 1;
        }



        if (!Jump && !Shoot && !Dash)
        {
            if (RNG <= 65 && RNG > 0)
            {
                Jump      = true;
                JumpTimer = Time.time + 1;
            }
            else if (RNG <= 66 && RNG > 65)
            {
                Shoot = true;
            }
            else if (RNG <= 100 && RNG > 66)
            {
                Dash     = true;
                DashTime = Time.time + 0.2f;
            }
            RNG = 0;
        }

        GetDesiredMove();

        if (Angered && Alive)
        {
            if (Jump)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        if (Time.time < JumpTimer - 0.8f)
                        {
                            //EnemyY += speed * 2;
                            //EnemyX -= speed;
                            Vector3 moveDirection = GetDesiredMove();
                            moveDirection.Normalize();
                            moveDirection.y  = rb.velocity.y;
                            moveDirection.x *= speed;

                            rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                            rb.velocity = Vector2.Lerp(rb.velocity, new Vector2(rb.velocity.x, 14), 1f);
                        }
                    }
                    else if (PlayerX > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        if (Time.time < JumpTimer - 0.8f)
                        {
                            //EnemyY += speed * 2;
                            //EnemyX += speed;
                            Vector3 moveDirection = GetDesiredMove();
                            moveDirection.Normalize();
                            moveDirection.y  = rb.velocity.y;
                            moveDirection.x *= speed;

                            rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                            rb.velocity = Vector2.Lerp(rb.velocity, new Vector2(rb.velocity.x, 14), 1f);
                        }
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        if (Time.time < JumpTimer - 0.8f)
                        {
                            //EnemyY += speed * 2;
                            //EnemyX -= speed;
                            Vector3 moveDirection = GetDesiredMove();
                            moveDirection.Normalize();
                            moveDirection.y  = rb.velocity.y;
                            moveDirection.x *= speed;

                            rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                            rb.velocity = Vector2.Lerp(rb.velocity, new Vector2(rb.velocity.x, 14), 1f);
                        }
                    }
                    else if (PlayerX2 > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        if (Time.time < JumpTimer - 0.8f)
                        {
                            //EnemyY += speed * 2;
                            //EnemyX += speed;
                            Vector3 moveDirection = GetDesiredMove();
                            moveDirection.Normalize();
                            moveDirection.y  = rb.velocity.y;
                            moveDirection.x *= speed;

                            rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                            rb.velocity = Vector2.Lerp(rb.velocity, new Vector2(rb.velocity.x, 14), 1f);
                        }
                    }
                }

                if (Time.time > JumpTimer)
                {
                    Jump = false;
                }
            }

            if (Shoot)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX)
                    {
                        fireProj.Fire(transform.position, Vector3.left, transform.rotation);
                    }
                    else
                    {
                        fireProj.Fire(transform.position, Vector3.right, transform.rotation);
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX)
                    {
                        fireProj.Fire(transform.position, Vector3.left, transform.rotation);
                    }
                    else
                    {
                        fireProj.Fire(transform.position, Vector3.right, transform.rotation);
                    }
                }

                Shoot = false;
            }

            if (Dash)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX)
                    {
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }

                    else if (PlayerX > EnemyX)
                    {
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX)
                    {
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }

                    else if (PlayerX2 > EnemyX)
                    {
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }
                }

                if (DashTime < Time.time)
                {
                    Dash = false;
                }
            }
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (!Alive)
        {
            Enemy.SetActive(false);
        }

        //Enemy.gameObject.transform.position = new Vector3(EnemyX, EnemyY, Enemy.gameObject.transform.position.z);
    }
    // Update is called once per frame
    void Update()
    {
        if (FindPlayer)
        {
            PlayerX   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX    = Enemy.transform.position.x;
            EnemyY    = Enemy.transform.position.y;
            Distance  = EnemyX - PlayerX;
            Distance2 = EnemyX - PlayerX2;

            if (Distance < 0)
            {
                Distance = -Distance;
            }
            if (Distance2 < 0)
            {
                Distance2 = -Distance2;
            }

            if (Distance < Distance2)
            {
                ClosestPlayer = 1;
            }
            else if (Distance2 < Distance)
            {
                ClosestPlayer = 2;
            }

            FindPlayer = false;
        }

        if (!Angered)
        {
            Shoot = false;
            if (PlayerX + 10 > EnemyX && PlayerX - 10 < EnemyX && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }
            if (PlayerX2 + 10 > EnemyX && PlayerX2 - 10 < EnemyX && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }
        }

        if (Angered)
        {
            if (PlayerX > EnemyX + 16 && PlayerX < EnemyX - 16 && PlayerY > EnemyY + 10 && PlayerY < EnemyY - 10 && PlayerX2 > EnemyX + 16 && PlayerX2 < EnemyX - 16 && PlayerY2 > EnemyY + 10 && PlayerY2 < EnemyY - 10)
            {
                Angered = false;
            }
        }



        if (Time.time > Origin)
        {
            EnemyXOrigin = EnemyX;
            Origin      += 1f;
        }

        if (Time.time > wait)
        {
            wait        += 1.5f;
            CheckIfStill = true;
        }

        GetDesiredMove();

        if (Angered && Alive)
        {
            if (OneTime)
            {
                Origin     = Time.time;
                wait       = Time.time + 0.25f;
                OneTime    = false;
                DelayTimer = Time.time + 1f;
            }

            if (Time.time > DelayTimer)
            {
                FindPlayer = true;

                if (!Shoot && !DashForward && !DashBackwards && Angered)
                {
                    if (Distance > 8)
                    {
                        Shoot       = true;
                        DelayTimer += 1.5f;
                    }
                    else if (Distance <= 8)
                    {
                        Dash        = true;
                        DashTime    = Time.time + 0.2f;
                        DelayTimer += 1;
                    }
                }
            }

            if (Dash == true)
            {
                if (Distance <= 5)
                {
                    DashForward = true;
                    Dash        = false;
                }
                else if (Distance > 7 && Distance <= 8)
                {
                    DashBackwards = true;
                    Dash          = false;
                }
            }



            if (EnemyX == EnemyXOrigin && CheckIfStill)
            {
                Dash          = false;
                DashBackwards = false;
                DashForward   = false;
                Shoot         = true;
                CheckIfStill  = false;
            }
            else
            {
                CheckIfStill = false;
            }

            if (Shoot)
            {
                if (ClosestPlayer == 1)
                {
                    Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position - transform.position;
                    directionToFire.Normalize();
                    fireProj.Fire(transform.position, directionToFire, transform.rotation);
                }
                if (ClosestPlayer == 2)
                {
                    Vector3 directionToFire = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position - transform.position;
                    directionToFire.Normalize();
                    fireProj.Fire(transform.position, directionToFire, transform.rotation);
                }
                Shoot = false;
            }

            if (DashForward)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }

                    else if (PlayerX > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }

                    else if (PlayerX2 > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, moveDirection, 1f);
                    }
                }

                if (DashTime < Time.time)
                {
                    DashForward = false;
                }
            }

            if (DashBackwards)
            {
                if (ClosestPlayer == 1)
                {
                    if (PlayerX < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, -moveDirection, 1f);
                    }

                    else if (PlayerX > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, -moveDirection, 1f);
                    }
                }

                if (ClosestPlayer == 2)
                {
                    if (PlayerX2 < EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, -moveDirection, 1f);
                    }

                    else if (PlayerX2 > EnemyX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 180, 0);
                        Vector3 moveDirection = GetDesiredMove();
                        moveDirection.Normalize();
                        moveDirection.y  = rb.velocity.y;
                        moveDirection.x *= speed;

                        rb.velocity = Vector3.Lerp(rb.velocity, -moveDirection, 1f);
                    }
                }

                if (DashTime < Time.time)
                {
                    DashBackwards = false;
                }
            }
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (!Alive)
        {
            Enemy.SetActive(false);
        }

        //Enemy.gameObject.transform.position = new Vector3(EnemyX, EnemyY, Enemy.gameObject.transform.position.z);
    }
Exemple #15
0
    // Update is called once per frame
    void Update()
    {
        if (!Angered)
        {
            Shoot    = false;
            PlayerX  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
            PlayerY  = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.y;
            PlayerX2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
            PlayerY2 = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.y;
            EnemyX   = Enemy.gameObject.transform.position.x;
            EnemyY   = Enemy.gameObject.transform.position.y;
        }

        if (HP <= 0)
        {
            KillEntity();
        }

        if (Alive)
        {
            Enemy.SetActive(true);
            if (PlayerX + 10 > EnemyX && PlayerX > EnemyX - 10 && PlayerY + 3 > EnemyY && PlayerY - 3 < EnemyY)
            {
                Angered = true;
            }

            if (PlayerX2 + 10 > EnemyX && PlayerX2 > EnemyX - 10 && PlayerY2 + 3 > EnemyY && PlayerY2 - 3 < EnemyY)
            {
                Angered = true;
            }

            if (Angered)
            {
                if (Time.time > timer)
                {
                    timer      += 2f;
                    FindPlayer  = true;
                    Shoot       = true;
                    ShootHeight = Random.Range(0, 2);
                }
                // FindPlayer = true;
                if (FindPlayer)
                {
                    PlayerX   = Singleton_Game.m_instance.GetPlayer(0).gameObject.transform.position.x;
                    PlayerX2  = Singleton_Game.m_instance.GetPlayer(1).gameObject.transform.position.x;
                    Distance  = EnemyX - PlayerX;
                    Distance2 = EnemyX - PlayerX2;

                    if (Distance < 0)
                    {
                        Distance = -Distance;
                    }
                    if (Distance2 < 0)
                    {
                        Distance2 = -Distance2;
                    }

                    if (Distance < Distance2)
                    {
                        ClosestPlayer = 1;
                    }
                    if (Distance2 < Distance)
                    {
                        ClosestPlayer = 2;
                    }

                    EnemyX = Enemy.gameObject.transform.position.x;

                    FindPlayer = false;
                }
                if (Shoot)
                {
                    if (ClosestPlayer == 1)
                    {
                        if (PlayerX < EnemyX)
                        {
                            fireProj.Fire(transform.position - new Vector3(0, ShootHeight - 0.5f, 0), Vector3.left, transform.rotation);
                        }
                        else
                        {
                            fireProj.Fire(transform.position - new Vector3(0, ShootHeight - 0.5f, 0), Vector3.right, transform.rotation);
                        }
                        Shoot = false;
                    }
                    if (ClosestPlayer == 2)
                    {
                        if (PlayerX2 < EnemyX)
                        {
                            fireProj.Fire(transform.position - new Vector3(0, ShootHeight - 0.5f, 0), Vector3.left, transform.rotation);
                        }
                        else
                        {
                            fireProj.Fire(transform.position - new Vector3(0, ShootHeight - 0.5f, 0), Vector3.right, transform.rotation);
                        }
                        Shoot = false;
                    }
                }

                if (Onetime)
                {
                    timer   = Time.time;
                    Onetime = false;
                }
            }
        }
        else
        {
            Enemy.SetActive(false);
        }
    }