Example #1
0
    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");
    }
Example #2
0
    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);
    }
Example #3
0
    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);
    }