public void LoadSeedFromSave(string seed) // will probably need a GameData object parameter { //GameManager.instance.currentScenarioIndex = 0; // <- load current scenario index from save // Load Party PartyMemberStat[] partyMembers = new PartyMemberStat[4]; for (int i = 0; i < 4; i++) { if (partyMemberList.ContainsKey(seed[0])) { partyMembers[i] = new PartyMemberStat(); partyMembers[i].partyID = seed[0]; //partyMembers[i].health = partyMemberList[seed[0]].GetComponent<PartyMember>().health; // <- load in health and status effects here seed = seed.Substring(1); } else { Debug.LogError("Error loading party member from save; char = " + seed[0]); } } GameManager.instance.partyMembers = partyMembers; // Load Scenarios List <Scenario> gameSequence = new List <Scenario>(); int holdIndoor = GameManager.instance.indoorCount; int holdOutdoor = GameManager.instance.outdoorCount; GameManager.instance.outdoorCount = 0; GameManager.instance.indoorCount = 0; //Scenario[] activeGameSequence = new Scenario[GameManager.instance.outdoorCount]; List <int> keys = new List <int>(); for (int i = 0; i < seed.Length; i += 3) { string keyString = seed[i].ToString() + seed[i + 1].ToString() + seed[i + 2].ToString(); int key; if (int.TryParse(keyString, out key)) { keys.Add(key); } else { GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; Debug.LogError("Error loading scenario ID. Tried to find ID: " + keyString); } } for (int i = 0; i < keys.Count; i++) { if (scenarioMasterList.ContainsKey(keys[i])) { gameSequence.Add(scenarioMasterList[keys[i]]); //activeGameSequence[i] = scenarioMasterList[keys[i]]; if (keys[i] / 100 > 4) { GameManager.instance.indoorCount++; } else { GameManager.instance.outdoorCount++; } } else { GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; Debug.LogError("Error finding scenario by ID number. Looking for ID: " + keys[i]); } } Scenario[] activeGameSequence = new Scenario[GameManager.instance.outdoorCount + GameManager.instance.indoorCount]; for (int i = 0; i < gameSequence.Count; i++) { activeGameSequence[i] = gameSequence[i]; } GameManager.instance.activeGameSequence = activeGameSequence; Debug.Log("Seed loaded successfully"); }
public string BuildSeed() // current seed: _ _ _ _ = party members [char] + _ _ _ = room [int], three room example: abcd111222333 { Scenario[] activeGameSequence = new Scenario[GameManager.instance.outdoorCount + GameManager.instance.indoorCount]; GameManager.instance.currentScenarioIndex = -1; // Generate Party: List <char> partyList = new List <char>(); int firstMember = Random.Range(0, partyMembersPrefabs.Length - 1); partyList.Add(requiredLetters[firstMember]); for (int i = 0; i < 3; i++) { while (partyList.Contains(requiredLetters[firstMember])) { firstMember = Random.Range(0, partyMembersPrefabs.Length - 1); } partyList.Add(requiredLetters[firstMember]); } string[] partyNames = GenerateNamesList(); string party = ""; PartyMemberStat[] partyMembers = new PartyMemberStat[4]; for (int i = 0; i < 4; i++) { //get another random party member *unique partyMembers[i] = new PartyMemberStat(); partyMembers[i].name = partyNames[i]; partyMembers[i].partyID = partyList[i]; partyMembers[i].health = partyMemberList[partyList[i]].GetComponent <PartyMember>().health; party += partyList[i]; } GameManager.instance.partyMembers = partyMembers; // Generate Scenarios: List <int> roomList = new List <int>(); int prevLocation = Random.Range(1, 5); int room = Random.Range(0, totalScenariosPerIndex[prevLocation]); // start on boat, not beach bool startOnBoat = false; if (prevLocation == 2) { startOnBoat = Random.Range(0, 10) < 5; if (startOnBoat) { Debug.Log("I'm starting on the boat!"); room = Random.Range(50, totalScenariosPerIndex[10] + 50); startOnBoat = true; } } roomList.Add((prevLocation * 100) + room); //OUTSIDE for (int i = 0; i < GameManager.instance.outdoorCount - 1; i++) { bool stayOnBoat = false; if (prevLocation == 2 && startOnBoat) { // keep going on the boat, unless there are no more scenarios stayOnBoat = Random.Range(0, 10) < 5; if (stayOnBoat) { room = Random.Range(50, totalScenariosPerIndex[10] + 50); int checkForLim = 0; while (roomList.Contains((prevLocation * 100) + room)) { checkForLim++; if (checkForLim > 10) { //stop trying to stay on the boat stayOnBoat = false; break; } room = Random.Range(50, totalScenariosPerIndex[10] + 50); roomList.Add((prevLocation * 100) + room); break; } if (stayOnBoat) { continue; } } } if (startOnBoat) { startOnBoat = false; } int nextLocation = Random.Range(1, 10); if (nextLocation > 4) { nextLocation = prevLocation; } room = Random.Range(0, totalScenariosPerIndex[nextLocation]); // if location chosen has no more scenarios to load int checkForLimit = 0; while (roomList.Contains((nextLocation * 100) + room)) { checkForLimit++; if (checkForLimit > 10) { //pick a new location nextLocation = Random.Range(1, 5); checkForLimit = 0; } room = Random.Range(0, totalScenariosPerIndex[nextLocation]); } roomList.Add((nextLocation * 100) + room); prevLocation = nextLocation; } //INSIDE prevLocation = Random.Range(5, 10); //<- UPDATE UNTIL ALL INDOOR LOCATIONS HAVE A SCENARIO for (int i = 0; i < GameManager.instance.indoorCount; i++) { int nextLocation = Random.Range(1, 10); if (nextLocation < 5) { nextLocation = prevLocation; } room = Random.Range(0, totalScenariosPerIndex[nextLocation]); // if location chosen has no more scenarios to load int checkForLimit = 0; while (roomList.Contains((nextLocation * 100) + room)) { checkForLimit++; if (checkForLimit > 3) // UPDATE THIS TOO WITH LARGER POOL { //pick a new location nextLocation = Random.Range(5, 10); checkForLimit = 0; } room = Random.Range(0, totalScenariosPerIndex[nextLocation]); } roomList.Add((nextLocation * 100) + room); prevLocation = nextLocation; } string newSeed = ""; for (int a = 0; a < roomList.Count; a++) { if (scenarioMasterList.ContainsKey(roomList[a])) { activeGameSequence[a] = scenarioMasterList[roomList[a]]; newSeed = newSeed + roomList[a].ToString(); } else { Debug.LogError("Error building seed, scenario " + roomList[a] + " not found."); } } GameManager.instance.activeLocationEffects = new List <LocationStatusEffect>(); GameManager.instance.activeGameSequence = activeGameSequence; return(party + newSeed); }
public bool BuildFromSeed(string seed) //loading just seed, NOT save data { GameManager.instance.currentScenarioIndex = -1; // <- different if loading save int holdIndoor = GameManager.instance.indoorCount; int holdOutdoor = GameManager.instance.outdoorCount; GameManager.instance.outdoorCount = 0; GameManager.instance.indoorCount = 0; PartyMemberStat[] partyMembers = new PartyMemberStat[4]; // Check for seed validility if (seed.Length < 4 || (seed.Length - 4) % 3 != 0) //|| (seed.Length - 4) / 3 != GameManager.instance.scenarioCount { GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; Debug.LogWarning("Invalid seed."); return(false); } // still generate random names string[] partyNames = GenerateNamesList(); // Load Party for (int i = 0; i < 4; i++) { if (partyMemberList.ContainsKey(seed[0])) { partyMembers[i] = new PartyMemberStat(); partyMembers[i].name = partyNames[i]; partyMembers[i].partyID = seed[0]; partyMembers[i].health = partyMemberList[seed[0]].GetComponent <PartyMember>().health; // <- different if loading save + status effects seed = seed.Substring(1); // removes first letter } else { Debug.LogWarning("Error loading party member from save; char = " + seed[0]); GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; return(false); } } GameManager.instance.partyMembers = partyMembers; // Load Scenarios List <int> keys = new List <int>(); for (int i = 0; i < seed.Length; i += 3) { string keyString = seed[i].ToString() + seed[i + 1].ToString() + seed[i + 2].ToString(); int key; if (int.TryParse(keyString, out key)) { keys.Add(key); } else { Debug.LogWarning("Error loading scenario ID. Tried to create ID: " + keyString); GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; return(false); } } //Scenario[] activeGameSequence = new Scenario[GameManager.instance.outdoorCount + GameManager.instance.indoorCount]; List <Scenario> gameSequence = new List <Scenario>(); for (int i = 0; i < keys.Count; i++) { if (scenarioMasterList.ContainsKey(keys[i])) { gameSequence.Add(scenarioMasterList[keys[i]]); //activeGameSequence[i] = scenarioMasterList[keys[i]]; if (keys[i] / 100 > 4) { GameManager.instance.indoorCount++; } else { GameManager.instance.outdoorCount++; } } else { Debug.LogWarning("Error finding scenario by ID number. Looking for ID: " + keys[i]); GameManager.instance.outdoorCount = holdOutdoor; GameManager.instance.indoorCount = holdIndoor; return(false); } } Scenario[] activeGameSequence = new Scenario[GameManager.instance.outdoorCount + GameManager.instance.indoorCount]; for (int i = 0; i < gameSequence.Count; i++) { activeGameSequence[i] = gameSequence[i]; } GameManager.instance.activeLocationEffects = new List <LocationStatusEffect>(); GameManager.instance.activeGameSequence = activeGameSequence; Debug.Log("Seed loaded successfully"); return(true); }