Ejemplo n.º 1
0
        // temp from mobile
        public void LoadNextMap()
        {
            Cords c    = activeMap.Position;
            Cords newC = new Cords(c.x + 1, c.y);

            bool onlyReload = true;

            if (!maps.ContainsKey(newC))
            {
                GenerateNextLevel(1);
                onlyReload = false;
            }

            SetActiveLevel(newC.x, newC.y, onlyReload);

            // unlock child levels
            LevelTree currentNode = null;

            foreach (LevelTree t in mapTree.GetAllNodes())
            {
                if (activeMap.levelData.Equals(t.levelData))
                {
                    currentNode = t;
                    break;
                }
            }

            foreach (LevelTree ch in currentNode.Childs)
            {
                ch.Unlocked = true;
            }
        }
Ejemplo n.º 2
0
        public void GenerateAndOpenLevel(LevelTree levelNode)
        {
            LevelParams param = levelNode.LevelParams;

            // map hasnt been generated yet
            if (!maps.ContainsKey(new Cords(levelNode.Id, 0)))
            {
                MapHolder newMap = new MapHolder(this, levelNode.Name, new Cords(levelNode.Id, 0), param.levelType, width, height, param, levelNode.LevelReward);

                newMap.CreateMap();
                maps.Add(new Cords(levelNode.Id, 0), newMap);

                levelNode.levelData = newMap.levelData;
            }

            foreach (LevelTree n in mapTree.GetAllNodes())
            {
                n.CurrentlyActive = false;
            }

            levelNode.CurrentlyActive = true;
            levelNode.Unlocked        = true;

            SetActiveLevel(levelNode.Id, 0, false);
        }
Ejemplo n.º 3
0
        public LevelTree CreateRandomExtraNodeLevel(int id, int depth)
        {
            LevelParams param      = new LevelParams(MapType.GenericMonster);        //TODO new types
            int         difficulty = LevelTree.DIFF_MEDIUM;

            if (worldLevel == 1)             // medium or easy levels
            {
                int rnd = Random.Range(0, 100);
                if (rnd < 50)
                {
                    difficulty = LevelTree.DIFF_EASY;
                }
            }
            else             // also hard levels possible - TODO
            {
                int rnd = Random.Range(0, 100);
                if (rnd < 50)
                {
                    difficulty = LevelTree.DIFF_EASY;
                }
                else if (rnd < 80)
                {
                    difficulty = LevelTree.DIFF_HARD;
                }
            }

            param.difficulty = difficulty;

            LevelTree newNode = new LevelTree(LevelTree.LEVEL_EXTRA, id, difficulty, depth, param, "Extra Level " + id, "This level is filled with random monsters.");

            switch (difficulty)
            {
            case 1:
                //newNode.AddLevelRewardRandom(66, ItemType.STAT_UPGRADE, 1, 1);
                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 100);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 100);
                break;

            case 2:
                //newNode.AddLevelRewardRandom(100, ItemType.STAT_UPGRADE, 1, 1);
                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 100);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 100);
                break;

            case 3:
                //newNode.AddLevelRewardRandom(100, ItemType.STAT_UPGRADE, 1, 1);
                //newNode.AddLevelRewardRandom(100, ItemType.CLASSIC_UPGRADE, 1, 1);
                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 250);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 250);
                break;
            }

            return(newNode);
        }
Ejemplo n.º 4
0
        public Cords GenerateNextLevel(int teleporterType)
        {
            Cords old      = activeMap.Position;
            Cords newCords = new Cords(old.x + 1, old.y);

            int newId = newCords.x;

            LevelTree nextNode = mapTree.GetNode(newId);

            if (nextNode == null)
            {
                WorldHolder.instance.GoToNextWorld();
            }

            GenerateAndOpenLevel(nextNode);

            /*int level = old.x + 2;
             * if (skipTutorial)
             * {
             *      level += 5;
             *      Debug.Log("skipping tutorial..");
             * }
             *
             * MapType type = MapType.LevelOne;
             * int mapLevel = 1;
             * LevelParams param = new LevelParams(MapType.LevelOne);
             *
             * switch (level)
             * {
             *      case 2: // tutorial
             *              type = MapType.LevelTwo;
             *              break;
             *      case 3: // tutorial
             *              type = MapType.LevelThree;
             *              break;
             *      case 4: // tutorial
             *              type = MapType.LevelFour;
             *              break;
             *      case 5: // tutorial
             *              type = MapType.LevelFive;
             *              break;
             *      default:
             *              type = GetNextLevelType(level-5, ref mapLevel, param);
             *              break;
             * }
             *
             * MapHolder newMap = new MapHolder(this, "Level " + (newCords.x+1), newCords, type, 100, 50, param, mapLevel);
             * newMap.CreateMap();
             *
             * maps.Add(newCords, newMap);*/
            return(newCords);
        }
Ejemplo n.º 5
0
        public bool CanSelectLevel(LevelTree node)
        {
            if (node.Unlocked == false && !GameSession.enableAllLevels)
            {
                return(false);
            }

            if (node.CurrentlyActive)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 6
0
        public bool OnLevelSelect(PlayerData data, LevelTree node)
        {
            Debug.Log("selected " + node.Name + "" + node.Depth);

            if (!CanSelectLevel(node))
            {
                return(false);
            }

            activeMap.OnTeleportOut(data.player);

            GenerateAndOpenLevel(node);

            // teleport player to new start
            data.transform.position = GetStartPosition();

            activeMap.OnTeleportIn(data.player);

            return(true);
        }
Ejemplo n.º 7
0
        public LevelTree CreateRandomMainNodeLevel(int id, int depth, bool addShop, int difficulty)
        {
            LevelParams param = new LevelParams(MapType.GenericMonster);

            param.difficulty = difficulty;

            /*if (addShop) // already added to the first level
             * {
             *      param.shop = new ShopData();
             *      param.shop.GenerateRandomShopItems(worldLevel, 2);
             * }*/

            LevelTree newNode = new LevelTree(LevelTree.LEVEL_MAIN, id, difficulty, depth, param, "Level " + id, "This level is filled with random monsters.");

            switch (difficulty)
            {
            case 1:
                //newNode.AddLevelRewardRandom(100, ItemType.STAT_UPGRADE, 1, 1);

                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 100);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 100);
                break;

            case 2:
                //newNode.AddLevelRewardRandom(100, ItemType.STAT_UPGRADE, 1, 1);

                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 100);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 100);
                break;

            case 3:
                //newNode.AddLevelRewardRandom(100, ItemType.STAT_UPGRADE, 1, 1);

                newNode.AddLevelReward(typeof(DnaItem), 100, 3, 250);
                newNode.AddLevelReward(typeof(XpItem), 100, 4, 250);
                break;
            }

            return(newNode);
        }
Ejemplo n.º 8
0
        public void OnLevelFinished()
        {
            LevelTree currentNode = null;

            foreach (LevelTree t in mapTree.GetAllNodes())
            {
                if (activeMap.levelData.Equals(t.levelData))
                {
                    currentNode = t;
                    break;
                }
            }

            foreach (LevelTree ch in currentNode.Childs)
            {
                ch.Unlocked = true;
            }

            if (currentNode.IsLastNode)
            {
                GoToNextWorld();
            }
        }
Ejemplo n.º 9
0
        private void GenerateWorldLevels()
        {
            int         id    = 0;
            LevelParams param = new LevelParams(MapType.LevelOne);

            param.worldLevel = worldLevel;

            if (GameSession.testMode)
            {
                param.levelType = MapType.PresentationLevel;
                mapTree         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_MEDIUM, 0, param, "Start level", "Unknown");
            }
            else if (GameSession.arenaMode)
            {
                param.levelType = MapType.Arena;
                mapTree         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_MEDIUM, 0, param, "Start level", "Unknown");
            }
            else
            {
                if (worldLevel > 0)
                {
                    param.levelType = MapType.GenericMonster;

                    param.shop = new ShopData();
                    param.shop.GenerateRandomShopItems(worldLevel, 2);

                    //param.levelType = MapType.FinalBoss;
                    mapTree = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_MEDIUM, 0, param, "Start level", "This level is filled with random monsters.");
                }
                else
                {
                    param.levelType = MapType.LevelOne;
                    //param.levelType = MapType.Test;
                    mapTree = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_EASY, 0, param, "First Tutorial", "Unknown");
                }
            }


            //mapTree.AddLevelReward(typeof(Heal));
            mapTree.AddLevelReward(typeof(DnaItem), 100, 3, 100);
            mapTree.AddLevelReward(typeof(XpItem), 100, 4, 100);

            mapTree.Unlocked = true;

            int levelsCount   = 15;
            int mainLineCount = 4;
            int minGenericLevelsCount;
            int minSpecialLevelsCount;

            switch (worldLevel)
            {
            case 1:
                levelsCount   = 7;
                mainLineCount = 4;
                break;

            case 2:
                levelsCount   = Random.Range(10, 12);
                mainLineCount = 4;
                break;

            case 3:
                levelsCount   = Random.Range(10, 12);
                mainLineCount = 4;
                break;

            case 4:
                levelsCount   = Random.Range(14, 16);
                mainLineCount = 5;
                break;

            default:
                levelsCount   = 15;
                mainLineCount = 5;
                break;
            }

            int maxSpecialLevelsCount = Mathf.CeilToInt((levelsCount - mainLineCount) / 4);

            if (maxSpecialLevelsCount <= 0)
            {
                maxSpecialLevelsCount = 1;
            }

            // one level is already created
            levelsCount--;
            mainLineCount--;

            int counter = levelsCount;

            if (worldLevel > 0)             // main line for all worlds
            {
                int shopLevel = Random.Range(0, mainLineCount - 1);

                // main line - all medium
                for (int i = 0; i < mainLineCount; i++)
                {
                    LevelTree newNode = null;
                    param            = new LevelParams(MapType.LevelOne);
                    param.worldLevel = worldLevel;

                    // grand boss is the last level
                    if (i + 1 == mainLineCount)
                    {
                        param.levelType  = MapType.FinalBoss;
                        param.mapLevel   = worldLevel;
                        param.worldLevel = worldLevel;
                        newNode          = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_MEDIUM, i + 1, param, "Main" + id, "The final boss.");
                    }
                    else
                    {
                        newNode = CreateRandomMainNodeLevel(id++, i + 1, shopLevel == i, LevelTree.DIFF_MEDIUM);
                    }

                    if (newNode == null)
                    {
                        continue;
                    }

                    mapTree.GetLastMainNode().AddChild(newNode);

                    if (i + 1 == mainLineCount)
                    {
                        newNode.IsLastNode = true;
                    }

                    counter--;
                }
            }
            else             // main line for tutorial world
            {
                // main line - tutorial levels - all easy
                for (int i = 0; i < mainLineCount; i++)
                {
                    LevelTree newNode = null;
                    param            = new LevelParams(MapType.LevelOne);
                    param.worldLevel = worldLevel;

                    switch (i)
                    {
                    case 0:
                        param.levelType = MapType.LevelTwo;
                        newNode         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_EASY, i + 1, param, "Second Tutorial", "Unknown");
                        break;

                    case 1:
                        param.levelType = MapType.LevelThree;
                        newNode         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_EASY, i + 1, param, "Third Tutorial", "Unknown");
                        break;

                    case 2:
                        param.levelType = MapType.LevelFour;
                        newNode         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_EASY, i + 1, param, "Fourth Tutorial", "Unknown");
                        break;

                    case 3:
                        param.levelType = MapType.LevelFive;
                        newNode         = new LevelTree(LevelTree.LEVEL_MAIN, id++, LevelTree.DIFF_EASY, i + 1, param, "Last Tutorial", "Unknown");
                        break;
                    }

                    if (newNode == null)
                    {
                        continue;                                      // shouldnt happen
                    }
                    mapTree.GetLastMainNode().AddChild(newNode);

                    if (i + 1 == mainLineCount)
                    {
                        newNode.IsLastNode = true;
                    }

                    counter--;
                }
            }

            if (worldLevel > 0)
            {
                for (int i = 0; i < counter; i++)
                {
                    LevelTree mainNode = mapTree.GetRandomMainNode();
                    LevelTree nextNode = CreateRandomExtraNodeLevel(id++, mainNode.Depth);
                    mainNode.AddChild(nextNode);
                }

                for (int i = 0; i < maxSpecialLevelsCount; i++)
                {
                    LevelTree mainNode = mapTree.GetRandomSpecialNode();
                    LevelTree nextNode = CreateRandomExtraNodeLevel(id++, mainNode.Depth);
                    mainNode.AddChild(nextNode);
                }
            }

            Debug.Log(mapTree.PrintInfo());
        }