コード例 #1
0
        public override DungeonLevel Generate(int levelIndex, Dungeons.GenerationInfo info = null, LayouterOptions opt = null)
        {
            var revealAllNodes = info != null ? info.RevealAllNodes : false;

            if (info is Roguelike.Generators.GenerationInfo rgi && MaxLevelIndex == 0)
            {
                MaxLevelIndex = rgi.MaxLevelIndex;
            }
            this.diff = Roguelike.Generators.GenerationInfo.Difficulty;
            var options = opt ?? new LayouterOptions()
            {
                RevealAllNodes = revealAllNodes
            };

            LevelIndex = levelIndex;
            //generate level
            var baseLevel = base.Generate(levelIndex, info, options);
            var level     = baseLevel as Roguelike.TileContainers.GameLevel;

            level.Index = levelIndex;
            OnLevelGenerated(level);

            // PopulateDungeonLevel(level);
            return(level);
        }
コード例 #2
0
        public TileContainers.GameLevel GenerateLevel(int levelIndex, Dungeons.GenerationInfo gi = null, bool canSetActive = true)
        {
            TileContainers.GameLevel level = null;
            if (LevelGenerator != null)
            {
                if (LevelGenerator.MaxLevelIndex > 0 && levelIndex > LevelGenerator.MaxLevelIndex)
                {
                    throw new Exception("levelIndex > LevelGenerator.MaxLevelIndex");
                }
                LevelGenerator.LevelIndex = levelIndex;

                var generInfo = gi;
                if (generInfo == null)
                {
                    generInfo = new Generators.GenerationInfo();
                    //(generInfo as Roguelike.Generators.GenerationInfo).MaxLevelIndex = LevelGenerator.LevelIndex;
                }

                level = LevelGenerator.Generate(levelIndex, generInfo) as TileContainers.GameLevel;

                var merch = this.Container.GetInstance <Merchant>();
                level.SetTileAtRandomPosition(merch);

                this.levels.Add(level);
            }

            if (canSetActive && levelIndex == 0)
            {
                GameManager.SetContext(level, AddHero(level), GameContextSwitchKind.NewGame);
            }

            return(level);
        }
コード例 #3
0
        public override List <DungeonNode> CreateDungeonNodes(Dungeons.GenerationInfo info = null)
        {
            stairsUp = null;
            var mazeNodes = base.CreateDungeonNodes(info);

            CreateDynamicTiles(mazeNodes);

            return(mazeNodes);
        }
コード例 #4
0
 protected override void OnCreate(DungeonNode dungeon, int w, int h, Dungeons.GenerationInfo gi, int nodeIndex)
 {
     dungeon.Create(w, h, gi, nodeIndex);
 }
コード例 #5
0
        protected virtual void GenerateRoomContent(int nodeIndex, Dungeons.GenerationInfo gi, DungeonNode node)
        {
            var roomGen = Container.GetInstance <RoomContentGenerator>();

            roomGen.Run(node, LevelIndex, nodeIndex, 0, gi as GenerationInfo);
        }
コード例 #6
0
        protected override Dungeons.TileContainers.DungeonNode CreateNode(int nodeIndex, Dungeons.GenerationInfo gi)
        {
            var node = base.CreateNode(nodeIndex, gi);

            if (!node.Created)
            {
                return(node);
            }

            if ((LevelIndex > 0 || StairsUpOnLevel0) &&
                (!node.Secret && stairsUp == null))
            {
                AddStairsUp(node);
            }

            GenerateRoomContent(nodeIndex, gi, node);

            var  barrels = node.GetTiles <Barrel>();
            bool zero1   = barrels.Any(i => i.Level <= 0);
            bool zero2   = node.GetTiles <Chest>().Any(i => i.Level <= 0);

            Debug.Assert(!zero1 && !zero2);
            return(node);
        }