public void SetStructuresGuest(GameSavedata savedata) { for (int i = 0; i < savedata.structureDatas.Count; i++) { SetSingleStructureGuest(structures[i], savedata.structureDatas[i]); } }
public void LoadStructuresFromSave(GameSavedata savedata) { ClearStructureManager(); for (int i = 0; i < savedata.structureDatas.Count; i++) { ConstructStructureFromData(savedata.structureDatas[i]); } }
private void OpenCombatAreasToSavedIndex(GameSavedata savedata) { while (PublicHuntingAreaIndex < savedata.combatAreaManager.publicHuntingAreaIndex) { if (huntingAreas[ConqueringHuntingAreaIndex].IsBossArea) { OnBossAreaConquered(true); } else { OnHuntingAreaConquered(true); } } }
// 현 상태 저장 public void Save() { // 데이터 패스 설정 savedataPath = Application.persistentDataPath + "/test.sav"; // 임시 string sceneName = SceneManager.GetActiveScene().name; // 저장 BinaryFormatter bf = new BinaryFormatter(); FileStream stream = new FileStream(savedataPath, FileMode.Create); GameSavedata data = new GameSavedata(sceneName); bf.Serialize(stream, data); stream.Close(); }
public void LoadCombatAreas(GameSavedata savedata) { for (int i = 0; i <= savedata.combatAreaManager.publicHuntingAreaIndex + 1; i++) { //Debug.Log("LoadHA"); huntingAreas[i].InitFromSaveData(savedata.combatAreaManager.huntingAreas[i]); huntingAreas[i].isNew = false; } for (int i = 0; i <= savedata.combatAreaManager.bossAreaIndex; i++) { bossAreas[i].InitFromSaveData(savedata.combatAreaManager.bossAreas[i]); bossAreas[i].isNew = false; } }
// structure만 지정해주는 메서드 public void SetTileStructure(GameSavedata savedata) { GameObject[,] tiles = tileMap.transform.GetChild(0).GetComponent <TileLayer>().GetTiles(); Tile tempTile; List <TileData> tileDatas = savedata.tileDatas; for (int i = 0; i < tileDatas.Count; i++) { if (tileDatas[i].prefabInfo != 0 && tileDatas[i].structureIndex != -1) { tempTile = tiles[tileDatas[i].x, tileDatas[i].y].GetComponent <Tile>(); tempTile.SetStructure(StructureManager.Instance.structures[tileDatas[i].structureIndex]); } } }
/// <summary> /// 세이브 파일에서 정보 읽어서 로드 /// </summary> /// <returns>로드 되었는지 아닌지</returns> public bool InstantiateFromSave() { // 세이브에서 받아서 결과값 대입 if (isLoadedGame) { GameManager.Instance.LoadPlayerData(savedata); GameManager.Instance.LoadTileMap(savedata); GameManager.Instance.SetCombatAreas(); GameManager.Instance.LoadTravelers(savedata); GameManager.Instance.LoadAdventurers(savedata); GameManager.Instance.LoadSpecialAdventurers(savedata); StructureManager.Instance.LoadStructuresFromSave(savedata); CombatAreaManager.Instance.LoadCombatAreasFromSave(savedata); //순서 바꿔야할 수도? GameManager.Instance.LoadBossPhaseData(savedata); GameManager.Instance.SetEveryTrvDestPlace(savedata); GameManager.Instance.SetAdvsEnemy(savedata); CombatAreaManager.Instance.SetMonstersEnemy(savedata); GameManager.Instance.ActivateLoadedActors(savedata); //CombatAreaManager.Instance.ActivateMonsters(); StructureManager.Instance.SetStructuresGuest(savedata); TileMapGenerator.Instance.SetTileStructure(savedata); GameManager.Instance.LoadUI(savedata); GameManager.Instance.CreateStatDummies(); //Debug.Log("불러오기 성공"); savedata = null; return(true); } else { return(false); } }
// 세이브 파일에서 로드 public GameSavedata LoadFromSave() { // 데이터 패스 설정 savedataPath = Application.persistentDataPath + "/test.sav"; // 임시 // 불러오기 if (File.Exists(savedataPath)) { BinaryFormatter bf = new BinaryFormatter(); FileStream stream = new FileStream(savedataPath, FileMode.Open); savedata = bf.Deserialize(stream) as GameSavedata; stream.Close(); return(savedata); } else { return(null); } }
public void SetMonstersEnemy(GameSavedata savedata) { for (int i = 0; i <= ConqueringHuntingAreaIndex; i++) { foreach (int key in huntingAreas[i].monstersEnabled.Keys) { if (savedata.combatAreaManager.huntingAreas[i].monstersEnabled[key].enemy != null) { GameManager.Instance.SetICombatantEnemy(huntingAreas[i].monstersEnabled[key].GetComponent <Monster>(), savedata.combatAreaManager.huntingAreas[i].monstersEnabled[key].enemy); } } } for (int i = 0; i <= BossAreaIndex; i++) { foreach (int key in bossAreas[i].monstersEnabled.Keys) { if (savedata.combatAreaManager.bossAreas[i].monstersEnabled[key].enemy != null) { GameManager.Instance.SetICombatantEnemy(bossAreas[i].monstersEnabled[key].GetComponent <Monster>(), savedata.combatAreaManager.bossAreas[i].monstersEnabled[key].enemy); } } } }
public void LoadCombatAreasFromSave(GameSavedata savedata) { OpenCombatAreasToSavedIndex(savedata); LoadCombatAreas(savedata); }
private void CreateMapFromSave(GameSavedata savedata) { int layer_Count = 0; string t; List <TileData> tileDatas = savedata.tileDatas; GameObject tileObject; do { t = mapData["layers"][layer_Count++]; } while (t != null); layer_Count--; //맵 데이터 읽기 완료 // 이런건 고정이니 수정안함. tileMap_Object = new GameObject("TileMap"); // instantiate 할 필요 없음. 씬에 추가까지 자동으로 됨 tileMap_Object.transform.position = new Vector3(0.0f, 0.0f, 0.0f); tileMap = tileMap_Object.AddComponent <TileMap>(); tileMap.SetWidth(mapData["width"].AsInt); tileMap.SetHeight(mapData["height"].AsInt); tileMap.SetLayerCount(layer_Count); tileMap.SetOrientation(mapData["orientation"]); tileMap.SetRenderOrder(mapData["renderorder"]); //타일맵 생성 완료. 레이어 추가는 아직 //////////////////////////////////////////////////////////// GameObject layer_Object = new GameObject("TileLayer"); layer_Object.transform.parent = tileMap_Object.transform; layer_Object.transform.position = new Vector3(0.0f, 0.0f, 0.0f); TileLayer layer = layer_Object.AddComponent <TileLayer>(); layer.SetLayerNum(0); layer.SetLayerWidth(mapData["layers"][0]["width"].AsInt); layer.SetLayerHeight(mapData["layers"][0]["height"].AsInt); layer.SetOffsetX(mapData["layers"][0]["offsetx"] == null ? 0 : mapData["layers"][0]["offsetx"].AsInt); layer.SetOffsetY(mapData["layers"][0]["offsety"] == null ? 0 : mapData["layer"][0]["offsety"].AsInt); layer.SetOpacity(mapData["layers"][0]["opacity"].AsInt); layer.SetLayerName(mapData["layers"][0]["name"]); layer.SetLayerType(mapData["layers"][0]["type"]); layer.AssignTileArray(mapData["layers"][0]["width"].AsInt, mapData["layers"][0]["height"].AsInt); layer.AssignTileForMoveArray(mapData["layers"][0]["width"].AsInt, mapData["layers"][0]["height"].AsInt); tileMap.AddLayer(layer_Object); //layer는 0번 하나만~] //layer_Count = 1; // 레이어를 더 추가하면 GameSavedata에 레이어 Count 추가해주고 for문 돌아주면 됨. for (int i = 0; i < tileDatas.Count; i++) { if (tileDatas[i].prefabInfo != 0) { tileObject = (GameObject)Instantiate(preLoadedTileObject[tileDatas[i].prefabInfo]); // 레이어에 따라 이름이 바뀔 수 있으므로. 저장된 name값으로 할당. tileObject.name = tileDatas[i].tileName; tileObject.transform.parent = layer_Object.transform; Tile tile = tileObject.AddComponent <Tile>(); // 로드 했을 때 새로 할당하기 위해서. tile.prefabInfo = tileDatas[i].prefabInfo; // 프로퍼티 세팅. tile.SetRoad(tileDatas[i].isRoad); tile.SetIsStructed(tileDatas[i].isStructed); tile.SetNonTile(tileDatas[i].isNonTile); tile.SetIsBuildingArea(tileDatas[i].isBuildingArea); tile.SetIsHuntingArea(tileDatas[i].isHuntingArea); tile.SetIsActive(tileDatas[i].isActive); // structure는 structure 로드 후에 따로 해줘야. tile.SetX(tileDatas[i].x); tile.SetY(tileDatas[i].y); tile.SetLayerNum(tileDatas[i].layerNum); // 레이어 관련은 수정해야할 수도. tile.SetLayer(layer); tile.SetTileType(tile.prefabInfo); tileObject.transform.position = new Vector3(tileDatas[i].position.x, tileDatas[i].position.y, tileDatas[i].position.z); layer.AddTile(tile.x, tile.y, tileObject); // 이부분 뭔지 모르겠음 int ui = tile.y * layer.GetLayerWidth() * 4 + 2 * tile.x; int di = tile.y * layer.GetLayerWidth() * 4 + 2 * tile.x + 2 * layer.GetLayerWidth() + 1; int li = tile.y * layer.GetLayerWidth() * 4 + 2 * tile.x + 2 * layer.GetLayerWidth(); int ri = tile.y * layer.GetLayerWidth() * 4 + 2 * tile.x + 1; Vector3 p = tile.transform.position; layer.AddTileForMove(tile.x * 2, tile.y * 2, new Vector3(p.x, p.y + 0.666f, p.z), tile); // u tile.SetChild(0, layer.GetTileForMove(tile.x * 2, tile.y * 2)); layer.AddTileForMove(tile.x * 2 + 1, tile.y * 2, new Vector3(p.x + 0.333f, p.y + 0.5f, p.z), tile); // r tile.SetChild(1, layer.GetTileForMove(tile.x * 2 + 1, tile.y * 2)); layer.AddTileForMove(tile.x * 2, tile.y * 2 + 1, new Vector3(p.x - 0.333f, p.y + 0.5f, p.z), tile); // l tile.SetChild(2, layer.GetTileForMove(tile.x * 2, tile.y * 2 + 1)); layer.AddTileForMove(tile.x * 2 + 1, tile.y * 2 + 1, new Vector3(p.x, p.y + 0.333f, p.z), tile); // d tile.SetChild(3, layer.GetTileForMove(tile.x * 2 + 1, tile.y * 2 + 1)); } else { //0으로 생성 tileObject = (GameObject)Instantiate(preLoadedTileObject[1]); //Resources.Load("TilePrefabs/" + 1)); //tile_Resources.Add(mapData["layers"][i]["data"][x * layer.GetLayerWidth() + y].AsInt, tile_Object); tileObject.name = (tileDatas[i].y * layer.GetLayerWidth() + tileDatas[i].x).ToString(); tileObject.transform.parent = layer_Object.transform; Tile tile = tileObject.AddComponent <Tile>(); // 저장을 위해 tile.prefabInfo = 0; //Tile tile = tile_Object.GetComponent<Tile>(); //////////////////tile.SetPassable(false); tile.SetRoad(false); tile.SetX(tileDatas[i].x); tile.SetY(tileDatas[i].y); tile.SetLayerNum(0); tile.SetLayer(layer); tile.SetTileType(mapData["layers"][i]["data"][tile.y * layer.GetLayerWidth() + tile.x].AsInt); tileObject.GetComponent <SpriteRenderer>().enabled = false; tileObject.tag = "non_Tile"; tile.SetNonTile(true); tileObject.transform.position = new Vector3(tileDatas[i].position.x, tileDatas[i].position.y, tileDatas[i].position.z); layer.AddTile(tile.x, tile.y, tileObject); } } }
public GameObject GenerateMapFromSave(string path, GameSavedata savedata) //맵 생성 { LoadMapDataFromSave(path); CreateMapFromSave(savedata); return(tileMap_Object); }