//Simple Coroutine IEnumerator BugTimerCoroutine() { while (true) { if (SceneManager.GetActiveScene().name == "GameScene") { timeLeft = CloverDirector.GetInstance().GetBugTime(); yield return(new WaitForSeconds(1)); timeLeft--; if (timeLeft < 0) { CloverDirector.GetInstance().SetBugID(-1); } UpdateBugTimer((int)CloverDirector.GetInstance().GetBugID()); CloverDirector.GetInstance().SetBugTime(timeLeft); if (CloverDirector.GetInstance().GetBugID() == 3) { if (CloverDirector.GetInstance().GetStat("energy") > 0) { CloverDirector.GetInstance().SetStat("energy", -1); } else { CloverDirector.GetInstance().SetStat("water", -1); } } } else { yield return(null); } } }
// Load bubble images corresponding to current conditions // If aphid is present, load sad bubble. // Else if sun and water stats are in 40~60 range, load heart bubble // Else if sun&water stats are in 30~70 range, load smile bubble void Update() { if (CloverDirector.GetInstance()) { float sunStat = CloverDirector.GetInstance().GetStat("sun"); float waterStat = CloverDirector.GetInstance().GetStat("water"); int level = (int)CloverDirector.GetInstance().GetStat("level"); rectTransform.anchoredPosition = new Vector2(0, yPositions[level - 1]); if (CloverDirector.GetInstance().GetBugID() == 3) { bubbleImage.color = new Color(1f, 1f, 1f, 1f); bubbleImage.sprite = bubbles[2]; } else if (sunStat <= 60 && sunStat >= 40 && waterStat <= 60 && waterStat >= 40) { bubbleImage.color = new Color(1f, 1f, 1f, 1f); bubbleImage.sprite = bubbles[0]; } else if (sunStat <= 70 && sunStat >= 30 && waterStat <= 70 && waterStat >= 30) { bubbleImage.color = new Color(1f, 1f, 1f, 1f); bubbleImage.sprite = bubbles[1]; } else { bubbleImage.sprite = null; bubbleImage.color = new Color(1f, 1f, 1f, 0f); } } }
// update name! public async Task UpdateNewNameAsync() { await Task.Delay(100); Debug.Log("update name as " + playerName); CloverDirector.GetInstance().SetName(playerName); playerName = string.Empty; // clear temporary player name }
// on ending popup click, reset clover information public void OnEndingPopUpResetClick() { buttonClick = GameObject.Find("ButtonClickSound").GetComponent <AudioSource>(); buttonClick.Play(); CloverDirector.GetInstance().Reset(); CloverDirector.GetInstance().endingPopupOn = false; PopUp.GetInstance().ShowPopUp("Ending", false); }
// on All reset button click, close setting popup and reset clover and collection data public void OnAllResetButtonClick() { buttonClick = GameObject.Find("ButtonClickSound").GetComponent <AudioSource>(); buttonClick.Play(); Debug.Log("All Reset button clicked!"); PopUp.GetInstance().ShowPopUp("GameSettings", false); CloverDirector.GetInstance().Reset(); Collection.GetInstance().Reset(); }
async void Update() { if (Input.GetKeyDown(KeyCode.Escape) == true) { await Task.Run(CloverDirector.GetInstance().SetData); Application.Quit(); } }
public async void OnExitButtonClick() { buttonClick = GameObject.Find("ButtonClickSound").GetComponent <AudioSource>(); buttonClick.Play(); Debug.Log("Exit button click"); //저장하고 종료하기 await Task.Run(CloverDirector.GetInstance().SetData); Application.Quit(); }
// Return singleton CloverDirector // Used to access CloverDirector outside of this script public static CloverDirector GetInstance() { if (myCloverDirector == null) { myCloverDirector = FindObjectOfType <CloverDirector>(); if (myCloverDirector == null) { GameObject container = new GameObject("CloverDirector"); myCloverDirector = container.AddComponent <CloverDirector>(); } } return(myCloverDirector); }
async Task LoadGame() { // Load playerID from PlayerPrefs string loadedID = PlayerPrefs.GetString("playerID"); Debug.Log("load player ID from playerprefs " + loadedID); // GameSettings data loading from Azure Server GameSettings.GetInstance().playerID = loadedID; await Task.Run(GameSettings.GetInstance().GetData); Debug.Log("GameSettings Data loading complete."); // if successful loading, update current playerID to PlayerPrefs loadedID = GameSettings.GetInstance().GetID(); if (GameSettings.GetInstance().GetGameSetting() != null) { PlayerPrefs.SetString("playerID", loadedID); Debug.Log("set player ID to playerprefs " + loadedID); } else { Debug.LogError("Failed to load game, try again later"); } // Clover data loading from Azure Server CloverDirector.GetInstance().playerID = loadedID; await Task.Run(CloverDirector.GetInstance().GetData); Debug.Log("Clover data loading complete."); // Collection data loading from Azure Server Collection.GetInstance().playerID = loadedID; await Task.Run(Collection.GetInstance().GetData); if (GameSettings.GetInstance().GetLanguage() != string.Empty) { Collection.GetInstance().SetScript(); // Set Script from .txt file! } Debug.Log("Collection Data loading complete."); // Change to GameScene if (GameSettings.GetInstance().GetLanguage() == string.Empty || CloverDirector.GetInstance().GetName() == string.Empty) // language setting needed! { SceneManager.LoadScene("PrologueScene"); } else { SceneManager.LoadScene("GameScene"); } }
// If clover has enough sun & water stats to generate energy, convert sun & water stats to energy // Check if clover can level up public void OnEnergyButtonClick() { buttonClick = GameObject.Find("ButtonClickSound").GetComponent <AudioSource>(); buttonClick.Play(); bool canConvert = CloverDirector.GetInstance().GetStat("sun") > energy_convert_ratio && CloverDirector.GetInstance().GetStat("water") > energy_convert_ratio; if (canConvert) { CloverDirector.GetInstance().SetStat("sun", -energy_convert_ratio); CloverDirector.GetInstance().SetStat("water", -energy_convert_ratio); CloverDirector.GetInstance().SetStat("energy", 5); CloverDirector.GetInstance().LevelUp(); } }
// If time is left and bugID is not -1, start bug timer public void StartBugTimer() { timeLeft = CloverDirector.GetInstance().GetBugTime(); if (timeLeft < 0) { timeLeft = 60; CloverDirector.GetInstance().SetBugTime(timeLeft); } if (CloverDirector.GetInstance().GetBugID() != -1) { StartCoroutine("BugTimerCoroutine"); } Time.timeScale = 1; //Just making sure that the timeScale is right }
// Check if clover met any of ending conditions // If ending conditions are met, load EndingPopUp and reset clover public void CheckEnding() { int ending_number = 0; if (GetStat("water") <= 0) { //thirsty print("Died of thirst"); ending_number = 1; } else if (GetStat("water") >= 100) { //drown print("Drown"); ending_number = 2; } else if (GetStat("sun") <= 0) { //too cold print("Freezed"); ending_number = 3; } else if (GetStat("sun") >= 100) { //too hot print("Dried"); ending_number = 4; } else if (GetStat("level") == 6) { //survived successfully print("Congratulations!"); ending_number = 5; } if (ending_number > 0) { // EndingDirector.GetInstance().EndingFunctionOn(false); // random event ending off UpdateStats(); WeatherFunctionOn(false); // weather change off CloverDirector.GetInstance().endingPopupOn = true; SetBugID(-1); // bug timer off Debug.Log("Ending : " + ending_number); PopUp.GetInstance().FindText("Ending").text = Collection.GetInstance().GetString("info", ending_number); PopUp.GetInstance().FindImage("Ending").sprite = Collection.GetInstance().GetImage(ending_number); PopUp.GetInstance().ShowPopUp("Ending", true); Collection.GetInstance().SetOpened(ending_number); } }
// Makes weather coroutine running or stop // If functionOn is true, make weather coroutines running // Else make weather coroutines stop public void WeatherFunctionOn(bool functionOn) { if (!CloverDirector.GetInstance().weatherRunning&& functionOn) { StartCoroutine("WeatherChange"); StartCoroutine("WeatherStatChange"); CloverDirector.GetInstance().weatherRunning = true; } else if (CloverDirector.GetInstance().weatherRunning&& !functionOn) { StopCoroutine("WeatherChange"); StopCoroutine("WeatherStatChange"); CloverDirector.GetInstance().weatherRunning = false; } }
// If it's GameScene, update UIs and check if any ending condition is met // if it's game scene and weather is not running when it should, makes weather running void Update() { if (SceneManager.GetActiveScene().name == "GameScene") { if (!CloverDirector.GetInstance().endingPopupOn) { UpdateStats(); } if (!CloverDirector.GetInstance().weatherRunning&& myClover.c_name != string.Empty && !CloverDirector.GetInstance().endingPopupOn) { WeatherFunctionOn(true); CloverDirector.GetInstance().weatherRunning = true; } } }
// Get final water gain, update text UI, and change clover stat void Start() { waterGain = GameObject.Find("gainedWater"); if (MineGameDirector.clear) { waterGain.GetComponent <Text>().text = (MineGameDirector.water / 5).ToString("F1"); CloverDirector.GetInstance().SetStat("water", MineGameDirector.water / 5); CloverDirector.GetInstance().SetStat("energy", 3); print(MineGameDirector.water / 5 + " added to water score."); } else { waterGain.GetComponent <Text>().text = (MineGameDirector.water / 5).ToString("F1"); CloverDirector.GetInstance().SetStat("water", MineGameDirector.water / 5); print(MineGameDirector.water / 5 + " added to water score."); } }
// If clover can generate molecules, set random bugID // Close bug popup public void OnGenerateMoleculeButtonClick() { buttonClick = GameObject.Find("ButtonClickSound").GetComponent <AudioSource>(); buttonClick.Play(); Debug.Log("Generate Molecule Button Click"); // code for molecule generation bool canGenerate = CloverDirector.GetInstance().GetStat("energy") > energy_convert_ratio; canGenerate = canGenerate && CloverDirector.GetInstance().GetBugID() == -1; if (canGenerate) { Debug.Log("use energy to generate molecule"); CloverDirector.GetInstance().SetStat("energy", -energy_convert_ratio); int RandomBug = (int)Random.Range(0, 4); // 0~3 CloverDirector.GetInstance().SetBugID(RandomBug); } PopUp.GetInstance().ShowPopUp("Bug", false); }
// Change weather in every weatherCycle seconds during player is in GameScene IEnumerator WeatherChange() { while (true) { if (SceneManager.GetActiveScene().name == "GameScene") { // Set random weather CloverDirector.GetInstance().SetWeather((int)UnityEngine.Random.Range(0, 3)); // Save changes and load appopriate textures LoadWeatherTexture(CloverDirector.GetInstance().GetWeather()); int weather_ID = CloverDirector.GetInstance().GetWeather(); yield return(new WaitForSeconds(myClover.weatherCycle)); } else { yield return(new WaitUntil(() => SceneManager.GetActiveScene().name == "GameScene")); } } }
// Load background & sun/cloud/rain image according to weather // By controlling alpha color of every UI images // And if raining, load rain sound void LoadWeatherTexture(int weather_ID) { GameObject sunny = GameObject.Find("SunnyBackground"); GameObject sunny2 = GameObject.Find("SunImage"); GameObject cloudy = GameObject.Find("CloudyBackground"); GameObject cloudy2 = GameObject.Find("CloudImage"); GameObject rainy = GameObject.Find("RainyBackground"); GameObject rainy2 = GameObject.Find("RainImage"); if (weather_ID == 0) { sunny.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); cloudy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); rainy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); sunny2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); cloudy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); rainy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); } else if (weather_ID == 1) { sunny.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); cloudy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); rainy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); sunny2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); cloudy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); rainy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); } else if (weather_ID == 2) { sunny.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); cloudy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); rainy.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); sunny2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); cloudy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 0f); rainy2.GetComponent <Image>().color = new Color(1f, 1f, 1f, 1f); } LoadRainSound(CloverDirector.GetInstance().GetWeather() == 2); }
// Update text UIs and load clover/weather textures // Only works on GameScene void UpdateStats() { if (SceneManager.GetActiveScene().name == "GameScene") { // Find Text UIs Text WaterStatus = GameObject.Find("WaterStatus").GetComponent <Text>(); Text SunStatus = GameObject.Find("SunStatus").GetComponent <Text>(); Text EnergyStatus = GameObject.Find("EnergyStatus").GetComponent <Text>(); Text Level = GameObject.Find("Level").GetComponent <Text>(); Text Name = GameObject.Find("Name").GetComponent <Text>(); // Update Text UIs WaterStatus.GetComponent <Text>().text = CloverDirector.GetInstance().GetStat("water").ToString("F1"); SunStatus.GetComponent <Text>().text = CloverDirector.GetInstance().GetStat("sun").ToString("F1"); EnergyStatus.GetComponent <Text>().text = CloverDirector.GetInstance().GetStat("energy").ToString("F1"); Level.GetComponent <Text>().text = "LV." + CloverDirector.GetInstance().GetStat("level").ToString("F0"); Name.GetComponent <Text>().text = CloverDirector.GetInstance().GetName(); // Load clover & weather textures LoadCloverTexture(myClover.c_level); LoadWeatherTexture(myClover.c_weather_ID); } }
// Makes CloverDirector DontDestroyOnLoad async void Awake() { if (SceneManager.GetActiveScene().name == "GameScene") { // If clover doesn't have name on GameScene, make NamePopUp if (myClover.c_name == string.Empty) { Debug.Log("name is null"); await PopUp.GetInstance().ShowNamePopUp(); } } CloverDirector.GetInstance().weatherRunning = false; // Initialize weatherRunning variable //DontDestroyOnLoad if (myCloverDirector == null) { DontDestroyOnLoad(gameObject); myCloverDirector = this; } else if (myCloverDirector != this) { Destroy(gameObject); } }
public Sprite[] bugs; // Sprite arrays for bugs void Start() { StartBugTimer(); UpdateBugTimer((int)CloverDirector.GetInstance().GetBugID()); }
// Generate random ending event void RandomEnding() { // Probability of random ending(unit : %) int chickenProbability = 10; int rabbitProbability = 10; int horseProbability = 10; int mowerProbability = 10; int tornadoProbability = 10; int aphidProbability = 10; int boyProbability = 10; float[] endingProbabilities = new float[7]; endingProbabilities[0] = chickenProbability; endingProbabilities[1] = endingProbabilities[0] + rabbitProbability; endingProbabilities[2] = endingProbabilities[1] + horseProbability; endingProbabilities[3] = endingProbabilities[2] + mowerProbability; endingProbabilities[4] = endingProbabilities[3] + tornadoProbability; endingProbabilities[5] = endingProbabilities[4] + aphidProbability; endingProbabilities[6] = endingProbabilities[5] + boyProbability; int ending = (int)Random.Range(0, 100); int ending_number = 0; if (ending < endingProbabilities[0]) { print("Chicken Ending"); ending_number = 6; } else if (ending < endingProbabilities[1]) { print("Rabbit Ending"); ending_number = 7; } else if (ending < endingProbabilities[2]) { print("Horse Ending"); ending_number = 8; } else if (ending < endingProbabilities[3]) { print("Lawn mower Ending"); ending_number = 9; } else if (ending < endingProbabilities[4]) { print("Tornado Ending"); ending_number = 10; } else if (ending < endingProbabilities[5] && CloverDirector.GetInstance().GetBugID() == 3) { print("Aphid Ending"); ending_number = 11; } else if (ending < endingProbabilities[6]) { print("Boy Ending"); ending_number = 12; } if (ending_number > 0) { EndingFunctionOn(false); // random event ending off CloverDirector.GetInstance().endingPopupOn = true; CloverDirector.GetInstance().WeatherFunctionOn(false); // weather change off CloverDirector.GetInstance().SetBugID(-1); // bug timer off Debug.Log("Ending : " + ending_number); PopUp.GetInstance().FindText("Ending").text = Collection.GetInstance().GetString("info", ending_number); PopUp.GetInstance().FindImage("Ending").sprite = Collection.GetInstance().GetImage(ending_number); PopUp.GetInstance().ShowPopUp("Ending", true); Collection.GetInstance().SetOpened(ending_number); } }