public GameCommandMakeDamage(long id,
                              IMechanicEngine mechanicEngine,
                              ActiveBody activeBody,
                              int damage) :
     base(mechanicEngine, activeBody)
 {
     Id     = id;
     Damage = damage;
 }
Example #2
0
        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);
        }
Example #3
0
        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;
            }));
        }
Example #4
0
        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));
 }
Example #6
0
 public GameCommand(IMechanicEngine mechanicEngine, ActiveBody activeBody)
 {
     _mechanigEngine = mechanicEngine;
     ActiveBody      = activeBody;
 }
Example #7
0
        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;
 }