예제 #1
0
        public override void Init(Game game)
        {
            Game = (RogueskivGame)game;

            BoardComp = Game.Entities.GetSingleComponent <BoardComp>();

            var player = Game
                         .Entities
                         .GetWithComponent <PlayerComp>()
                         .Single();

            PlayerId = player.Id;

            PlayerPosComp      = player.GetComponent <CurrentPositionComp>();
            PlayerHealthComp   = player.GetComponent <HealthComp>();
            PlayerMovementComp = player.GetComponent <MovementComp>();
        }
예제 #2
0
        private static List <(Point tilePos, int distance)> GetDistancesFrom(
            BoardComp boardComp, Point initialTile
            )
        {
            var currentDistance = 0;
            var visitingTiles   = new List <Point> {
                initialTile
            };
            var measuredTiles = new List <(Point tilePos, int distance)>()
            {
                (initialTile, currentDistance)
            };

            var pendingTiles = boardComp
                               .TileIdByTilePos
                               .Keys
                               .Where(tilePos => tilePos != initialTile)
                               .ToList();

            while (pendingTiles.Count > 0)
            {
                currentDistance++;

                visitingTiles = visitingTiles
                                .SelectMany(tilePos => NeighbourTilePositions
                                            .Select(neighbour => tilePos.Add(neighbour))
                                            )
                                .Distinct()
                                .Where(neighbourId => pendingTiles.Contains(neighbourId))
                                .ToList();

                measuredTiles.AddRange(
                    visitingTiles.Select(neighbourTilePos => (
                                             tilePos: neighbourTilePos,
                                             distance: currentDistance
                                             ))
                    );

                visitingTiles.ForEach(tilePos => pendingTiles.Remove(tilePos));
            }

            return(measuredTiles);
        }
예제 #3
0
 private List <IComponent> CreateEnemy(
     Range <float> enemySpeedRange,
     BoardComp boardComp,
     List <(Point tilePos, int distance)> tilePositionsAndDistances,
예제 #4
0
 public override void Init(Game game)
 {
     base.Init(game);
     FOVComp   = game.Entities.GetSingleComponent <FOVComp>();
     BoardComp = game.Entities.GetSingleComponent <BoardComp>();
 }
예제 #5
0
 public override void Init(Game game)
 {
     Game      = (RogueskivGame)game;
     BoardComp = game.Entities.GetSingleComponent <BoardComp>();
 }