/// <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); } } }
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; }
/// <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); }