/// <summary>Запускает анимацию графического эффекта</summary> private void Play() { m_timer_play.Start(); m_timer_play_is_working = true; ObjectStatus = DungeonObjectStatus.AddedNotDestroyed; DungeonLevel.Add(this); }
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); }
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()); }
/// <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]); }
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); } }
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)); }
/// <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); }
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; }
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; }
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; }
/// <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(); }
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); }
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); }
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; }
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); } } }
/// <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; }
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)); }
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(); }
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(); } }
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); } } }
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!"); } }
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); }
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); }
// 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); }
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); }
public WestRoomCommand(DungeonLevel dungeonlevel) { this.dungeonlevel = dungeonlevel; }