Example #1
0
        /// <summary>
        /// This method handles behaviours for when an entity is being removed
        /// </summary>
        /// <param name="entity"></param>
        private void HandleRemovalBehaviour(Entity entity)
        {
            // If thie entity had an eplosiv
            var explosiveComponent = (ExplosiveComponent)entity.GetComponent(typeof(ExplosiveComponent));
            var transformComponent = (TransformComponent)entity.GetComponent(typeof(TransformComponent));

            // Spawn an explosion
            if (explosiveComponent != null)
            {
                var entitesToAdd = new List <Entity>();

                // They're returned in order of up, down, left, right
                var rectangles = DetonationHelper.GetBlastRadiusFrom(ServiceManager.Map.TmxMap, entity);
                var up         = Math.Ceiling((decimal)(rectangles[0].Height / 32));
                var down       = Math.Ceiling((decimal)(rectangles[1].Height / 32));
                var left       = Math.Ceiling((decimal)(rectangles[2].Width / 32));
                var right      = Math.Ceiling((decimal)(rectangles[3].Width / 32));

                // Do damage
                var list = DetonationHelper.GetDetonatedTiles(ServiceManager.Map.TmxMap, entity, rectangles);

                foreach (var tile in list)
                {
                    var location = new Vector2(tile.X * 32, tile.Y * 32);
                    var n        = EntityFactory.CreateBreakingBlock(location, "StandardBlock");
                    ServiceManager.AddEntity(n);
                }



                for (int i = 0; i < up - 2; i++)
                {
                    var x = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition - new Vector2(0, (i * 32 + 32)), ExplosiveType.Up);
                    entitesToAdd.Add(x);
                }

                for (int i = 0; i < down - 2; i++)
                {
                    var x = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition + new Vector2(0, (i * 32 + 32)), ExplosiveType.Down);
                    entitesToAdd.Add(x);
                }



                for (int i = 0; i < right - 2; i++)
                {
                    var x = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition + new Vector2((i * 32 + 32), 0), ExplosiveType.Right);
                    entitesToAdd.Add(x);
                }



                for (int i = 0; i < left - 2; i++)
                {
                    var x = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition - new Vector2((i * 32 + 32), 0), ExplosiveType.Left);
                    entitesToAdd.Add(x);
                }



                Entity topEdge = null;
                if (up != 1)
                {
                    topEdge = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition - new Vector2(0, (float)(up * 32) - 32), ExplosiveType.UpE);
                }



                Entity bottomEdge = null;
                if (down != 1)
                {
                    bottomEdge = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition + new Vector2(0, (float)(down * 32) - 32), ExplosiveType.DownE);
                }

                Entity leftEdge = null;

                if (left != 1)
                {
                    leftEdge = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition - new Vector2((float)(left * 32) - 32, 0), ExplosiveType.LeftE);
                }

                Entity rightEdge = null;
                if (right != 1)
                {
                    rightEdge = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition + new Vector2((float)(right * 32) - 32, 0), ExplosiveType.RightE);
                }

                if (topEdge != null)
                {
                    entitesToAdd.Add(topEdge);
                }


                if (bottomEdge != null)
                {
                    entitesToAdd.Add(bottomEdge);
                }

                if (leftEdge != null)
                {
                    entitesToAdd.Add(leftEdge);
                }

                if (rightEdge != null)
                {
                    entitesToAdd.Add(rightEdge);
                }

                var y = EntityFactory.CreateExplosionSprite(transformComponent.LocalPosition, ExplosiveType.Center);
                entitesToAdd.Add(y);


                foreach (var add in entitesToAdd)
                {
                    ServiceManager.AddEntity(add);
                }
            }
        }
Example #2
0
        public override void Update(double deltaTime)
        {
            if (_lastPowerupTime - _spawnTime > _spawnTime)
            {
                // Reset
                _lastPowerupTime = _spawnTime;

                _spawnTime = 15f;

                // Get a random object
                var rand = new Random();
                var key  = rand.Next(0, 5);

                var x = rand.Next(0, 22);
                var y = rand.Next(0, 22);

                while (MapUtility.IsSolid(ServiceManager.Map, x, y))
                {
                    x = rand.Next(0, 22);
                    y = rand.Next(0, 22);
                }

                var location = new Vector2(x * 32, y * 32);

                switch (key)
                {
                // Gas Flask
                case 0:
                    var xx = EntityFactory.CreateRangeModifierPowerupPackage(location);
                    ServiceManager.AddEntity(xx);
                    break;

                // Ultra Flask
                case 1:
                    var yy = EntityFactory.CreateRangeModifierMaxPowerupPackage(location);
                    ServiceManager.AddEntity(yy);
                    break;

                // Extra Bomb
                case 2:
                    var z = EntityFactory.CreateBombCountUpPackage(location);
                    ServiceManager.AddEntity(z);
                    break;

                // Bomb Bag
                case 3:
                    var t = EntityFactory.CreateBombCountMaxPackage(location);
                    ServiceManager.AddEntity(t);
                    break;

                // Hermes Shoes
                case 4:
                    var m = EntityFactory.CreateMovementModifierPackage(location);
                    ServiceManager.AddEntity(m);
                    break;

                default:
                    throw new Exception("Attempted to create a powerup that was not handled - possible poweurp was inherited but not handled in PowerupService!");
                }
            }

            _lastPowerupTime += deltaTime;
        }
Example #3
0
 /// <summary>
 /// Responsible for recieving and piping entities into the game network.
 /// </summary>
 /// <param name="entityAddPacket"></param>
 private void HandleEntityAdd(EntityAddPacket entityAddPacket)
 {
     ServiceManager.AddEntity(entityAddPacket.Entity);
 }