예제 #1
0
 /// <summary>Запускает анимацию графического эффекта</summary>
 private void Play()
 {
     m_timer_play.Start();
     m_timer_play_is_working = true;
     ObjectStatus            = DungeonObjectStatus.AddedNotDestroyed;
     DungeonLevel.Add(this);
 }
예제 #2
0
    public void SelectLevel()
    {
        var          selector = GetComponent <Level_Selection_Prefab>();
        DungeonLevel level    = SelectLeveFromWeek();

        if (level == null)
        {
            return;
        }
        string path = Application.persistentDataPath + "/Dungeon.dat";

        if (!File.Exists(path))
        {
            File.Create(path).Close();
            File.WriteAllText(path, "LastPlayed:" + System.DateTime.Now);
        }
        else
        {
            if (System.DateTime.Parse(File.ReadAllText(path).Replace("LastPlayed:", "")).AddDays(+1) > System.DateTime.Now)
            {
                //return;
            }
            else
            {
                File.WriteAllText(path, "LastPlayed:" + System.DateTime.Now);
            }
        }
        selector.file       = level.textFile;
        selector.texture    = level.texture;
        selector.background = background;
        selector.SetLevelSelection();
    }
        public DungeonLevel GenerateLevel()
        {
            DungeonLevel level = new DungeonLevel();

            SetupLevelSeed(level);
            List <Doorway> unexpandedDoors = new List <Doorway>();

            unexpandedDoors = level.GetUnexpandedDoors();
            while (unexpandedDoors.Count > 0 && level.Components.Count < 40)
            {
                foreach (Doorway entrance in unexpandedDoors)
                {
                    if (ExpandDungeonLevel(level, entrance))
                    {
                        entrance.connected = true;
                    }
                    else
                    {
                        level.Remove(entrance);
                    }
                }
                unexpandedDoors = level.GetUnexpandedDoors();
            }
            return(level);
        }
예제 #4
0
        public SubObjectTag[] GetActor()
        {
            DungeonProgressData progress = GetComponent <DungeonProgressData>();
            DungeonLevel        level    = progress.GetDungeonLevel();
            int maxSoldier = progress.MaxSoldier;
            int maxActor   = progress.MaxActor;
            int potion     = 0;
            int nextIndex;
            Stack <SubObjectTag> actors = new Stack <SubObjectTag>();

            Dictionary <CombatRoleTag, SubObjectTag[]> group
                = GetComponent <ActorGroupData>().GetActorGroup(level);

            SubObjectTag[] soldier = group[CombatRoleTag.Soldier];
            SubObjectTag   minion  = group[CombatRoleTag.Minion][0];

            while (potion < maxSoldier)
            {
                nextIndex = GetComponent <RandomNumber>().Next(
                    GetComponent <DungeonBlueprint>().Seed, 0, soldier.Length);
                actors.Push(soldier[nextIndex]);

                potion += GetComponent <ActorData>().GetIntData(
                    soldier[nextIndex], DataTag.Potion);
            }

            while (actors.Count < maxActor)
            {
                actors.Push(minion);
            }

            return(actors.ToArray());
        }
예제 #5
0
        /// <summary>Событие таймера размышления</summary>
        private void m_thinking_timer_Tick(object sender, EventArgs e)
        {
            if (DungeonLevel != DungeonLevel.Form.Hero.DungeonLevel)
            {
                return;
            }

            Point total_connection_point_where_is_monster;

            if (m_is_attached_to_room)
            {
                total_connection_point_where_is_monster = m_connection_point_attached;
            }
            else
            {
                total_connection_point_where_is_monster = DungeonLevel.GetConnectionPointLocationFromGlobalLocation(Location.Point);
            }

            m_target_location = DungeonLevel.GetGlobalLocationRandomCellInConnectionPointNotWall(total_connection_point_where_is_monster);

            m_action_status = DungeoMonsterActionStatus.MovingToCell;

            m_thinking_timer.Stop();
            m_thinking_timer_is_working = false;

            Random random = new Random();

            m_moving_timer.Interval = 100 * random.Next(10, 51);
            m_moving_timer.Start();
            m_moving_timer_is_working = true;
        }
        //TODO: Account for freed regions.

        public bool StartDungeon(Creature pCreator, DungeonLobby pLobby, DungeonLevel pLevel, Item pItem)
        {
            var script = FindScriptOrNull(pLobby, pLevel, pItem.Info.Id);

            if (script == null)
            {
                return(false);
            }

            int nextAvailableRegion = _regionIndex;

            Log.Info("Next available Region: {0}", nextAvailableRegion);
            var newDungeon = new Dungeon(pCreator, _regionIndex, script, out nextAvailableRegion);

            if (newDungeon == null)
            {
                return(false);
            }

            _regionIndex = nextAvailableRegion;
            var addKey = Tuple.Create(pLobby, pLevel);

            if (!_activeDungeons.ContainsKey(addKey))
            {
                _activeDungeons[addKey] = new List <Dungeon>();
            }

            _activeDungeons[addKey].Add(newDungeon);
            Log.Info("Starting dungeon...");
            newDungeon.Start();
            return(true);
        }
        public DungeonScript FindScriptOrNull(DungeonLobby pLobby, DungeonLevel pLevel, int itemId = -1)
        {
            var key = Tuple.Create(pLobby, pLevel);
            List <DungeonScript> allowableScripts;

            if (!HasScript(pLobby, pLevel, itemId))
            {
                //Doesn't have the exact script, let's see if it has one at all for the lobby or level
                if (!HasScript(pLobby, pLevel))
                {
                    //this is awkward... We should just not allow this to happen at all
                    return(null);
                }
                //One for the lobby and level so let's just use that as a default
                allowableScripts = _scripts[key];
            }
            else
            {
                allowableScripts = _scripts[key].Where(a => a.ItemPass.Contains(itemId)).ToList();
            }

            if (allowableScripts.Count <= 0)
            {
                return(null);
            }

            //Random script!
            var index = RandomProvider.Get().Next(0, allowableScripts.Count - 1);

            return(allowableScripts[index]);
        }
예제 #8
0
        private void CreateBeetle()
        {
            int[][] position = GetPosition();

            int actor    = GetComponent <SchedulingSystem>().CountActor;
            int maxActor = GetComponent <GameData>().GetIntData("Dungeon",
                                                                "MaxActor");

            if ((position.Length < maxBeetle) || (actor > maxActor))
            {
                return;
            }
            position = FilterPosition(position);

            DungeonLevel dl = GetComponent <DungeonProgressData>()
                              .GetDungeonLevel();
            SubObjectTag minion = GetComponent <ActorGroupData>()
                                  .GetActorGroup(dl)[CombatRoleTag.Minion][0];

            foreach (int[] p in position)
            {
                GetComponent <ObjectPool>().CreateObject(
                    MainObjectTag.Actor,
                    minion,
                    p);
            }
        }
예제 #9
0
        public Dictionary <CombatRoleTag, SubObjectTag[]> GetActorGroup(
            DungeonLevel dl)
        {
            XElement             xele    = GetComponent <GameData>().GetData("ActorGroup", dl);
            Stack <SubObjectTag> minion  = new Stack <SubObjectTag>();
            Stack <SubObjectTag> soldier = new Stack <SubObjectTag>();

            foreach (XElement e in xele.Elements())
            {
                if (e.Name == CombatRoleTag.Minion.ToString())
                {
                    minion.Push((SubObjectTag)Enum.Parse(
                                    typeof(SubObjectTag), e.Value.ToString()));
                }
                else
                {
                    soldier.Push((SubObjectTag)Enum.Parse(
                                     typeof(SubObjectTag), e.Value.ToString()));
                }
            }

            var result = new Dictionary <CombatRoleTag, SubObjectTag[]>
            {
                { CombatRoleTag.Minion, minion.ToArray() },
                { CombatRoleTag.Soldier, soldier.ToArray() },
            };

            return(result);
        }
 /// <summary>
 /// Can be overridden to create different dungeon seeds.
 /// </summary>
 /// <param name="level"></param>
 protected void SetupLevelSeed(DungeonLevel level)
 {
     level.Add(new Room(0, 0, 5, 5));
     level.Add(new Doorway(0, 3, 1, 0, Side.West));
     level.Add(new Doorway(5, 3, 1, 0, Side.East));
     level.Add(new Doorway(3, 0, 0, 1, Side.South));
     level.Add(new Doorway(3, 5, 0, 1, Side.North));
 }
예제 #11
0
        /// <summary>
        /// This method attempts to find a way to fit the candidate into the level without colliding with any existing components.
        /// </summary>
        /// <param name="level"></param>
        /// <param name="entrance"></param>
        /// <param name="candidate"></param>
        /// <returns>false if the component could not be placed.</returns>
        protected bool tryPlaceComponent(DungeonLevel level, Doorway entrance, component candidate)
        {
            switch (entrance.SideIn)
            {
            case Side.North:
                candidate.y = entrance.y;
                break;

            case Side.South:
                candidate.y = entrance.y - candidate.Height;
                break;

            case Side.West:
                candidate.x = entrance.x - candidate.Width;
                break;

            case Side.East:
                candidate.x = entrance.x;
                break;
            }
            IList <int> potentialOrigins = new List <int>();

            if (entrance.SideIn == Side.North || entrance.SideIn == Side.South)
            {
                for (int i = entrance.x - candidate.Width; i < entrance.x; i++)
                {
                    potentialOrigins.Add(i + 1);
                }
                while (potentialOrigins.Count > 0)
                {
                    int i = DiceBag.getDice().rand.Next(potentialOrigins.Count);
                    candidate.x = potentialOrigins[i];
                    if (level.Add(candidate))
                    {
                        return(true);
                    }
                    potentialOrigins.RemoveAt(i);
                }
            }
            else
            {
                for (int i = entrance.y - candidate.Height; i < entrance.y; i++)
                {
                    potentialOrigins.Add(i + 1);
                }
                while (potentialOrigins.Count > 0)
                {
                    int i = DiceBag.getDice().rand.Next(potentialOrigins.Count);
                    candidate.y = potentialOrigins[i];
                    if (level.Add(candidate))
                    {
                        return(true);
                    }
                    potentialOrigins.RemoveAt(i);
                }
            }
            return(false);
        }
예제 #12
0
        public ShameAltarAddon( DungeonLevel lvl )
        {
            for (int i = 0; i < m_AddOnComplexComponents.Length / 4; i++)

                AddComponent( new AddonComponent( m_AddOnComplexComponents[i,0] ), m_AddOnComplexComponents[i,1], m_AddOnComplexComponents[i,2], m_AddOnComplexComponents[i,3] );

            mDungeonLevel = lvl;
            Hue= 1378;
        }
예제 #13
0
        public bool IsWin()
        {
            DungeonLevel current = GetComponent <DungeonProgressData>()
                                   .GetDungeonLevel();
            DungeonLevel next = GetComponent <DungeonProgressData>()
                                .GetNextLevel();

            return((current == next) && LevelCleared());
        }
        public ShameAltarAddon(DungeonLevel lvl)
        {
            for (int i = 0; i < m_AddOnComplexComponents.Length / 4; i++)
            {
                AddComponent(new AddonComponent(m_AddOnComplexComponents[i, 0]), m_AddOnComplexComponents[i, 1], m_AddOnComplexComponents[i, 2], m_AddOnComplexComponents[i, 3]);
            }

            mDungeonLevel = lvl;
            Hue           = 1378;
        }
예제 #15
0
 public void doTransitionPreparation(int choosenCorridorId)
 {
     dungeonGenerator.loadAnotherLevel(choosenCorridorId, typeOfLoadingLevel);
     previousCorridorId = currentCorridorId;
     currentCorridorId  = choosenCorridorId;
     Debug.Log("ButtonForUsage || doorTransition || doTransitionPreparation || currentCorridorNumber: " + currentCorridorId);
     Debug.Log("ButtonForUsage || doorTransition || doTransitionPreparation || Length of corridorList from dungeonGenerator: " + dungeonGenerator.getCorridorList().Count);
     currentCorridor = dungeonManager.getLevelsArray().Find(x => x.getIdOfLevel() == currentCorridorId);
     //shouldApplyTransition = true;
 }
예제 #16
0
        /// <summary>Создаёт графический эффект на уровне</summary>
        /// <param name="dungeon_level">Уровень подземелья</param>
        /// <param name="gif_image">GIF</param>
        /// <param name="x">Координата X (центр)</param>
        /// <param name="y">Координата Y (центр)</param>
        public DungeonGraphicEffect(DungeonLevel dungeon_level, GifImage gif_image, int x = 0, int y = 0)
            : base(new Bitmap(gif_image.GetFrame(0)), DungeonObjectCollision.NoCollision)
        {
            DungeonLevel = dungeon_level;
            m_gif_image  = gif_image;
            SetLocation(x, y);

            m_timer_play_is_working = true;
            InitializeTimers();
        }
예제 #17
0
        public void NewRandomWeapon_ReturnsWeapon()
        {
            var generator = new Generator();
            var level     = new DungeonLevel(new Dungeon());
            var position  = new Point(1, 1);
            var weapon    = generator.NewRandomWeapon(level, position, 1);

            Assert.IsInstanceOfType(weapon, typeof(Weapon));
            Assert.AreEqual(weapon.Location, level);
            Assert.AreEqual(weapon.Position, position);
        }
예제 #18
0
        public void NewRandomMonster_ReturnsMonster()
        {
            var generator = new Generator();
            var level     = new DungeonLevel(new Dungeon());
            var position  = new Point(1, 1);
            var monster   = generator.NewRandomMonster(level, position, 1);

            Assert.IsInstanceOfType(monster, typeof(Monster));
            Assert.AreEqual(monster.Location, level);
            Assert.AreEqual(monster.Position, position);
        }
예제 #19
0
 public CellularAutomata(DungeonLevel level)
 {
     this.width             = level.Width;
     this.height            = level.Height;
     this.fillPercent       = level.fillPercent;
     this.smoothingCycles   = level.smoothingCycles;
     this.birthLimit        = level.birthLimit;
     this.deathLimit        = level.deathLimit;
     this.wallThresholdSize = level.wallThresholdSize;
     this.roomThresholdSize = level.roomThresholdSize;
     this.useRandomSeed     = level.useRandomSeed;
 }
예제 #20
0
    private static void IniDungeonLevelList()
    {
        int _nbrPseudoSpider    = 1;
        int _nbrSpider          = 0;
        int _nbrSpiderQueen     = 0;
        int _nbrSkeletonToon    = 0;
        int _nbrSkeletonFighter = 0;
        int _nbrSkeletonKing    = 0;

        for(int level = 1; level <= _dungeonLevelMax; level++)
        {

            DungeonLevelList[level] = new DungeonLevel();

            // Spider Nest
            if(level <= 10)
            {
                DungeonLevelList[level].Name = "Spider Nest [" + level.ToString() + "]";

                _nbrPseudoSpider = 1;
                _nbrSpider = 0;
                _nbrSpiderQueen = 0;

                _nbrPseudoSpider = (int)Mathf.Round(level*1f);
                _nbrSpider       = (int)Mathf.Round(level*0.6f);
                if(level >= 7) {_nbrSpiderQueen = level - 6;}

                DungeonLevelList[level].MonsterList = _nbrPseudoSpider + "*PseudoSpider+" + _nbrSpider + "*Spider+" + _nbrSpiderQueen + "*SpiderQueen";
                //DungeonLevelList[level - 1].Reward = level.ToString + "*InfluencePoints";
                DungeonLevelList[level].SizeX = 40 + 8*level;
                DungeonLevelList[level].SizeY = 40 + 8*level;
                DungeonLevelList[level].NbrSquareForSpawn = 2 + (int)Mathf.Round(0.7f*level);
            }
            else if(level > 10 && level <= 20)
            {
                DungeonLevelList[level].Name = "Skeleton Crypt [" + level.ToString() + "]";

                _nbrPseudoSpider    = 11 - level;
                _nbrSpider          = 13 - level + UnityEngine.Random.Range (0,1);
                _nbrSpiderQueen     = Mathf.CeilToInt((15 - level)/2);
                _nbrSkeletonToon    = Mathf.RoundToInt((level - 10)*0.5f);
                _nbrSkeletonFighter = 1 + Mathf.RoundToInt((level - 11)*0.75f);
                _nbrSkeletonKing    = Mathf.RoundToInt((level - 15)*0.75f);

                DungeonLevelList[level].MonsterList = _nbrPseudoSpider + "*PseudoSpider+" + _nbrSpider + "*Spider+" + _nbrSpiderQueen + "*SpiderQueen+" + _nbrSkeletonToon + "*SkeletonToon+" + _nbrSkeletonFighter + "*SkeletonFighter+" + _nbrSkeletonKing + "*SkeletonKing";
                //DungeonLevelList[level - 1].Reward = level.ToString + "*InfluencePoints";
                DungeonLevelList[level].SizeX = 30 + 7*level;
                DungeonLevelList[level].SizeY = 30 + 7*level;
                DungeonLevelList[level].NbrSquareForSpawn = 2 + (int)Mathf.Round(0.5f*level);
            }
        }
    }
예제 #21
0
        /// <summary>Создаёт объект</summary>
        /// <param name="image">Изображение объекта</param>
        /// <param name="collision_type">Тип столкновения с данным объектом</param>
        protected DungeonObject(Bitmap image, DungeonObjectCollision collision_type)
            : base()
        {
            m_image            = image;
            m_size             = image.Size;
            m_collision_type   = collision_type;
            m_collision_size   = m_size;
            m_collision_offset = new Point(0, 0);

            DungeonLevel = null;
            m_location   = new DungeonPoint(0, 0);
            ObjectStatus = DungeonObjectStatus.CreatedNotAdded;
        }
예제 #22
0
        public bool GenerateComponent(DungeonLevel level, Doorway entrance)
        {
            component candidate = GetComponent(entrance);

            while (tryPlaceComponent(level, entrance, candidate) == false)
            {
                if (tryReduceSize(candidate) == false)
                {
                    return(false);
                }
            }
            return(tryAddDetails(level, entrance, candidate));
        }
예제 #23
0
    public void UpdateView(DungeonLevel dungeonLevel)
    {
        if (starConcatenator.Length > 0)
        {
            starConcatenator.Remove(0, dungeonLevel.getDifficulty());
        }
        for (int i = 0; i < dungeonLevel.getDifficulty(); i++)
        {
            starConcatenator.Append("*");
        }

        detailTexts[0].text = "Name : " + dungeonLevel.getName();
        detailTexts[1].text = "Difficulty : " + starConcatenator.ToString();
    }
예제 #24
0
 public void Post([FromBody] DungeonLevel level)
 {
     using (var db = new DungeonContext())
     {
         db.Levels.Add(level);
         db.SaveChanges();
         Console.WriteLine($"DungeonLevelId: {level.DungeonLevelId}");
         foreach (DungeonComponent c in level.Components)
         {
             c.DungeonLevelId = level.DungeonLevelId;
         }
         db.Components.AddRange(level.Components);
         db.SaveChanges();
     }
 }
예제 #25
0
        private void RandomMap()
        {
            var asd   = new DungeonLevel(0, true);
            var tiles = asd.GetMap();

            for (int x = 0; x < Atts.MaxLocsX; x++)
            {
                for (int y = 0; y < Atts.MaxLocsY; y++)
                {
                    MapTileTemplate selectedTemplate;

                    switch (tiles[x, y].LocationType)
                    {
                    case Atts.LocationType.Empty:
                        selectedTemplate = _templates[3];
                        break;

                    case Atts.LocationType.WallPoint:
                        selectedTemplate = _templates[2];
                        break;

                    case Atts.LocationType.TempDoor:
                    case Atts.LocationType.DoorPoint:
                        selectedTemplate = _templates[1];
                        break;

                    case Atts.LocationType.TempCorridor:
                    case Atts.LocationType.Corridor:
                        selectedTemplate = _templates[4];
                        break;

                    case Atts.LocationType.RoomSpace:
                        selectedTemplate = _templates[4];
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    _map.SetTile(new MapLocation(x, y), selectedTemplate, true);
                }
            }
        }
예제 #26
0
    public void doorTransition()
    {
        if (!shouldButtonsBeLocked)
        {
            currentCorridorId = dungeonGenerator.getIdOfCorridor();
            currentCorridor   = dungeonManager.getLevelsArray().Find(x => x.getIdOfLevel() == currentCorridorId);

            //Here we're calling popup to allow user to pick next corridor
            //For that we're going to send our current corridor id
            if (focusedHeroPosition >= 0 && focusedHeroPosition <= 7)
            {
                if (currentCorridorId == 0)
                {
                    GameSave.Instance.SceneIndex = GameGlobals.SceneIndex.CityScene;
                    GameSave.Instance.Update();
                    SceneManager.LoadScene((int)GameSave.Instance.SceneIndex);
                }
                else
                {
                    Debug.Log("ButtonForUsage || doorTransition || Registered use on entrance door!");
                    chooseCorridor.showCorridorDecissionPopup(previousCorridorId);
                    shouldButtonsBeLocked = true;
                    typeOfLoadingLevel    = 1;
                }
            }
            else if (focusedHeroPosition >= ((currentCorridor.getNumberOfChunks() - 1) * 7) && focusedHeroPosition <= ((currentCorridor.getNumberOfChunks()) * 7))
            {
                Debug.Log("ButtonForUsage || doorTransition || Registered use on exit doors!");
                chooseCorridor.showCorridorDecissionPopup(currentCorridorId);
                shouldButtonsBeLocked = true;
                typeOfLoadingLevel    = 0;
            }


            Debug.Log("ButtonForUsage || doorTransition || (" + focusedHeroPosition + " >= " + ((currentCorridor.getNumberOfChunks() - 1) * 7) + " && " + focusedHeroPosition + " <= " + (currentCorridor.getNumberOfChunks() * 7) + ")");
            Debug.Log("ButtonForUsage || doorTransition || CurrentCorridorNumber is: " + currentCorridorId);
        }
        else
        {
            Debug.Log("ButtonForUsage || doorTransition || Buttons are locked!");
        }
    }
예제 #27
0
        private bool FindDoorType(DungeonLevel level, Doorway door)
        {
            DungeonComponent tester = new DungeonComponent(door.x, door.y, 1, 1);

            switch (door.SideIn)
            {
            case Side.South:
                tester.y--;
                break;

            case Side.West:
                tester.x--;
                break;
            }
            if (level.Collision(tester))
            {
                int roll = DiceBag.getDice().d20();
                if (roll > 10)
                {
                    return(false);
                }
                else
                {
                    door.connected = true;
                    if (roll > 5)
                    {
                        door.Type = DoorType.OneWay;
                    }
                    else
                    {
                        door.Type = DoorType.Secret;
                    }
                }
            }
            else
            {
                door.connected = false;
                door.Type      = DoorType.TwoWay;
            }
            return(true);
        }
        public bool HasScript(DungeonLobby pLobby, DungeonLevel pLevel, int itemId = -1)
        {
            var key = Tuple.Create(pLobby, pLevel);

            if (!_scripts.ContainsKey(key))
            {
                return(false);
            }

            if (itemId == -1 && _scripts[key].Count > 0)
            {
                return(true);
            }

            if (_scripts[key].Count(a => a.ItemPass.Contains(itemId)) > 0)             //<<<Gross
            {
                return(true);
            }

            return(false);
        }
예제 #29
0
        public override DungeonLevel GetLevel(int level, Dungeon dungeon, Point?startTile)
        {
            DungeonLevel dungeonLevel = null;

            if (Data.Maps.Count <= level)
            {
                throw new ArgumentException("Level does not exist.");
            }
            if (loadedLevels.TryGetValue(level, out dungeonLevel))
            {
                return(dungeonLevel);
            }

            Initialize(level, startTile);
            stack.Push(new TileInfo <TileData>
            {
                Position = start,
                Tile     = CurrentMap[start.X, start.Y]
            });
            bitMap[start.X, start.Y] = true;

            while (stack.Count > 0)
            {
                currentTile = stack.Pop();
                var nextTiles = CreateTile(currentTile).Where(t => t.Tile != null && t.Tile.GetType() != typeof(WallTileData) && !bitMap[t.Position.X, t.Position.Y]);

                foreach (var t in nextTiles) //recursion
                {
                    stack.Push(t);
                    bitMap[t.Position.X, t.Position.Y] = true;
                }
            }

            SetupNeighbours(TilesPositions, outputTiles);
            SetupItems();

            dungeonLevel = new DungeonLevel(dungeon, outputTiles, creatures, level, TilesPositions, TilesPositions[start], legacyTileCreator.MiniMap);
            loadedLevels.Add(level, dungeonLevel);
            return(dungeonLevel);
        }
예제 #30
0
 // Use this for initialization
 void Start()
 {
     wasTransitionCalled   = false;
     shouldButtonsBeLocked = false;
     //We will always start on level 0
     currentCorridorId   = 0;
     previousCorridorId  = currentCorridorId;
     dungeonCanvas       = GameObject.Find("Dungeon");
     dungeonGenerator    = dungeonCanvas.GetComponent <DungeonsGenerator>();
     dungeonManager      = dungeonCanvas.GetComponent <DungeonManager>();
     currentCorridor     = dungeonManager.getLevelsArray().Find(x => x.getIdOfLevel() == currentCorridorId);
     focusedHero         = GameObject.Find("HeroObject1");
     chooseCorridor      = GameObject.Find("ChooseCorridorPopup").GetComponent <ChooseCorridor>();
     focusedHeroPosition = focusedHero.transform.position.x;
     useButton.onClick.AddListener(doorTransition);
     objectForDarkening         = GameObject.Find("Transition");
     objectForDarkeningRenderer = objectForDarkening.GetComponent <SpriteRenderer>();
     shouldApplyTransition      = false;
     alphaColor = objectForDarkening.GetComponent <SpriteRenderer>().material.color;
     speedTimer = 0;
     objectForDarkeningRenderer.material.color = new Color(1.0f, 1.0f, 1.0f, 0.0f);
 }
예제 #31
0
        public DungeonLevel GetLevel(IFactories factories, int level, Point?startTile)
        {
            this.Factories = factories;
            DungeonLevel dungeonLevel = null;

            if (Data.Maps.Count <= level)
            {
                throw new ArgumentException("Level does not exist.");
            }
            if (loadedLevels.TryGetValue(level, out dungeonLevel))
            {
                return(dungeonLevel);
            }

            Initialize(level, startTile);

            tileInitialized = new TaskCompletionSource <bool>();
            ProcessMapData();
            tileInitialized.SetResult(true);

            SetupNeighbours(TilePositions, TileInitializers);

            dungeonLevel = new DungeonLevel(level, TilePositions, TilePositions[start], TileCreator.MiniMap, CurrentMap.Difficulty);

            foreach (var tileInitializer in TileInitializers)
            {
                tileInitializer.Level = dungeonLevel;
                tileInitializer.Initialize();
            }

            foreach (var tileInitializer in TileInitializers)
            {
                tileInitializer.NotifyInitialized();
            }

            loadedLevels.Add(level, dungeonLevel);
            return(dungeonLevel);
        }
예제 #32
0
 public WestRoomCommand(DungeonLevel dungeonlevel)
 {
     this.dungeonlevel = dungeonlevel;
 }