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(); } }
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); } }
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); }
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(); } } }
private void Awake() { base.Awake(); Collider = GetComponentInChildren <Collider>(); _bulletsFactory = GetComponentInChildren <BulletsFactory>(); ConfigurableJoint = GetComponent <ConfigurableJoint>(); }
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); } }
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); } }
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); } }
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); }
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); } }
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); }