Ejemplo n.º 1
0
        private void Shoot(Message msg)
        {
            if (_shooted)
            {
                return;
            }

            _shooted = true;

            if (_weaponData.MagazineBulletAmount > 0)
            {
                --_weaponData.MagazineBulletAmount;

                //ToDo: replace to server
                var id = 1000 * _weaponData.OwnerNetId + BulletsFactory.GetNextBulletId();

                MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_PROJECTILE, UnityEngine.Networking.QosType.Reliable, -1,
                                                               ProjectileMessageData.GetProjectileMessageData(
                                                                   id,
                                                                   _weaponData.OwnerNetId,
                                                                   _weaponData.ShootPosition.position,
                                                                   _weaponData.ShootPosition.rotation,
                                                                   _weaponData.WeaponConfig.bulletType,
                                                                   _weaponData.WeaponConfig.bulletStartSpeed,
                                                                   _weaponData.WeaponConfig.damageFactor)));

                MessageBus.SendMessage(SubscribeType.Channel, Channel.ChannelIds[SubscribeType.Channel],
                                       CommonMessage.Get(API.Messages.FIRING));
            }
            else
            {
                _weaponData.NoBulletsInMagazine();
            }
        }
Ejemplo n.º 2
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        BaseAvatar avatar = null;

        switch (this.type)
        {
        case BulletType.PlayerSpiralBullet:
        case BulletType.PlayerBullet:
            avatar = other.gameObject.GetComponent <EnemyAvatar>();
            break;

        case BulletType.EnemyBullet:
            avatar = other.gameObject.GetComponent <PlayerAvatar>();
            break;

        default:
            Debug.LogError("Unknown bullet type " + this.type);
            break;
        }

        if (avatar != null)
        {
            avatar.TakeDamage(this.Damage);
            BulletsFactory.ReleaseBullet(this);
        }
    }
Ejemplo n.º 3
0
        internal State EnableBossMode(Boss boss, bool bossHasInstance, GameDatabase db, State gameState, GameTime gameTime)
        {
            State state = gameState;

            boss            = Boss.Instance;
            bossHasInstance = true;

            if (bossHasInstance)
            {
                CollisionHandler.CheckBossBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll());
                CollisionHandler.CheckPlayerBulletsCollisions(new List <IGameObject>()
                {
                    boss
                }, db.Bullets.GetAll(),
                                                              db.Players.GetAll(), db.Explosions.GetAll());

                BulletsFactory.BossShoot(db.Bullets, boss);

                boss.Update(gameTime);

                if (!boss.IsVisible)
                {
                    state = State.Winning;
                }
            }
            return(state);
        }
Ejemplo n.º 4
0
        private void Shoot(Message msg)
        {
            if (_kdTimer <= 0)
            {
                if (_weaponData.MagazineBulletAmount > 0)
                {
                    --_weaponData.MagazineBulletAmount;

                    _kdTimer = _weaponData.WeaponConfig.shootKd;

                    //ToDo: replace to server
                    var id = 1000 * Channel.ChannelIds[SubscribeType.Channel] + BulletsFactory.GetNextBulletId();

                    //MessageBus.SendMessage(Message.GetMessage(Messages.CREATE_PROJECTILE,
                    //    ProjectileMessageData.GetProjectileMessageData(
                    //        id,
                    //        0,
                    //        _weaponData.ShootPosition.position,
                    //        _weaponData.ShootPosition.rotation,
                    //        _weaponData.WeaponConfig.bulletType,
                    //        _weaponData.WeaponConfig.bulletStartSpeed,
                    //        _weaponData.WeaponConfig.damageFactor)));

                    //MessageBus.SendMessage(SubscribeType.Channel, Channel.ChannelIds[SubscribeType.Channel],
                    //    Message.GetMessage(API.Messages.FIRING));
                }
                else
                {
                    _weaponData.NoBulletsInMagazine();
                }
            }
        }
Ejemplo n.º 5
0
 private void Awake()
 {
     base.Awake();
     Collider          = GetComponentInChildren <Collider>();
     _bulletsFactory   = GetComponentInChildren <BulletsFactory>();
     ConfigurableJoint = GetComponent <ConfigurableJoint>();
 }
Ejemplo n.º 6
0
    private void Update()
    {
        this.UpdatePosition();

        // Very simple test if out of bound bullet.
        if (this.Position.x > 20 || this.Position.x < -20 || this.Position.y > 20 || this.Position.y < -20)
        {
            BulletsFactory.ReleaseBullet(this);
        }
    }
Ejemplo n.º 7
0
        public void PlayerShoot(IRepository <IBullet> bullets, IRepository <IPlayer> players, int playerId)
        {
            KeyboardState keyState = Keyboard.GetState();

            // Player shooting
            if ((keyState.IsKeyDown(Keys.RightControl) && playerId == 2) ||
                (keyState.IsKeyDown(Keys.LeftControl) && playerId == 1))
            {
                //this.Shoot();
                BulletsFactory.PlayerShoot(bullets, players, playerId);
            }
        }
Ejemplo n.º 8
0
    IEnumerator FireRoutine()
    {
        while (true)
        {
            if (volleyTimer < 0 && !(pattern.targetPlayer && player.isInvisible))
            {
                volleyTimer = pattern.volleyInterval;
                float angleOffset   = pattern.angleStart;
                float angleIncrease = pattern.angleBetweenBullets;

                EventDispatcher.DispatchEvent(Events.BULLET_VOLLEY_FIRED, this);
                if (OnFire != null)
                {
                    OnFire();
                }

                if (muzzleFlash != null)  //TODO maybe not here
                {
                    StartCoroutine(MuzzleFlash());
                }

                for (int i = 0; i < pattern.bulletsNb; i++)
                {
                    float   randAngle = Random.Range(pattern.angleRandomMin, pattern.angleRandomMax);
                    Vector3 dir       = pattern.targetPlayer ? playerPos.position - origin.position : origin.up;
                    dir = Quaternion.Euler(0, 0, angleOffset + randAngle) * dir;

                    BulletsFactory.SpawnBullet(bulletStats, origin.position, dir.normalized);

                    if (pattern.delayBetweenBullets > 0)
                    {
                        float timer = pattern.delayBetweenBullets;
                        while (timer >= 0)
                        {
                            yield return(null);

                            timer -= Time.deltaTime * fireSpeed;
                        }
                    }

                    if (angleOffset > pattern.angleMax || angleOffset < pattern.angleMin)
                    {
                        angleIncrease *= pattern.angleMultiplierAtMax;
                    }

                    angleOffset += angleIncrease;
                }
            }

            volleyTimer -= Time.deltaTime * fireSpeed;
            yield return(null);
        }
    }
Ejemplo n.º 9
0
    IEnumerator Die()
    {
        _rigidbody.simulated = false;

        if (impactSprite != null)
        {
            Sprite normalSprite = _renderer.sprite;
            _renderer.sprite = impactSprite;
            yield return(new WaitForSeconds(0.05f));

            _renderer.sprite = normalSprite;
        }

        gameObject.SetActive(false);
        BulletsFactory.BulletDeath(prefab, this);
    }
Ejemplo n.º 10
0
    protected virtual void Fire()
    {
        if (this.baseAvatar != null)
        {
            this.baseAvatar.Energy -= this.EnergyConsumedPerBullet;
        }

        this.lastFireTime = Time.time;

        for (int index = 0; index < this.canonDescriptions.Length; index++)
        {
            float   bulletSpawnAngle = this.GetBulletSpawnAngle(index);
            Vector2 direction        = new Vector2(Mathf.Cos(bulletSpawnAngle), Mathf.Sin(bulletSpawnAngle));

            // Fire a bullet !
            Bullet bullet = BulletsFactory.GetBullet(this.GetBulletSpawnPosition(index), this.BulletType);
            bullet.Initialize(direction, this.BulletSpeed, this.BulletDamage);
        }
    }
Ejemplo n.º 11
0
        internal State Play(GameDatabase db, State gameState, Boss boss, bool bossHasInstance,
                            StatsManager statsManager, GameTime gameTime, Random random)
        {
            State state = gameState;

            if (db.Players.GetAll().Any(s => s.Score >= 10000))
            {
                state = this.EnableBossMode(boss, bossHasInstance,
                                            db, gameState, gameTime);
            }
            else
            {
                for (int i = 0; i < db.Enemies.GetCount(); i++)
                {
                    BulletsFactory.EnemyShoot(db.Bullets, db.Enemies.GetAll()[i]);
                }

                //Creating entities
                EnemyFactory.CreateEnemies(db.Enemies, random);
                AsteroidFactory.CreateAsteroids(db.Asteroids, random);

                ItemFactory.CreateItems(db.Items, db.Enemies.GetAll().Cast <IGameObject>().ToList(), random);
                ItemFactory.CreateItems(db.Items, db.Asteroids.GetAll().Cast <IGameObject>().ToList(), random);

                // Handle collisions between players and enemy objects
                CollisionHandler.CheckForCollision(db.Asteroids.GetAll().Cast <IGameObject>().ToList(), db.Players.GetAll(), db.Explosions.GetAll());
                CollisionHandler.CheckForCollision(db.Enemies.GetAll().Cast <IGameObject>().ToList(), db.Players.GetAll(), db.Explosions.GetAll());

                // Handle collisions between players and enemy items
                CollisionHandler.CheckPlayerItemCollisions(db.Items.GetAll(), db.Players.GetAll());

                ExplosionFactory.CreateExplosion(db.Explosions, db.Enemies.GetAll().Cast <IGameObject>().ToList());
                ExplosionFactory.CreateExplosion(db.Explosions, db.Asteroids.GetAll().Cast <IGameObject>().ToList());

                //Updating entities
                db.Enemies.GetAll().ForEach(e => e.Update(gameTime));
                db.Asteroids.GetAll().ForEach(a => a.Update(gameTime));
                db.Items.GetAll().ForEach(i => i.Update(gameTime));

                // Cleaning with mr.Proper
                EntityCleanerHandler.ClearEnemies(db.Enemies);
                EntityCleanerHandler.ClearAsteroids(db.Asteroids);
                EntityCleanerHandler.ClearExplosion(db.Explosions);
                EntityCleanerHandler.ClearPlayers(db.Players);
            }

            //Update
            db.Bullets.GetAll().ForEach(b => b.Update(gameTime));
            db.Explosions.GetAll().ForEach(e => e.Update(gameTime));

            statsManager.UpdatePlayersStats(db.Players.GetAll());

            //Handle collisions between bullets and gameobjects
            CollisionHandler.CheckPlayerBulletsCollisions(db.Enemies.GetAll().Cast <IGameObject>().ToList(), db.Bullets.GetAll(), db.Players.GetAll(), db.Explosions.GetAll());
            CollisionHandler.CheckPlayerBulletsCollisions(db.Asteroids.GetAll().Cast <IGameObject>().ToList(), db.Bullets.GetAll(), db.Players.GetAll(), db.Explosions.GetAll());
            CollisionHandler.CheckEnemiesBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll());

            EntityCleanerHandler.ClearBullets(db.Bullets);

            return(state);
        }