public void StopGame(bool userTriggered = false) { _gameStarted = false; _room.GetGameManager().UnlockGates(); _room.GetGameManager().StopGame(); ResetGame(); if (ExitTeleports.Count > 0) { foreach (Item ExitTile in ExitTeleports.Values.ToList()) { if (ExitTile.ExtraData == "1" || String.IsNullOrEmpty(ExitTile.ExtraData)) { ExitTile.ExtraData = "0"; } ExitTile.UpdateState(); } } Team Winners = _room.GetGameManager().GetWinningTeam(); foreach (RoomUser User in _room.GetRoomUserManager().GetUserList().ToList()) { User.FreezeLives = 0; if (User.Team == Winners) { User.UnIdle(); User.DanceId = 0; _room.SendPacket(new ActionComposer(User.VirtualId, 1)); } if (ExitTeleports.Count > 0) { Item tile = _freezeTiles.Values.Where(x => x.GetX == User.X && x.GetY == User.Y).FirstOrDefault(); if (tile != null) { Item ExitTle = GetRandomExitTile(); if (ExitTle != null) { _room.GetGameMap().UpdateUserMovement(User.Coordinate, ExitTle.Coordinate, User); User.SetPos(ExitTle.GetX, ExitTle.GetY, ExitTle.GetZ); User.UpdateNeeded = true; if (User.IsAsleep) { User.UnIdle(); } } } } } if (!userTriggered) { _room.GetWired().TriggerEvent(WiredBoxType.TriggerGameEnds, null); } }
/// <summary> /// Update each GameObject in the GameObjectGrid /// </summary> /// <param name="gameTime">The object used for reacting to timechanges</param> public override void Update(GameTime gameTime) { foreach (GameObject obj in gameObjects) { if (obj is GameObjectGrid) { GameObjectGrid gameObjectGrid = obj as GameObjectGrid; foreach (GameObject gameObject in gameObjectGrid.Objects) { if (gameObject != null) { gameObject.Update(gameTime); if (gameObject is ExitTile) { ExitTile exitTile = gameObject as ExitTile; if (exitTile.isOnTile) { isOnExit = true; } } } } } else { obj.Update(gameTime); } } exitText.Position = new Vector2((GameEnvironment.Screen.X - 300) / 2, 0); noteText.Position = new Vector2((GameEnvironment.Screen.X - 300) / 2, 30); roomCounter.Position = new Vector2(GameEnvironment.Screen.X - 60, 10); }
/// <summary> /// Method for initializing the maps with a setup of a normal ludo map. /// </summary> /// private void initializeMaps() { //Instantiate map array. Maps = new Map[5]; //Initialize maps sharedMap = (Maps[(int)MapSection.SHARED] = new Map(size: (int)MapSectionSize.SHARED, isLoopMap: true)); redMap = (Maps[(int)MapSection.RED] = new Map(size: (int)MapSectionSize.RED, isLoopMap: false)); blueMap = (Maps[(int)MapSection.BLUE] = new Map(size: (int)MapSectionSize.BLUE, isLoopMap: false)); yellowMap = (Maps[(int)MapSection.YELLOW] = new Map(size: (int)MapSectionSize.YELLOW, isLoopMap: false)); greenMap = (Maps[(int)MapSection.GREEN] = new Map(size: (int)MapSectionSize.GREEN, isLoopMap: false)); sharedMap.Name = "SharedMap"; redMap.Name = "RedMap"; blueMap.Name = "BlueMap"; yellowMap.Name = "YellowMap"; greenMap.Name = "GreenMap"; // Defines Team specific maps Map[] submaps = { redMap, greenMap, yellowMap, blueMap }; // creates Team Special tiles on the shared map for (int i = 0; i < submaps.Length; i++) { int idx = i * ((int)(MapSectionSize.SHARED) / 4); Tile newTile = new ExitTile(sharedMap, idx, submaps[i].FirstTile, (PlayerTeam)(i)); sharedMap.SetTile(idx, newTile); //Create exit tiles. newTile = new SpawnTile(sharedMap, idx + 2, (PlayerTeam)(i)); sharedMap.SetTile(idx + 2, newTile); //Create spawn tiles. newTile = new EndTile(submaps[i], submaps[i].Tiles.Length - 1, (PlayerTeam)(i)); submaps[i].LastTile = newTile; //Create end tiles. } // Set tile actors foreach (Map map in Maps) { foreach (Tile tile in map.Tiles) { tile.Actor = new ConsoleTileActor(Game.GetConsoleActorMatrix(), tile); } } }
public void StartGame() { GameIsStarted = true; CountTeamPoints(); ResetGame(); if (ExitTeleports.Count > 0) { foreach (var ExitTile in ExitTeleports.Values.ToList()) { if (ExitTile.ExtraData == "0" || string.IsNullOrEmpty(ExitTile.ExtraData)) { ExitTile.ExtraData = "1"; } ExitTile.UpdateState(); } } _room.GetGameManager().LockGates(); }
private void SetupExit() { int x = _gameSettings.ExitPoint.X ?? 0; int y = _gameSettings.ExitPoint.Y ?? 0; if (!IsInsideBoard(x, y)) { throw new IndexOutOfBoardException(nameof(GameSettings.ExitPoint), x, y); } if (!IsEmptySpace(x, y)) { throw new IndexOcupiedException(nameof(GameSettings.ExitPoint), x, y); } if (_tiles != null) { _tiles[x, y] = new ExitTile(); } }
public void StartGame() { this._gameStarted = true; timestarted = QuasarEnvironment.GetUnixTimestamp(); CountTeamPoints(); ResetGame(); if (this.ExitTeleports.Count > 0) { foreach (Item ExitTile in ExitTeleports.Values.ToList()) { if (ExitTile.ExtraData == "0" || String.IsNullOrEmpty(ExitTile.ExtraData)) { ExitTile.ExtraData = "1"; } ExitTile.UpdateState(); } } this._room.GetGameManager().LockGates(); }
/// <summary> /// Load a single Tile from a certain position in the file /// </summary> /// <param name="chr">The character in the file, defines what tile it will be</param> /// <param name="x">The x-coördinate</param> /// <param name="y">The y-coördinate</param> /// <returns>The Tile to Load</returns> private Tile LoadTile(char chr, int x, int y, string name) { if (chr == 'W') return new WallTile("01"); else if (chr == 'P') return new PathTile("01"); else if (chr == 'N') { //place the player in the entry tile player.Position = new Vector3(x * 200, 200f, y * 200); return new EntryTile("01"); } else if (chr == 'X') { ExitTile exitTile = new ExitTile("01"); if (name == "Content\\Special Levels\\Final.txt") exitTile.exitObject = new Object3D("Misc Level Objects\\Pistol\\Pistol Model"); return exitTile; } else if (chr == 'K') { Decoration notepad = new Decoration("Misc Level Objects\\NotePad\\NotePad Model", "Notepad"); notepad.Position = new Vector3(x * 200, 102, y * 200); notepad.Parent = this; gameObjects.Add(notepad); return new PathTile("01"); } else if (chr == 'D') { Decoration door = new Decoration("Misc Level Objects\\Door\\Door Model", "Door"); door.Position = new Vector3(x * 200, 155, y * 200 + 100); door.modelRotation = (float)Math.PI / 180 * 90; door.Parent = this; gameObjects.Add(door); player.Position = new Vector3(x * 200, 200f, y * 200); return new PathTile("01"); } else if (chr == 'C') { Decoration closet = new Decoration("Misc Level Objects\\Closet\\Closet Model", "Closet"); closet.Position = new Vector3(x * 200, 190, y * 200 - 80); closet.Parent = this; closet.modelRotation = (float)Math.PI / 180 * 270; gameObjects.Add(closet); return new PathTile("01"); } else if (chr == 'V') { Decoration cupboard = new Decoration("Misc Level Objects\\Cupboard\\Cupboard Model", "Cupboard"); cupboard.Position = new Vector3(x * 200 + 100, 165, y * 200); cupboard.Parent = this; cupboard.modelRotation = (float)Math.PI / 180 * 180; gameObjects.Add(cupboard); return new PathTile("01"); } else if (chr == '1') return new WallTile("No Exit Left"); else if (chr == '2') return new WallTile("No Exit Middle"); else if (chr == '3') return new WallTile("No Exit Right"); else return null; }
/// <summary> /// Load a single Tile from a certain position in the file /// </summary> /// <param name="chr">The character in the file, defines what tile it will be</param> /// <param name="x">The x-coördinate</param> /// <param name="y">The y-coördinate</param> /// <returns>The Tile to Load</returns> private Tile LoadTile(char chr, int x, int y, string name) { if (chr == 'W') { return(new WallTile("01")); } else if (chr == 'P') { return(new PathTile("01")); } else if (chr == 'N') { //place the player in the entry tile player.Position = new Vector3(x * 200, 200f, y * 200); return(new EntryTile("01")); } else if (chr == 'X') { ExitTile exitTile = new ExitTile("01"); if (name == "Content\\Special Levels\\Final.txt") { exitTile.exitObject = new Object3D("Misc Level Objects\\Pistol\\Pistol Model"); } return(exitTile); } else if (chr == 'K') { Decoration notepad = new Decoration("Misc Level Objects\\NotePad\\NotePad Model", "Notepad"); notepad.Position = new Vector3(x * 200, 102, y * 200); notepad.Parent = this; gameObjects.Add(notepad); return(new PathTile("01")); } else if (chr == 'D') { Decoration door = new Decoration("Misc Level Objects\\Door\\Door Model", "Door"); door.Position = new Vector3(x * 200, 155, y * 200 + 100); door.modelRotation = (float)Math.PI / 180 * 90; door.Parent = this; gameObjects.Add(door); player.Position = new Vector3(x * 200, 200f, y * 200); return(new PathTile("01")); } else if (chr == 'C') { Decoration closet = new Decoration("Misc Level Objects\\Closet\\Closet Model", "Closet"); closet.Position = new Vector3(x * 200, 190, y * 200 - 80); closet.Parent = this; closet.modelRotation = (float)Math.PI / 180 * 270; gameObjects.Add(closet); return(new PathTile("01")); } else if (chr == 'V') { Decoration cupboard = new Decoration("Misc Level Objects\\Cupboard\\Cupboard Model", "Cupboard"); cupboard.Position = new Vector3(x * 200 + 100, 165, y * 200); cupboard.Parent = this; cupboard.modelRotation = (float)Math.PI / 180 * 180; gameObjects.Add(cupboard); return(new PathTile("01")); } else if (chr == '1') { return(new WallTile("No Exit Left")); } else if (chr == '2') { return(new WallTile("No Exit Middle")); } else if (chr == '3') { return(new WallTile("No Exit Right")); } else { return(null); } }
private void Awake() { instance = GetComponent <PauseManager>(); panelOpen = false; glossy = glossaryObj.GetComponent <Glossary>(); SceneMain scene = glossy.GetScene(BaseSaver.getMap()); GameObject.Find("MenuTitle").SetActive(true); GameObject.Find("MenuTitle").GetComponent <Text>().text = scene.meta.name; StartCoroutine(WaitForAction(3f)); GameObject map = Instantiate(scene.map, new Vector3(0, 0, 0), Quaternion.identity); map.SetActive(true); swapping = false; deleting = false; Debug.Log("PauseManager Awake"); AdventureMeta meta = BaseSaver.getAdventure(); BoardMeta board = BaseSaver.getBoard(BaseSaver.getMap()); GameObject hero = GameObject.FindWithTag("Player"); if (BaseSaver.getMap().Equals("ShallowGrove") && BaseSaver.getMapPrev() != "") { hero.SetActive(false); hero = null; Destroy(GameObject.FindWithTag("Player")); } if (hero == null) { // Pull the hero out of the glossary and instantiate it in the right exit/entrance tile GameObject nHero = null; string dest = BaseSaver.getMapConnection(); string prev = BaseSaver.getMapPrev(); Debug.Log("Prev: " + prev); Debug.Log("Dest: " + dest); foreach (GameObject exit in GameObject.FindGameObjectsWithTag("Exit")) { ExitTile tile = exit.GetComponent <ExitTile>(); if (tile.toScene.Equals(prev + '.' + dest)) { nHero = Instantiate(glossy.hero, exit.transform.position, exit.transform.rotation, GameObject.Find("Units").transform); BaseSaver.setMapConnection(""); BaseSaver.setMapPrevName(""); break; } } if (nHero != null) { nHero.GetComponent <PlayerMain>().playerMeta = meta; } else { Debug.Log("Hero is null!"); nHero = Instantiate(glossy.hero, board.playerPos.ToVector3(), Quaternion.identity, GameObject.Find("Units").transform); nHero.GetComponent <PlayerMain>().playerMeta = meta; } } else { Debug.Log("Hero is not null!"); //GameObject.FindWithTag("Player").transform.position = new Vector3(board.playerPos.x, board.playerPos.y, board.playerPos.z); GameObject.FindWithTag("Player").GetComponent <PlayerMain>().playerMeta = meta; } //GameObject.FindWithTag("Player").GetComponent<PlayerMain>().playerMeta = meta; //BoardMeta board = BaseSaver.getBoard(BaseSaver.getMap()); //Debug.Log("Player Pos: " + GameObject.Find("PlayerHero").transform.position.ToString()); if (board != null) { Debug.Log("Board not null"); GameObject[] npcs = GameObject.FindGameObjectsWithTag("NPC"); GameObject[] items = GameObject.FindGameObjectsWithTag("Item"); Debug.Log("board: " + board.mapName); Debug.Log("player pos: " + board.playerPos); foreach (GameObject npc in npcs) { Debug.Log("board npc: " + (new PosMeta(npc.transform.position)).ToString()); Debug.Log("equals battle: " + meta.trainer.pos.Equals(new PosMeta(npc.transform.position)).ToString()); foreach (NPCMeta NPCMeta in board.NPCs) { if (NPCMeta.name.Equals(npc.GetComponent <NPCMain>().meta.name)) { npc.GetComponent <NPCMain>().meta = new NPCMeta(NPCMeta); } } if (meta.trainer != null && meta.trainer.name.Equals(npc.GetComponent <NPCMain>().meta.name)) { Debug.Log("Found: " + npc.GetComponent <NPCMain>().meta.ToString()); npc.GetComponent <NPCMain>().meta = new NPCMeta(meta.trainer); Debug.Log("changed: " + npc.GetComponent <NPCMain>().meta.ToString()); } } foreach (GameObject item in items) { item.GetComponent <TreasureMain>().UpdateInteractable(); } //GameObject.FindWithTag("Player").transform.position = new Vector3(board.playerPos.x, board.playerPos.y, board.playerPos.z); BaseSaver.putBoard(GameUtilities.getBoardState(BaseSaver.getMap(), new PosMeta(GameObject.FindWithTag("Player").transform.position))); } else { Debug.Log("Board is null"); } }
private bool RunTownMap(EncounterProg encounter, PlayerToken player, TownMap townMap, TownMapTile currentTownMapTile, ExitTile endTile) { endTile.Position[0] = 1; endTile.Position[1] = 1; player.Position[0] = 1; player.Position[1] = 2; townMap.SetEntityPosition(player); int[] exitTilePos = new int[2] { 1, 1 }; townMap.SetTilePosition(exitTilePos, ExitTile.Value); townMap.BuildMapDisplay(); List <ICharacter> townEntityPile = new List <ICharacter>(); townEntityPile.Add(player); List <Tile> townSpecialTilePile = new List <Tile>() { endTile, new InnTile() { Position = townMap.FindPosition(InnTile.Value) } }; AddEntitiesAndTilesToMap(townMap, townSpecialTilePile, townEntityPile); var song = new Playable(new MusicPlayer(), Track.Town); song.Play(); bool nextMap = RunMapGameLoop(townMap, townEntityPile, townSpecialTilePile, encounter); ClearMap(townMap, townEntityPile); song.Stop(); player.Position[0] = currentTownMapTile.Position[0]; player.Position[1] = currentTownMapTile.Position[1] + 1; return(nextMap); }
/// <summary> /// Runs the logic around the game loop /// </summary> /// <param name="difficulty">Difficulty of the game</param> /// <param name="newPlayer">The current player</param> /// <returns>Whether or not the game will continue</returns> public void RunMapGame() { EncounterProg encounter = new EncounterProg(); encounter.RunCharacterCreation(); Random randomNumberSeed = new Random(); bool newMap = true; int height = 8, width = 20; while (newMap) { PlayerToken player = new PlayerToken(encounter); Console.WriteLine("Loading New Map..."); Console.WriteLine("This may take up to 60 seconds..."); Map map = new Map(width, height); TownMap townMap = new TownMap(width, height); Dictionary <int, CaveMap> caveMapStorage = new Dictionary <int, CaveMap>(); List <Tile> specialTilePile = new List <Tile>(); int randomSeed = randomNumberSeed.Next(_currentLevel - 1, _currentLevel + 2); if (_currentLevel == 1) { randomSeed = randomNumberSeed.Next(0, 3); } else if (_currentLevel == 2) { randomSeed = randomNumberSeed.Next(1, 3); } for (int i = 0; i < randomSeed; i++) { double randomWidthSeed = randomNumberSeed.Next(2, 4); double randomHeightSeed = randomNumberSeed.Next(1, 1); CaveMap caveMap = new CaveMap((int)(width / (randomWidthSeed)), (int)(height / (randomHeightSeed))); CaveTile caveTile = new CaveTile(); caveTile.AssociationNum = i + 1; specialTilePile.Add(caveTile); caveMapStorage.Add(i + 1, caveMap); } TownMapTile currentTownMapTile = new TownMapTile(); ExitTile endTile = new ExitTile(); endTile.Position = new int[2]; currentTownMapTile.Position = FindTileOrEntitySpawn.StartingPostion(map, currentTownMapTile); specialTilePile.Add(currentTownMapTile); specialTilePile.Add(endTile); List <ICharacter> entityPile = new List <ICharacter>(); randomSeed = randomNumberSeed.Next(_currentLevel, _currentLevel * 5); bool isTownMap = true; bool isCaveMap = true; while ((isTownMap || isCaveMap) && newMap) { newMap = RunWorldMap(encounter, player, map, specialTilePile, randomSeed, endTile, entityPile); isTownMap = false; isCaveMap = false; foreach (Tile tile in specialTilePile) { if (tile.GetType() == typeof(CaveTile) && IsColliding.IsCurrentlyColliding(tile, player)) { newMap = RunCaveMap(encounter, player, caveMapStorage, endTile, tile); isCaveMap = true; } else if (tile.GetType() == typeof(TownMapTile) && IsColliding.IsCurrentlyColliding(currentTownMapTile, player)) { encounter.TownReplenish(); newMap = RunTownMap(encounter, player, townMap, currentTownMapTile, endTile); isTownMap = true; } } } width += 10; height += 2; if (width == 100) { newMap = false; } _currentLevel++; } Console.WriteLine("Game Over"); }
private bool RunCaveMap(EncounterProg encounter, PlayerToken player, Dictionary <int, CaveMap> caveMapStorage, ExitTile endTile, Tile tile) { Random rand = new Random(); int randomEnemySeed = rand.Next(_currentLevel, (int)(_currentLevel * 1.5)); List <ICharacter> entityCavePile = new List <ICharacter>(); entityCavePile.Add(player); endTile.Position[0] = 1; endTile.Position[1] = 1; player.Position[0] = 1; player.Position[1] = 2; caveMapStorage[tile.AssociationNum].SetEntityPosition(player); int[] exitTilePos = new int[2] { 1, 1 }; caveMapStorage[tile.AssociationNum].SetTilePosition(exitTilePos, ExitTile.Value); List <Tile> caveSpecialTilePile = new List <Tile>() { endTile }; caveMapStorage[tile.AssociationNum].BuildMapDisplay(); if (tile.AssociationNum == 1 && (_currentLevel == _bossSeed)) { placeBoss = true; AddEntitiesAndTilesToMap(caveMapStorage[tile.AssociationNum], caveSpecialTilePile, randomEnemySeed, entityCavePile, placeBoss); } else { AddEntitiesAndTilesToMap(caveMapStorage[tile.AssociationNum], caveSpecialTilePile, randomEnemySeed, entityCavePile); } bool nextMap = RunMapGameLoop(caveMapStorage[tile.AssociationNum], entityCavePile, caveSpecialTilePile, encounter); ClearMap(caveMapStorage[tile.AssociationNum], entityCavePile); player.Position[0] = tile.Position[0]; player.Position[1] = tile.Position[1] + 1; placeBoss = false; return(nextMap); }
private bool RunWorldMap(EncounterProg encounter, PlayerToken player, Map map, List <Tile> specialTilePile, int randomSeed, ExitTile endTile, List <ICharacter> entityPile) { entityPile.Add(player); endTile.Position[0] = map.MapArrayOfArrays.Length - 2; endTile.Position[1] = map.MapArrayOfArrays[0].Length - 2; AddEntitiesAndTilesToMap(map, specialTilePile, randomSeed, entityPile); map.BuildMapDisplay(); bool newMap = RunMapGameLoop(map, entityPile, specialTilePile, encounter); ClearMap(map, entityPile); return(newMap); }
public void StopGame(bool userTriggered = false) { this._gameStarted = false; this._room.GetGameManager().UnlockGates(); this._room.GetGameManager().StopGame(); ResetGame(); if (this.ExitTeleports.Count > 0) { foreach (Item ExitTile in ExitTeleports.Values.ToList()) { if (ExitTile.ExtraData == "1" || String.IsNullOrEmpty(ExitTile.ExtraData)) { ExitTile.ExtraData = "0"; } ExitTile.UpdateState(); } } TEAM Winners = this._room.GetGameManager().GetWinningTeam(); foreach (RoomUser User in this._room.GetRoomUserManager().GetUserList().ToList()) { User.FreezeLives = 0; if (User.Team == Winners) { User.UnIdle(); User.DanceId = 0; this._room.SendMessage(new ActionComposer(User.VirtualId, 1)); } if (Winners != TEAM.NONE) { // List<RoomUser> winners = _room.GetRoomUserManager().GetRoomUsers(); // foreach (RoomUser user in winners.ToList()) if (User.Team != TEAM.NONE) { if (QuasarEnvironment.GetUnixTimestamp() - timestarted > 10) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezePlayer", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeUser", 2); } } if (Winners == TEAM.RED) { if (User.CurrentEffect == 40) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1); _room.SendMessage(new ActionComposer(User.VirtualId, 1)); } } else if (Winners == TEAM.GREEN) { if (User.CurrentEffect == 41) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1); _room.SendMessage(new ActionComposer(User.VirtualId, 1)); } } else if (Winners == TEAM.BLUE) { if (User.CurrentEffect == 42) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1); _room.SendMessage(new ActionComposer(User.VirtualId, 1)); } } else if (Winners == TEAM.YELLOW) { if (User.CurrentEffect == 43) { QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_FreezeWinner", 1); QuasarEnvironment.GetGame().GetAchievementManager().ProgressAchievement(User.GetClient(), "ACH_GameScoreTotal", 1); _room.SendMessage(new ActionComposer(User.VirtualId, 1)); } } if (ExitTeleports.Count > 0) { Item tile = _freezeTiles.Values.Where(x => x.GetX == User.X && x.GetY == User.Y).FirstOrDefault(); if (tile != null) { Item ExitTle = GetRandomExitTile(); if (ExitTle != null) { _room.GetGameMap().UpdateUserMovement(User.Coordinate, ExitTle.Coordinate, User); User.SetPos(ExitTle.GetX, ExitTle.GetY, ExitTle.GetZ); User.UpdateNeeded = true; if (User.IsAsleep) { User.UnIdle(); } } } } } if (!userTriggered) { _room.GetWired().TriggerEvent(WiredBoxType.TriggerGameEnds, null); } } }