Exemple #1
0
        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);
        }
Exemple #3
0
        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
     });
 }