public GameCommandMakeDamage(long id, IMechanicEngine mechanicEngine, ActiveBody activeBody, int damage) : base(mechanicEngine, activeBody) { Id = id; Damage = damage; }
public IEnumerable <Body> GetSurrounBodies(ActiveBody body, int deviation, Func <IMapTile, IList <Body> > bodySelector) { List <Body> result = new List <Body>(); IMapTile mapTile; if (_bodiesToTilesCollection.TryGetValue(body.Id, out mapTile)) { var surroundTiles = GetSurroundTiles(mapTile, 1); foreach (var tile in surroundTiles) { result.AddRange(bodySelector(tile)); } } return(result); }
public IEnumerable <Body> GetBodiesForCollision(ActiveBody body) { return(GetSurrounBodies(body, 1, (tile) => { List <Body> resultBodies = new List <Body>(); //Add active bodies foreach (var tileBody in tile.Bodies.Where(v => v.Value != body).Select(v => v).ToList()) { resultBodies.Add(tileBody.Value); } //add tile if solid if (tile.Solid != TileSolidityType.NotSolid) { resultBodies.Add(new PassiveBody(tile.Shape)); } return resultBodies; })); }
public void UpdateActiveBody(ActiveBody body) { IMapTile mapTile; var bodyToRemove = body as Body; if (_bodiesToTilesCollection.TryGetValue(body.Id, out mapTile)) { if (mapTile.Bodies.TryRemove(body.Id, out bodyToRemove)) { var bodyTile = CalculateBodyTile(body); if (bodyTile.Bodies.TryAdd(body.Id, body)) { _bodiesToTilesCollection.AddOrUpdate(body.Id, bodyTile, (k, v) => { return(bodyTile); }); } } } }
public bool Use(ActiveBody consumerBody) { return(((CharacterBody)consumerBody).AddWeapon(this)); }
public GameCommand(IMechanicEngine mechanicEngine, ActiveBody activeBody) { _mechanigEngine = mechanicEngine; ActiveBody = activeBody; }
private void ApplyDamageToActiveBody(IMechanicEngine mechanicEngine, CharacterBody bulletOwnerBody, ActiveBody collidedActiveBody, int damage) { collidedActiveBody.Harm(damage); //Kill collided active body if needed if (collidedActiveBody.Life <= 0) { mechanicEngine.ReleaseBody(collidedActiveBody.Id); //Increase score of bullet owner if (bulletOwnerBody != null) { bulletOwnerBody.UpdateScore(collidedActiveBody.LifeMax); } } }
public GameCommandMove(long id, Vector direction, IMechanicEngine mechanicEngine, ActiveBody activeBody, TimeSpan duration) : base(mechanicEngine, activeBody) { Direction = direction; Duration = duration; Id = id; }
public GameCommandChangeDirection(long id, Vector direction, IMechanicEngine mechanicEngine, ActiveBody activeBody) : base(mechanicEngine, activeBody) { Id = id; Direction = direction; }