Пример #1
0
    void shootBullet()
    {
        Vector3        newBulletLocation = this.transform.position;
        BulletMovement newBullet         = bullet.GetPooledInstance <BulletMovement>(newBulletLocation);
        Vector3        offset            = newBullet.direction * 0.8f;

        newBullet.transform.Translate(offset);
        float vol = Random.Range(0.8f, 1.0f);

        source.pitch = (Random.Range(0.8f, 1.2f));
        source.PlayOneShot(shootSound, vol);
    }
Пример #2
0
    public void Fire(Vector3 origin, Quaternion rotation)
    {
        GameObject     bullet         = Instantiate(bulletPrefab, origin, rotation);
        BulletMovement bulletMovement = bullet.GetComponent <BulletMovement>();

        float   angle = 0.0f;
        Vector3 axis  = Vector3.zero;

        rotation.ToAngleAxis(out angle, out axis);

        bulletMovement.SetMovementAngle(angle * axis.z);
    }
 void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.layer == LayerMask.NameToLayer("EnemyBullets"))
     {
         BulletMovement bullet = other.GetComponent <BulletMovement>();
         ApplyDamage(bullet.bulletDamage);
         bullet.ReturnToPool();
     }
     if (other.gameObject.layer.Equals(LayerMask.NameToLayer("Enemies")))
     {
         ApplyDamage(5);
     }
 }
Пример #4
0
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "SpeedUp")
        {
            powerupAudio.clip = playerInfo.speedSound;
            powerupAudio.Play();
            Destroy(other.gameObject);
            if (speed < speed_max)
            {
                speed += 5;
            }
        }
        else if (other.tag == "HealthUp")
        {
            powerupAudio.clip = playerInfo.healthSound;
            powerupAudio.Play();
            Destroy(other.gameObject);
            if (health < health_max)
            {
                health += 1;
            }
        }
        else if (other.tag == "ShootSpeedUp")
        {
            powerupAudio.clip = playerInfo.shootspeedSound;
            powerupAudio.Play();
            Destroy(other.gameObject);
            if (shoot_wait > shoot_speed_max)
            {
                shoot_wait -= 0.1f;
                if (bulletPickups < 3)
                {
                    bulletPickups++;
                }
            }
        }
        else if (other.tag == "Gun")
        {
            //This is here because it causes error because of the last else if
        }
        else if (playerInfo.fighting && other.tag == "PlayerBullet" + otherPlayerIndex)
        {
            BulletMovement bm = other.GetComponent <BulletMovement>();

            Take_Damage(bm.damage);
            if (bm.piercing-- == 0)
            {
                bm.ReturnToPool();
            }
        }
    }
        public static void SimulateStep(ref float3 pos, ref quaternion rot,
                                        BulletMovement movementStats, float dt, float3 playerPos)
        {
            float3 forward     = Up(rot);
            float3 linMovement = forward * movementStats.moveSpeed * dt;

            // update position after rotation so that rotation speed that
            //   relies on position is unaffected
            IntegrateOrientation(ref rot,
                                 new float3(0, 0, GetRotationSpeed(movementStats.moveType,
                                                                   movementStats.moveSpeed, forward, math.normalize(playerPos - pos))),
                                 dt);
            pos += linMovement;
        }
Пример #6
0
        private void InitBulletPosRot(float3 spawnLocation,
                                      float3 shooterForward, quaternion fireDirection,
                                      float angleOffset, float timeOffset, int moveIdx,
                                      float3 playerPos, out float3 pos, out quaternion rot)
        {
            // compute position and rotation simulated over timeOffset
            pos = new float3(spawnLocation.x, spawnLocation.y, bulletHeight);
            rot = math.normalize(math.mul(fireDirection,
                                          quaternion.AxisAngle(shooterForward, angleOffset)));
            BulletMovement moveStats = bulletMovementStats[moveIdx];

            BulletMovementSystem.MoveUtility.SimulateMovement(ref pos, ref rot,
                                                              moveStats, timeOffset, fixedDT, playerPos);
        }
Пример #7
0
    void Shoot()
    {
        GameObject bullet = spawner.Spawn(
            (int)currentBulletType,
            transform.position,
            transform.parent.rotation);

        BulletMovement bulletMovement = bullet.GetComponent <BulletMovement>();

        if (bulletMovement)
        {
            bulletMovement.speed = bulletsSpeed;
        }
    }
Пример #8
0
    // Fires a volley to a collision layer.
    public bool Fire(int layer, Vector3 baseVelocity)
    {
        // If we are ready to fire
        if (coolDown <= 0 && HasAmmo())
        {
            // Get position and direction from the muzzle
            Vector3 pos      = Muzzle.position;
            Vector3 velocity = Muzzle.right * BulletSpeed;

            // Fire the whole volley
            for (int i = 0; i < Volley && HasAmmo(); i++)
            {
                GameObject fired = null;
                if (pool != null)
                {
                    fired = pool.GetBullet();
                }
                else
                {
                    fired = Instantiate(Bullet);
                }
                if (fired == null)
                {
                    return(false);
                }
                fired.transform.position = pos;
                float          angle    = Random.Range(-Spread, Spread);
                BulletMovement movement = fired.GetComponent <BulletMovement>();
                if (movement != null)
                {
                    movement.SetUp((UseBaseVelocity ? baseVelocity : Vector3.zero) + (Quaternion.Euler(0, 0, angle) * velocity), Damage, Range / BulletSpeed);
                }
                fired.layer = layer;
                currentAmmo--;
            }

            // Reset cooldown
            if (coolDown != -1)
            {
                coolDown = RateOfFire;
            }
            return(true);
        }
        else
        {
            return(false);
        }
    }
Пример #9
0
 void OnTriggerStay(Collider col)
 {
     if (col.gameObject.tag == "Bullet")
     {
         BulletMovement bMov = col.gameObject.GetComponent <BulletMovement>();
         //destroy only if is not deflecting offlane correctly
         if (!(bMov.getLaneID() == 1 && bMov.getDeflectDir() == ship.GetComponent <PlayerMovement>().getPlayerDir()) && !bMov.deflecting)
         {
             Instantiate(explosion, col.transform.position, col.transform.rotation);
             Destroy(col.gameObject);
             Destroy(ship.gameObject);
             SFX.instance.PlayMampus();
             Gameover();
         }
     }
 }
        // simulates moving for time amount of time
        public static void SimulateMovement(ref float3 pos, ref quaternion rot,
                                            BulletMovement movementStats, float time, float dt,
                                            float3 playerPos)
        {
            // forward euler using dt sized steps
            while (time > dt)
            {
                SimulateStep(ref pos, ref rot, movementStats, dt, playerPos);
                time -= dt;
            }

            // again with anything remaining
            if (time > 0)
            {
                SimulateStep(ref pos, ref rot, movementStats, time, playerPos);
            }
        }
    public override void Ability(Vector2 playerPosition, Vector2 currentDirection,
                                 Animator playerAnimator, Rigidbody2D playerRB = null)
    {
        //Starting by creating the projectilek
        //Looking at where the player is facing
        float direction = Mathf.Atan2(currentDirection.y, currentDirection.x);

        //Instantiating the object with regards to where the player is facing
        GameObject newObject = Instantiate(myObject, playerPosition, Quaternion.Euler(0f, 0f, direction));

        BulletMovement movement = newObject.GetComponent <BulletMovement>();

        if (movement)
        {
            movement.movement(currentDirection);
        }
    }
Пример #12
0
 // Update is called once per frame
 void Update()
 {
     if (isFiring)
     {
         bulletCounter -= Time.deltaTime;
         if (bulletCounter <= 0)
         {
             bulletCounter = timeBetweenShots;
             BulletMovement newBullet = Instantiate(bullet, firePoint.position, firePoint.rotation);
             newBullet.speed = bulletSpeed;
         }
     }
     else
     {
         bulletCounter = 0;
     }
 }
Пример #13
0
    void OnTriggerEnter(Collider bullet)
    {
        if (bullet.tag == "Projectile")
        {
            projectile     = GameObject.FindGameObjectWithTag("Projectile");
            bulletMovement = projectile.GetComponent <BulletMovement> ();

            health -= bulletMovement.dmg;
            Destroy(bullet.gameObject);

            if (health <= 0)
            {
                Instantiate(basicExplosion, transform.position, transform.rotation);
                Die();
            }
        }
    }
Пример #14
0
    public Bullet(Vector2 orig, Vector2 dir, Sprite sprite, LayerMask lm, float distance = 5.0f, float speed = 10.0f, int damage = 10)
    {
        bullet = new GameObject();
        BulletMovement bm = bullet.AddComponent <BulletMovement>();

        bm.distance      = distance;
        bm.speed         = speed;
        bm.startPosition = orig;
        bm.direction     = dir;
        bm.toShoot       = lm;
        bm.damage        = damage;
        SpriteRenderer sr = bullet.AddComponent <SpriteRenderer>();

        sr.sprite = sprite;
        bullet.AddComponent <Rigidbody2D>();
        bullet.AddComponent <BoxCollider2D>();
    }
Пример #15
0
    /// <summary>
    /// Dispara balas en un arco de 2 veces el ángulo límite.
    /// </summary>
    public override void Shoot()
    {
        if (shootCooldown == 0f && !disarmed)
        {
            ResetCooldown();

            float currAngle = -limitAngle;

            audioSource.PlayOneShot(shootClip);

            for (int i = 0; i < numBalas; i++)
            {
                BulletMovement newBullet = Instantiate <BulletMovement>(bulletPrefab, shootingPoint.position, Quaternion.identity, bulletPool);
                newBullet.Rotate(transform.right + new Vector3(Mathf.Cos(currAngle), Mathf.Sin(currAngle), 0));
                currAngle += limitAngle * 2 / numBalas;
            }
        }
    }
Пример #16
0
    IEnumerator PhaseFive(int i)
    {
        float revs = 0f;

        angle         = 0f;
        isShooting[i] = true;
        float radius         = pool[i].GetRadius();
        float angleInBetween = pool[i].getAngleInBetween();
        float spawnLag       = pool[i].getSpawnLag();
        int   numBullets     = 0;

        while (revs < 5f)
        {
            float      rad = Mathf.Deg2Rad * angle;
            GameObject b   = pool[i].GetUnusedObject(); //pool
            b.SetActive(true);                          //pool
            BulletMovement b2 = b.GetComponent <BulletMovement>();

            b.transform.localPosition = Vector3.Normalize(new Vector3(Mathf.Cos(rad), Mathf.Sin(rad))) * radius;
            b2.FireOff(pool[i].transform.localPosition, pool[i].GetBulletSpeed(), pool[i].GetLayer());

            float      rad2 = Mathf.Deg2Rad * angle + Mathf.PI;
            GameObject b3   = pool[i].GetUnusedObject(); //pool
            b3.SetActive(true);                          //pool
            BulletMovement b4 = b3.GetComponent <BulletMovement>();

            b3.transform.localPosition = Vector3.Normalize(new Vector3(Mathf.Cos(rad2), Mathf.Sin(rad2))) * radius;
            b4.FireOff(pool[i].transform.localPosition, pool[i].GetBulletSpeed(), pool[i].GetLayer());
            if (numBullets > 0 && numBullets % 5 == 0)
            {
                pool[i].PlayClip();
            }
            yield return(new WaitForSeconds(spawnLag));

            angle      += angleInBetween;
            numBullets += 1;
            if (angle >= 360f)
            {
                revs += 1;
                angle = 0;
            }
        }
        isShooting[i] = false;
    }
Пример #17
0
    public bool Fire(Vector3 position)
    {
        // Look for a free bullet and then fire it from the player position
        bool result = false;

        if (mCharging > 0.0f)
        {
            return(result);
        }
        int multishotLevel   = UserData.GetMultishot();
        int bulletSpeedLevel = UserData.GetBulletSpeed();

        for (int i = 0; i < multishotLevel + 1; i++)
        {
            if (mInactive.Count > 0)
            {
                GameObject bullet = mInactive[0];
                bullet.transform.parent   = null;
                bullet.transform.position = position + new Vector3(multishotXPos[multishotLevel][i], 0, 0);
                BulletMovement bm = bullet.GetComponent <BulletMovement>();
                bm.SetXVel(multishotAngle[multishotLevel][i]);
                bm.SetYVel(fastBulletSpeed[bulletSpeedLevel] + GameLogic.BulletSpeed);
                Vector3 direction = (new Vector3(multishotAngle[multishotLevel][i], fastBulletSpeed[bulletSpeedLevel] + GameLogic.BulletSpeed, 0) - new Vector3(0, 0, 0)).normalized;

                float rot_z = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
                bullet.transform.localRotation = Quaternion.Euler(0f, 0f, rot_z - 90);
                if (bullet.transform.localScale.y < 0)
                {
                    bullet.transform.localScale *= -1;
                }
                bm.AssignToPlayer(true);
                bullet.SetActive(true);
                mActive.Add(bullet);
                mInactive.Remove(bullet);
                mCharging = RechargeTime - (UserData.GetFireRate() * FireRateUpgradeDifference);
                result    = true;
            }
        }

        // Returns true if a free bullet was found and fired
        return(result);
    }
Пример #18
0
 public override void OnBaseShoot(object source, EventArgs e)
 {
     if (!hasShooted)
     {
         if (Controller.IsPlayer)
         {
             GameObject     blet       = Instantiate(bullet, transform.position + new Vector3(1, 0, 0), transform.rotation);
             BulletMovement bmMovement = blet.GetComponent <BulletMovement>();
             bmMovement.target = "Entity";
         }
         else
         {
             GameObject     blet       = Instantiate(bullet, transform.position - new Vector3(1, 0, 0), transform.rotation);
             BulletMovement bmMovement = blet.GetComponent <BulletMovement>();
             bmMovement.target    = "Player";
             bmMovement.direction = GameManager.instance.ActualPlayer.transform;
         }
         hasShooted = true;
     }
 }
Пример #19
0
    IEnumerator PhaseThree(int i)
    {
        float revs = 0f;

        angle = 0f;
        List <GameObject> movement = new List <GameObject>();

        isShooting[i] = true;
        float radius         = pool[i].GetRadius();
        float angleInBetween = pool[i].getAngleInBetween();
        float spawnLag       = pool[i].getSpawnLag();

        while (revs < 3f)
        {
            while (angle < 360f)
            {
                float      rad = Mathf.Deg2Rad * angle;
                GameObject b   = pool[i].GetUnusedObject();
                b.SetActive(true);
                BulletMovement m = b.GetComponent <BulletMovement>();
                m.Setup(pool[i].GetLayer());
                b.GetComponent <SpriteRenderer>().enabled = false;
                b.transform.localPosition = Vector3.Normalize(new Vector3(Mathf.Cos(rad), Mathf.Sin(rad))) * (radius);
                movement.Add(b);
                yield return(new WaitForSeconds(spawnLag));

                angle += angleInBetween;
            }
            foreach (GameObject b in movement)
            {
                b.GetComponent <SpriteRenderer>().enabled = true;
                b.GetComponent <BulletMovement>().FireOff(pool[i].transform.localPosition, pool[i].GetBulletSpeed(), pool[i].GetLayer());
            }
            pool[i].PlayClip();
            revs += 1f;
            angle = 0f;
            movement.Clear();
        }

        isShooting[i] = false;
    }
    // copies monobehavior data into component data
    public void Convert(Entity entity, EntityManager dstManager,
                        GameObjectConversionSystem conversionSystem)
    {
        BulletMovement data;

        // stats exist, prefill
        if (stats != null)
        {
            data = stats.ToBulletMovement();
        }
        // no stats, make default
        else
        {
            data = new BulletMovement {
                moveType    = BulletMovementSystem.MoveType.LINEAR,
                moveSpeed   = 0,
                rotateSpeed = 0
            };
        }
        dstManager.AddComponentData(entity, data);
    }
Пример #21
0
    void OnTriggerEnter2D(Collider2D c)
    {
        if (c.tag == "PlayerBullet1" || c.tag == "PlayerBullet2")
        {
            BulletMovement bm = c.GetComponent <BulletMovement>();
            Take_Damage(bm.GetDamage());
            hurtParticles.gameObject.transform.position = c.gameObject.transform.position;

            float angle = Vector2.Angle(Vector2.right, transform.position - c.transform.position);
            if (c.transform.position.y > transform.position.y)
            {
                angle = -angle;
            }
            rb.AddForce(new Vector2(Mathf.Cos(Mathf.Deg2Rad * angle) * bm.GetDamage(), Mathf.Sin(Mathf.Deg2Rad * angle) * bm.GetDamage()) * knockback);

            if (bm.piercing-- == 0)
            {
                bm.ReturnToPool();
            }
        }
    }
Пример #22
0
    //This function is used to fire one of the enemies' bullets
    public static bool FireEnemyBullet(Vector3 position, Vector3 velocity)
    {
        GameObject bullet = mInstance.mInactive[0];

        bullet.transform.parent   = null;
        bullet.transform.position = position;
        if (bullet.transform.localScale.y > 0)
        {
            bullet.transform.localScale *= -1;
        }
        BulletMovement bm = bullet.GetComponent <BulletMovement>();

        bm.SetXVel(velocity.x);
        bullet.transform.localRotation = Quaternion.AngleAxis(-velocity.x, new Vector3(0, 0, 1));
        bm.SetYVel(velocity.y);
        bm.AssignToPlayer(false);
        bullet.SetActive(true);
        mInstance.mActive.Add(bullet);
        mInstance.mInactive.Remove(bullet);
        return(true);
    }
Пример #23
0
    void shootBulletFromEnemy()
    {
        if (!hp.isAlive)
        {
            return;
        }
        //enemy.destination = GameManager.Instance.player.transform.position;
        if (targetSighted)
        {
            GameObject instanceBullet = Instantiate(Bullet, Muzzle.transform.position, Quaternion.identity);
//			float distanceSpreadMultiplier = 50000f /(GameManager.Instance.player.transform.position - transform.position).sqrMagnitude;
            float distanceSpreadMultiplier = 2.5f / Mathf.Log((GameManager.Instance.player.transform.position - transform.position).sqrMagnitude);
            //Debug.Log (distanceSpreadMultiplier + "");
            instanceBullet.transform.rotation = Quaternion.Euler(Quaternion.LookRotation(GameManager.Instance.player.transform.position - transform.position).eulerAngles
                                                                 + new Vector3(Random.Range(-1f * distanceSpreadMultiplier, 1f * distanceSpreadMultiplier),
                                                                               Random.Range(-1f * distanceSpreadMultiplier, 1f * distanceSpreadMultiplier),
                                                                               Random.Range(-1f * distanceSpreadMultiplier, 1f * distanceSpreadMultiplier)));
            BulletMovement bulletScript = instanceBullet.GetComponent <BulletMovement> ();
            bulletScript.ShotSource = this.gameObject;
        }
    }
Пример #24
0
    public void Explode()
    {
        // Create the explosion
        if (null != m_goExplosionPrefab)
        {
            Instantiate(m_goExplosionPrefab, transform.position, Quaternion.identity);
        }
        SpriteToParticleSystem.ExplodeSprite(transform.position, Types.s_fVEL_PixelShatterVelocity, m_goPixelShatterPrefab, GetComponent <SpriteRenderer>().sprite, m_iPixelShatterTTL);

        // Play audio and add shake. Mines always add maxium shake...
        GameInstance gi = GameInstance.Object;

        gi.GetAudioManager().PlayAudioAtLocation(transform.position, m_iSFX_Explosion);
        gi.GetGameCamera().AddShake(1.0f);


        // Spawn the Spikes, if we have any
        {
            GameObject     go         = null;
            Vector3        vTraj      = Vector3.zero;
            BulletMovement gcMovement = null;

            float fAngle = m_fAngleOffsetRadians;
            for (int i = 0; i < m_iSpikeCount; ++i)
            {
                vTraj      = new Vector3(Mathf.Sin(fAngle), Mathf.Cos(fAngle), 0f);
                go         = Instantiate(m_goSpike, transform.position + (vTraj * m_fSpawnOffset), Quaternion.identity);
                gcMovement = go.GetComponent <BulletMovement>(); if (null != gcMovement)
                {
                    gcMovement.InitBullet(vTraj, Types.s_fVEL_MineSpikeMovementVelocity, false);
                }
                fAngle += (2 * Mathf.PI) / m_iSpikeCount;
            }
        }


        // And die...
        Destroy(gameObject);
    }
Пример #25
0
    void shoot()
    {
        for (int i = 0; i < targetArray.Length; i++)
        {
            GameObject bullet = shooterType == ShooterTypeEnum.FRIENDLY ? FriendlyBulletObjectPool.instance.getPooledObject()
                                                                        : EnemyBulletObjectPool.instance.getPooledObject();

            Vector3 launchOrigin = new Vector3(transform.position.x, bullet.transform.position.y, transform.position.z)
                                   + targetArray[i].normalized * GameConstants.gridSize / 2;

            if (bullet != null)
            {
                bullet.transform.position = launchOrigin;
                bullet.transform.rotation = transform.rotation;
            }
            else
            {
                bullet = (GameObject)Instantiate(bulletPrefab.gameObject, launchOrigin, transform.rotation);
            }
            BulletUtil.activateBullet(bullet);

            BulletMovement bulletMovementComponent = bullet.GetComponent <BulletMovement>();
            if (bulletMovementComponent != null)
            {
                bulletMovementComponent.setTarget(targetArray[i]);
                bulletMovementComponent.setVelocity(velocity);
                bulletMovementComponent.setType(shooterType);
            }

            BulletDamage bulletDamageComponent = bullet.GetComponent <BulletDamage>();
            if (bulletDamageComponent != null)
            {
                bulletDamageComponent.setDamage(damage);
            }
        }
    }
Пример #26
0
    /// <summary>
    /// Tracks the usage of the space bar and upon it being pressed, it creates a bullet
    /// that matches the player's given position and a velocity that is slightly faster
    /// It then adds that bullet to a list in the collision management class
    /// </summary>
    public void BulletSpawn()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            playerMovement = GetComponent <Movement>();
            bulletPosition = playerMovement.playerPosition;
            //Debug.Log("Player position: " + playerMovement.GetPosition());

            GameObject     bullet  = Instantiate(bulletPrefab, bulletPosition, Quaternion.identity);
            BulletMovement bScript = bullet.GetComponent <BulletMovement>();
            bScript.angleOfRotation = playerMovement.angleOfRotation;
            bScript.direction       = playerMovement.direction;
            bScript.velocity        = playerMovement.velocity + (playerMovement.velocity * 2);
            bScript.bulletPosition  = playerMovement.playerPosition;

            collisionManager.bullets.Add(bullet);

            // Debug.Log("Movement Velocity: " + movement.GetVelocity());

            // Debug.Log("Bullet velocity: " + velocity);
            //bScript.bulletPosition = new Vector3(bullet.transform.position.x, bullet.transform.position.y, 0);
            //Debug.Log("Bullet Position: " + bulletPosition);

            //direction = playerMovement.GetDirection();
            //velocity = playerMovement.GetVelocity();
            //angleOfRotation = playerMovement.GetAngleOfRotation();
            ////positions[bullets.Length] = bulletPosition;
            ////velocities[bullets.Length] = velocity;
            ////bullets[bullets.Length] = bullet;

            //// Debug.Log("Bullets :  " + bullets);
            //// Debug.Log("Velocities : " + velocities);
            //// Debug.Log("Positions : " + positions);
            //Debug.Log(bullets.Length);
        }
    }
 /// <summary>
 /// Awake is called when the script instance is being loaded.
 /// </summary>
 protected void Awake()
 {
     _bullet     = GetComponent <BulletProperty> ();
     _bulletMove = GetComponent <BulletMovement> ();
 }
Пример #28
0
    // Update is called once per frame
    void Update()
    {
        if (immunity == false) //Immunity is so that the player doesn't immediately die upon entering the game, and after each death can have something of a respawn timeframe
        {
            for (int i = 0; i < crabs.Count; i++)
            {
                //Debug.Log(crabs[i]);

                ///Collisions between crabs and the player
                if (detection.AABBCollision(crabs[i], player))
                {
                    eScript          = crabs[i].GetComponent <EnemyMovement>();
                    eScript.position = new Vector3(-200, -200, 0);
                    eScript.velocity = Vector3.zero;

                    sScript.playerPosition = Vector3.zero;

                    spawner.spawnedHazards--;
                    immunity = true;
                    gui.lives--;
                    isColliding = true;
                    break;
                }
                else
                {
                    playerRender.color = Color.white;
                    isColliding        = false;
                }
            }

            ///Collsions between bullets and crabs
            for (int i = 0; i < crabs.Count; i++)
            {
                for (int j = 0; j < bullets.Count; j++)
                {
                    if (detection.AABBCollision(crabs[i], bullets[j]))
                    {
                        eScript = crabs[i].GetComponent <EnemyMovement>();
                        bScript = bullets[j].GetComponent <BulletMovement>();

                        spawner.smallerPosition = eScript.position;
                        spawner.smallerVelocity = eScript.velocity;


                        eScript.position       = new Vector3(-200, -200, 0);
                        bScript.bulletPosition = new Vector3(200, 200, 0);
                        eScript.velocity       = Vector3.zero;
                        bScript.velocity       = Vector3.zero;

                        gui.points += 20;
                        spawner.spawnedHazards--;

                        isBulletColliding = true;
                        break;
                    }
                }
            }

            ///Collisions between smaller hazards and player
            for (int i = 0; i < smallHazards.Count; i++)
            {
                if (detection.AABBCollision(smallHazards[i], player))
                {
                    eScript          = smallHazards[i].GetComponent <EnemyMovement>();
                    eScript.position = new Vector3(-200, -200, 0);
                    eScript.velocity = Vector3.zero;

                    sScript.playerPosition = Vector3.zero;

                    immunity = true;
                    gui.lives--;
                    isColliding = true;
                    break;
                }
                else
                {
                    isColliding = false;
                }
            }

            ///Collisions between smaller hazards and bullets
            for (int i = 0; i < smallHazards.Count; i++)
            {
                for (int j = 0; j < bullets.Count; j++)
                {
                    if (detection.AABBCollision(smallHazards[i], bullets[j]))
                    {
                        eScript = smallHazards[i].GetComponent <EnemyMovement>();
                        bScript = bullets[j].GetComponent <BulletMovement>();

                        eScript.position       = new Vector3(-200, -200, 0);
                        bScript.bulletPosition = new Vector3(200, 200, 0);
                        eScript.velocity       = Vector3.zero;
                        bScript.velocity       = Vector3.zero;

                        gui.points += 50;

                        isBulletColliding = true;
                        break;
                    }
                }
            }
        }

        if (immunity == true)
        {
            playerRender.color = Color.magenta;
            timer++;
        }
        if (timer >= 40)
        {
            immunity = false;
            timer    = 0;
        }

        if (gui.lives <= 0) //If dead, move all of the enemies off the playing field so the player cannot get any more points/lose any more lives before the game closes itself
        {
            for (int i = 0; i < crabs.Count; i++)
            {
                eScript          = crabs[i].GetComponent <EnemyMovement>();
                eScript.position = new Vector3(-200, -20, 0);
                eScript.velocity = Vector3.zero;
            }
            for (int j = 0; j < smallHazards.Count; j++)
            {
                eScript          = smallHazards[j].GetComponent <EnemyMovement>();
                eScript.position = new Vector3(-200, -20, 0);
                eScript.velocity = Vector3.zero;
            }
        }
    }
Пример #29
0
    void Update()
    {
        if (DifficultyCurve.GameSpeed == 0.0f)
        {
            return;
        }
        // Update the position of each active bullet, keep a track of bullets which have gone off screen
        List <GameObject> oldBullets = new List <GameObject>();

        for (int count = 0; count < mActive.Count; count++)
        {
            Vector3        oldPosition = mActive[count].transform.position;
            Vector3        dispacement = new Vector3(0, 0, 0);
            BulletMovement bm          = mActive[count].GetComponent <BulletMovement>();
            dispacement.y += GameLogic.GameDeltaTime * bm.GetYVel();
            dispacement.x += GameLogic.GameDeltaTime * bm.GetXVel();
            mActive[count].transform.position = oldPosition + dispacement;


            RaycastHit2D hit = Physics2D.Raycast(oldPosition, dispacement, dispacement.magnitude, 1 << LayerMask.NameToLayer("Enemy"));
            //Use Raycast to make sure we are not missing any collision
            if (hit.collider != null && mActive[count].GetComponent <BulletMovement>().FromPlayer)
            {//Only the player's bullet will deal damage to enemies
                hit.collider.gameObject.GetComponent <EnemyBehaviour>().InflictDamage(PlayerCharacter.BulletDamage);
                mActive[count].SetActive(false);
                oldBullets.Add(mActive[count]);
            }

            else if (mActive[count].transform.position.y > GameLogic.ScreenHeight * 0.5f)
            {
                mActive[count].SetActive(false);
                oldBullets.Add(mActive[count]);
            }

            else if (mActive[count].transform.position.y < GameLogic.ScreenHeight * -0.5f)
            {
                mActive[count].SetActive(false);
                oldBullets.Add(mActive[count]);
            }
            else
            {
                Debug.DrawLine(oldPosition, oldPosition + dispacement, Color.red);
            }
        }

        for (int bullet = 0; bullet < mActive.Count; bullet++)
        {
            if (mActive[bullet].activeInHierarchy)
            {
                if (!mActive[bullet].GetComponent <BulletMovement>().FromPlayer)
                {
                    Vector3 diffToBullet = transform.parent.transform.position - mActive[bullet].transform.position;
                    if (diffToBullet.sqrMagnitude < GameObject.Find("Game").GetComponent <GameLogic>().BulletKillDistance)
                    {
                        // Touched Bullet
                        GameObject.Find("Game").GetComponent <GameLogic>().DamagePlayer(10);

                        mActive[bullet].SetActive(false);
                        oldBullets.Add(mActive[bullet]);
                    }
                }
            }
        }
        // Remove the bullets which have gone off screen, return them to the available list
        for (int count = 0; count < oldBullets.Count; count++)
        {
            oldBullets[count].transform.parent = transform;
            mActive.Remove(oldBullets[count]);
            mInactive.Add(oldBullets[count]);
        }

        if (mCharging > 0.0f)
        {
            mCharging -= GameLogic.GameDeltaTime;
        }
    }
Пример #30
0
    // Update is called once per frame
    void Update()
    {
        // Find enemies in scene
        this.shootCount           += Time.deltaTime;
        this.directionToggleCount += Time.deltaTime;

        if (this.directionToggleCount > this.directionToggleTime)
        {
            this.directionToggleCount = 0.0f;
            this.directionToggleTime  = Random.Range(this.minDirectionToggleTime, this.maxDirectionToggleTime);
            if (Random.Range(0.0f, 1.0f) > this.directionToggleProbability)
            {
                this.directionToggle = !this.directionToggle;
            }
        }

        if (this.FollowEnter && !this.isInShootPreparation)
        {
            var deltaPlayer = new Vector2(this.hero.transform.position.x - this.transform.position.x,
                                          this.hero.transform.position.y - this.transform.position.y);
            Vector3 tempVect = deltaPlayer.normalized * this.moveSpeed * Time.deltaTime;
            float   angle    = Mathf.Atan2(deltaPlayer.y, deltaPlayer.x) * Mathf.Rad2Deg;
            this.thisEnemyRigidBody.MoveRotation(angle);
            if (!this.StopEnter)
            {
                if (!this.StopEnterEnemy)
                {
                    this.thisEnemyRigidBody.MovePosition(this.transform.position + tempVect);
                }
                else
                {
                    if (this.enemyEntered != null)
                    {
                        tempVect = this.enemyEntered.transform.position - this.transform.position;
                        tempVect = tempVect.normalized * this.moveSpeed * this.sideSpeedMultiplier * Time.deltaTime;
                        tempVect = Quaternion.Euler(0.0f, 0.0f, 90.0f * (this.directionToggle?1.0f:-1.0f)) * tempVect;
                        this.thisEnemyRigidBody.MovePosition(this.transform.position + tempVect);
                    }
                }
            }
            else
            {
                tempVect = Quaternion.Euler(0.0f, 0.0f, 90.0f * (this.directionToggle?1.0f:-1.0f)) * tempVect * this.sideSpeedMultiplier;
                this.thisEnemyRigidBody.MovePosition(this.transform.position + tempVect);
            }
        }

        if (this.FireEnter && this.shootCount > this.shootDuration)
        {
            this.isInShootPreparation    = true;
            this.shootPreparationCounter = 0.0f;
        }


        if (this.shootPreparationCounter <= this.shootPreparationDuration * 0.5f &&
            this.shootPreparationCounter + Time.deltaTime > this.shootPreparationDuration * 0.5f)
        {
            var deltaPlayer = new Vector3(this.hero.transform.position.x - this.transform.position.x,
                                          this.hero.transform.position.y - this.transform.position.y,
                                          0.0f);
            var bullet = Instantiate(this.bulletPrefab);
            bullet.transform.position = this.bulletSpawnerPoint.transform.position;
            BulletMovement bulletMovementScript = bullet.GetComponent <BulletMovement>();
            bulletMovementScript.movementDirection = deltaPlayer;
        }

        if (this.shootPreparationCounter > this.shootPreparationDuration)
        {
            this.isInShootPreparation    = false;
            this.shootPreparationCounter = 0.0f;
        }

        if (this.isInShootPreparation)
        {
            this.shootPreparationCounter += Time.deltaTime;
        }

        if (this.shootCount > this.shootDuration)
        {
            this.shootCount = 0.0f;
        }
    }