コード例 #1
0
ファイル: ArenaBuilder.cs プロジェクト: MoyTW/7DRL2017
        private static ArenaState BuildArena(int width, int height, string mapID, IEnumerable <Entity> entities, int level)
        {
            if (!seedsToMaps.ContainsKey(mapID))
            {
                var map = Map.Create(new RogueSharp.MapCreation.RandomRoomsMapCreationStrategy <Map>(width, height,
                                                                                                     2000, 9, 5, new DotNetRandom(Int32.Parse(mapID))));
                var pathFinder = new PathFinder(map);
                seedsToMaps[mapID] = new Tuple <IMap, PathFinder>(map, pathFinder);
            }

            var mapEntities = new List <Entity>();

            foreach (var e in entities)
            {
                mapEntities.Add(e.DeepCopy());
            }
            ArenaState arena = new ArenaState(mapEntities, mapID, seedsToMaps[mapID].Item1, seedsToMaps[mapID].Item2, level);

            var openCells     = arena.ArenaMap.GetAllCells().Where(c => c.IsWalkable).ToList();
            var placementRand = new DotNetRandom(Int32.Parse(mapID));

            foreach (var e in mapEntities)
            {
                while (!e.HasComponentOfType <Component_Position>())
                {
                    var cell = openCells[placementRand.Next(openCells.Count - 1)];

                    Component_AI ai = e.GetComponentOfType <Component_AI>();
                    if (ai != null && !ArenaBuilder.InScanRangeOfPlayer(arena.Player, e, cell))
                    {
                        arena.PlaceEntityNear(e, cell.X, cell.Y);
                        ai.DeterminePatrolPath(arena, placementRand);
                    }
                    else if (ai == null)
                    {
                        arena.PlaceEntityNear(e, cell.X, cell.Y);
                    }
                }
            }

            return(arena);
        }
コード例 #2
0
ファイル: ArenaBuilder.cs プロジェクト: MoyTW/7DRL2017
        public static ArenaState BuildArena(int width, int height, string mapID, Entity player, int level)
        {
            var           distributions = ArenaBuilder.levelDefinitions[level];
            List <Entity> mapEntities   = new List <Entity>()
            {
                player
            };
            var placementRand = new DotNetRandom(Int32.Parse(mapID));
            int d             = 0;

            foreach (var dist in distributions)
            {
                var numToAdd = placementRand.Next(dist.Min, dist.Max);
                for (int i = 0; i < numToAdd; i++)
                {
                    mapEntities.Add(EntityBuilderEnemies.BuildRandomLevelledEntity(placementRand, d.ToString(), dist.EntityLevel));
                    d++;
                }
            }
            return(ArenaBuilder.BuildArena(width, height, mapID, mapEntities, level));
        }