Example #1
0
 public Backend(Connector con)
 {
     this.connector = con;
     players        = new List <Player>();
     dragons        = new List <Dragon>();
     pathwalker     = new Pathwalker(this);
 }
        public List <Entity> GetBuildingsWithinWalkableDistance <T>(uint startID, int distance)
        {
            List <Entity> entitiesWithinRange = new List <Entity>();
            Entity        startEntity         = Entities.Get(startID);

            if (startEntity == null)
            {
                return(entitiesWithinRange);
            }

            List <Point> exits = GetValidExitsFromFoundation(startEntity);

            foreach (Point exit in exits)
            {
                // walk the "road path" until distance is reached
                List <Point> roads = Pathwalker.GetRoadsWithinDistance(Roads, exit, distance);

                foreach (Point road in roads)
                {
                    for (int x = -1; x < 2; x++)
                    {
                        for (int y = -1; y < 2; y++)
                        {
                            if (Math.Abs(x) == Math.Abs(y))
                            {
                                continue;
                            }

                            // check ortho for foundations
                            Point p = new Point(road.X + x, road.Y + y);

                            if (Foundations.SpaceTaken.ContainsKey(p))
                            {
                                Entity e = Entities.Get(Foundations.SpaceTaken[p]);
                                if (e != null && e.HasComponent <T>() && !entitiesWithinRange.Contains(e))
                                {
                                    entitiesWithinRange.Add(e);
                                }
                            }
                        }
                    }
                }
            }

            return(entitiesWithinRange);
        }