protected void SomebodyShot(AGameObject sender, Vector2 direction) { sender.ShootVector = direction; sender.ShootVector.Normalize(); if (sender.Weapon != null) { if (sender.Weapon.IsReload(DateTime.Now.Ticks / 10000)) { var bullets = sender.Weapon.CreateBullets(direction); var player = sender as MainSkyShootService; if (player != null) { AGameBonus doubleDamage = player.GetBonus(AGameObject.EnumObjectType.DoubleDamage); float damage = doubleDamage == null ? 1f : doubleDamage.DamageFactor; player.Weapon.ApplyModifier(bullets, damage); } foreach (var bullet in bullets) { lock (_newObjects) { _newObjects.Add(bullet); PushEvent(new NewObjectEvent(bullet, _timeHelper.GetTime())); } } //Trace.WriteLine("projectile added", "GameSession"); } } }
public override IEnumerable <AGameEvent> Do(AGameObject obj, List <AGameObject> newObjects, long time) { // empty array var res = base.Do(obj, newObjects, time); if (obj.Is(EnumObjectType.Bonus)) { obj.IsActive = false; var bonus = new AGameBonus(); bonus.Copy(obj); return(AddBonus(bonus, time)); } return(res); }
protected IEnumerable <AGameEvent> MobDead(AGameObject mob, long time) { var events = new List <AGameEvent>(); //SomebodyDied(mob); //mob.MeMoved -= SomebodyMoved; if ((mob.Is(AGameObject.EnumObjectType.LivingObject)) && !mob.Is(AGameObject.EnumObjectType.Poisoning) && !mob.Is(AGameObject.EnumObjectType.Turret) && !mob.Is(AGameObject.EnumObjectType.Caterpillar)) { AGameBonus gameBonus = _bonusFactory.CreateBonus(mob.Coordinates); gameBonus.IsActive = true; events.AddRange(NewBonusDropped(gameBonus, time)); } if (mob.Is(AGameObject.EnumObjectType.Player)) { PlayerDead(mob as MainSkyShootService); } events.Add(new ObjectDeleted(mob.Id, _timeHelper.GetTime())); // will be delete later //_gameObjects.Remove(mob); return(events); }
private IEnumerable <AGameEvent> AddBonus(AGameBonus bonus, long time) { if (bonus.Is(EnumObjectType.Remedy)) { var health = HealthAmount; var potentialHealth = health + health * bonus.DamageFactor; HealthAmount = potentialHealth > MaxHealthAmount ? MaxHealthAmount : potentialHealth; AGameEvent gameEvent = new ObjectHealthChanged(HealthAmount, Id, time); return(new[] { new ObjectDeleted(bonus.Id, time), gameEvent }); } Bonuses.RemoveAll(b => b.ObjectType == bonus.ObjectType); Bonuses.Add(bonus); bonus.Taken(time); //t = new BonusesChanged(Id, time, MergeBonuses()); return(new AGameEvent[] { new ObjectDeleted(bonus.Id, time) //t }); }