//LOAD GAME FROM SAVE FILE public static bool load(LocationsMap locationsMap, UIManager uIManager) { if (!Directory.Exists("Gamesave/")) { return(false); } getObjectsFromResources(); string JsonGameState = ""; string JsonStringLocations = ""; using (StreamReader reader = new StreamReader("Gamesave/save.json")) { JsonGameState = reader.ReadLine(); JsonStringLocations = reader.ReadLine(); } GameStateData gameStateData = JsonUtility.FromJson <GameStateData>(JsonGameState); Locations locations = JsonUtility.FromJson <Locations>(JsonStringLocations); //Set GameState values from data GameState.finishedTutorial = gameStateData.finishedTutorial; foreach (ItemData id in gameStateData.questItemsCollected) { GameState.addToQuestItems((QuestItem)itemListFromResources[id.name]); } //CREATE PLAYER FROM SAVE DATA Player _player = new Player(); _player.health = gameStateData.player.health; _player.maxHealth = gameStateData.player.maxHealth; _player.gold = gameStateData.player.gold; if (gameStateData.player.weapon != string.Empty && gameStateData.player.weapon != "") { _player.weapon = (Weapon)itemListFromResources[gameStateData.player.weapon]; } if (gameStateData.player.weapon != string.Empty && gameStateData.player.shield != "") { _player.shield = (Shield)itemListFromResources[gameStateData.player.shield]; } foreach (ItemData id in gameStateData.player.inventory) { _player.giveItem(itemListFromResources[id.name]); } GameState.player = _player; //EDIT EXISTING LOCATIONS WITH SAVE DATA foreach (LocationData ld in locations.locations) { Location l = locationsMap.getLocation(ld.locationName); l.playerVisited = true; List <ItemOBJ> itemObjs = new List <ItemOBJ>(); l.clearInventory(); foreach (ItemOBJ io in l.items) { GameObject.Destroy(io.gameObject); } l.items.Clear(); l.items.TrimExcess(); foreach (ItemData id in ld.items) { ItemOBJ io = GameObject.Instantiate <ItemOBJ>(itemObjListFromResources[id.name], new Vector3(id.position[0], id.position[1], id.position[2]), Quaternion.identity, l.transform); io.item = itemListFromResources[id.name]; itemObjs.Add(io); } l.items = itemObjs; List <EnemyOBJ> enemyObjs = new List <EnemyOBJ>(); foreach (EnemyOBJ enemyOBJ in l.enemies) { GameObject.Destroy(enemyOBJ.gameObject); } l.enemies = null; foreach (EnemyData ed in ld.enemies) { EnemyOBJ eo = GameObject.Instantiate <EnemyOBJ>(enemyObjListFromResources[ed.name.Split(' ')[0]], new Vector3(ed.position[0], ed.position[1], ed.position[2]), Quaternion.identity, l.transform); eo.name = ed.name; eo.maxHealth = ed.maxHealth; if (ed.weapon != string.Empty && ed.weapon != "") { eo.weapon = (Weapon)itemListFromResources[ed.weapon]; } if (ed.shield != string.Empty && ed.weapon != "") { eo.shield = (Shield)itemListFromResources[ed.shield]; } eo.sprite = characterSprites.GetSprite(ed.sprite); enemyObjs.Add(eo); } l.enemies = enemyObjs.ToArray(); if (l.trader != null) { GameObject.Destroy(l.trader.gameObject); l.trader = null; TraderData td = ld.trader; TraderOBJ to = GameObject.Instantiate <TraderOBJ>(traderObjListFromResources[td.name.Split(' ')[0]], new Vector3(td.position[0], td.position[1], td.position[2]), Quaternion.identity, l.transform); to.name = td.name; to.maxHealth = td.maxHealth; if (td.weapon != string.Empty && td.weapon != "") { to.weapon = (Weapon)itemListFromResources[td.weapon]; } to.sprite = characterSprites.GetSprite(td.sprite); to.trader.gold = td.gold; foreach (ItemData id in td.stock) { to.stock.Add(itemListFromResources[id.name]); } l.trader = to; } l.makeLocation(true, true); l.checkAllDead(); } //Update Scene locationsMap.moveFromLoad(gameStateData.currentLocation); GameState.currentLocation = locationsMap.getLocation(); //Update player UI uIManager.updatePlayerHealth(_player); uIManager.clearInventory(); foreach (Item item in _player.getInventoryItems()) { uIManager.addToPlayerInventory(item); } if (_player.weapon != null) { uIManager.addToEquiped(_player.weapon); } if (_player.shield != null) { uIManager.addToEquiped(_player.shield); } foreach (QuestItem qi in GameState.questItemsCollected) { uIManager.UpdateObjectiveText(qi); } uIManager.updateGold(); uIManager.UpdateMinimap(GameState.currentLocation.name); return(true); }
//SAVE GAME TO JSON IN TXT FILE public static void save(LocationsMap locationsMap) { //GameState data GameStateData gameStateData = new GameStateData(); gameStateData.finishedTutorial = GameState.finishedTutorial; List <ItemData> idl = new List <ItemData>(); foreach (Item qi in GameState.questItemsCollected) { ItemData id = new ItemData(); id.name = qi.name; id.position = new float[] { 0, 0, 0 }; } gameStateData.questItemsCollected = idl.ToArray(); Player _player = GameState.player; //PLAYER DATA PlayerData playerData = new PlayerData(); playerData.health = _player.health; playerData.maxHealth = _player.maxHealth; if (_player.weapon != null) { playerData.weapon = _player.weapon.name; } if (_player.shield != null) { playerData.shield = _player.shield.name; } List <ItemData> ids = new List <ItemData>(); foreach (Item s in _player.getInventoryItems()) { ItemData id = new ItemData(); id.name = s.name; id.position = new float[] { 0, 0, 0 }; ids.Add(id); } playerData.inventory = ids.ToArray(); gameStateData.currentLocation = locationsMap.getLocationName(); playerData.gold = _player.gold; gameStateData.player = playerData; //LOCATION DATA Locations locations = new Locations(); Location[] locationsFromMap = locationsMap.getAllLocations(); List <LocationData> lds = new List <LocationData>(); foreach (Location l in locationsFromMap) { if (l.playerVisited) { LocationData ld = new LocationData(); ld.locationName = l.name; ids = new List <ItemData>(); foreach (ItemOBJ s in l.getInventoryItems()) { if (s.GetComponent <SpriteRenderer>().enabled) { ItemData id = new ItemData(); id.name = s.name; id.position = new float[] { s.transform.position.x, s.transform.position.y, s.transform.position.z }; ids.Add(id); } } ld.items = ids.ToArray(); List <EnemyData> edList = new List <EnemyData>(); foreach (EnemyOBJ e in l.getEnemies()) { EnemyData ed = new EnemyData(); ed.name = e.name; ed.maxHealth = e.maxHealth; if (e.weapon != null) { ed.weapon = e.weapon.name; } if (e.shield != null) { ed.shield = e.shield.name; } ed.sprite = e.sprite.name; ed.position = new float[] { e.transform.position.x, e.transform.position.y, e.transform.position.z }; edList.Add(ed); } ld.enemies = edList.ToArray(); if (l.trader != null) { TraderData td = new TraderData(); TraderOBJ trader = l.getTraderOBJ(); td.name = trader.name; td.maxHealth = trader.maxHealth; td.weapon = trader.weapon.name; td.sprite = trader.sprite.name; td.gold = trader.trader.gold; td.position = new float[] { trader.transform.position.x, trader.transform.position.y, trader.transform.position.z }; idl.Clear(); foreach (Item i in trader.stock) { ItemData id = new ItemData(); id.name = i.name; id.position = new float[] { 0, 0, 0 }; idl.Add(id); } td.stock = idl.ToArray(); ld.trader = td; } lds.Add(ld); } } locations.locations = lds.ToArray(); string JsonGameState = JsonUtility.ToJson(gameStateData); string JsonStringLocations = JsonUtility.ToJson(locations); if (!Directory.Exists("Gamesave/")) { try { Directory.CreateDirectory("Gamesave/"); } catch (System.Exception e) { Debug.Log("Creation failed: " + e.ToString()); } } using (StreamWriter writer = new StreamWriter(@"Gamesave/save.json")) { writer.WriteLine(JsonGameState); writer.WriteLine(JsonStringLocations); } }