From 19b907ac22c3eaa0bf4bad9ce79beee59af46ab1 Mon Sep 17 00:00:00 2001 From: Thomas Fisher Date: Fri, 11 May 2018 01:13:42 +0100 Subject: [PATCH] Fitness function selection The fitness function can now be selected from the options menu. Also, any settings on the options menu are automatically filled in with the currently used value. --- .../v15/Server/sqlite3/storage.ide | Bin 1478656 -> 1478656 bytes Assets/Scenes/Options.unity | Bin 117376 -> 128488 bytes Assets/Scripts/EvolutionController.cs | 11 ++++++- Assets/Scripts/GameSettings.cs | 3 ++ Assets/Scripts/Individual.cs | 2 ++ Assets/Scripts/SceneLoader.cs | 11 +++++-- Assets/Scripts/SettingsManager.cs | 30 +++++++++++------- 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/.vs/EvolutionaryGame/v15/Server/sqlite3/storage.ide b/.vs/EvolutionaryGame/v15/Server/sqlite3/storage.ide index 1b4e276329ef3cf3b96f5245aa8e5457dc1e0124..c5065e8baf5ac3f7a0673f2de411012932f4afbc 100644 GIT binary patch delta 27321 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 diff --git a/Assets/Scenes/Options.unity b/Assets/Scenes/Options.unity index 500d56ccad22f034315a27ef40579db1b8edefc9..8b8c9a735e8954b48966427beeabce20dfbd3dbe 100644 GIT binary patch delta 9319 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 Ki{iSZ`~Lw4`xWH? delta 6238 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 population) { Individual currentIndividual = population[i]; - float currentFitness = currentIndividual.CalculateFitness(Individual.ACCURATE_LONG_LIFE_FUNC); + int selectedFitnessFunc = (int)PlayerPrefs.GetFloat("FitnessFunc"); + + if (selectedFitnessFunc < 0 || selectedFitnessFunc > (Individual.NB_OF_FUNCTIONS - 1)) + { + selectedFitnessFunc = Individual.DEFAULT_FUNC; + } + + Debug.Log("Updating fitness scores using fitness function #" + selectedFitnessFunc); + + float currentFitness = currentIndividual.CalculateFitness(selectedFitnessFunc); if (currentFitness > bestFitnessScore) { diff --git a/Assets/Scripts/GameSettings.cs b/Assets/Scripts/GameSettings.cs index 1a97af1..7bcc667 100644 --- a/Assets/Scripts/GameSettings.cs +++ b/Assets/Scripts/GameSettings.cs @@ -7,5 +7,8 @@ public class GameSettings { public int vSync; public int resolutionIndex; public bool fullscreen; + public float globalVolume; + + public int fitnessFunc; } diff --git a/Assets/Scripts/Individual.cs b/Assets/Scripts/Individual.cs index 8c273f2..3928c70 100644 --- a/Assets/Scripts/Individual.cs +++ b/Assets/Scripts/Individual.cs @@ -8,6 +8,8 @@ public class Individual public const float MUTATION_MULT = 0.1f; public const int LIFETIME_FUNC = 0, SURVIVAL_FUNC = 1, ACCURACY_FUNC = 2, NB_ON_TARGET_FUNC = 3, ACCURATE_LONG_LIFE_FUNC = 4; + public const int DEFAULT_FUNC = ACCURATE_LONG_LIFE_FUNC; + public const int NB_OF_FUNCTIONS = 5; #endregion #region Properties private DodgeAI dodgeAI; diff --git a/Assets/Scripts/SceneLoader.cs b/Assets/Scripts/SceneLoader.cs index fb8f6ee..0414cd8 100644 --- a/Assets/Scripts/SceneLoader.cs +++ b/Assets/Scripts/SceneLoader.cs @@ -4,7 +4,8 @@ using UnityEngine.SceneManagement; public class SceneLoader : MonoBehaviour { - public const int GAME = 1; + public const int MAIN_MENU = 0, GAME = 1, CREDITS = 2, OPTIONS = 3; + private int currentIdx; private static int prevIdx = 0; @@ -24,6 +25,9 @@ private void Start() } } + ///

+ /// Check for navigation button input + /// private void Update() { if (Input.GetButton("Cancel")) @@ -33,7 +37,10 @@ private void Update() if (Input.GetButton("Submit")) { - LoadScene(GAME); + if (currentIdx == MAIN_MENU) + { + LoadScene(GAME); + } } } diff --git a/Assets/Scripts/SettingsManager.cs b/Assets/Scripts/SettingsManager.cs index bf12b73..5e4f3e4 100644 --- a/Assets/Scripts/SettingsManager.cs +++ b/Assets/Scripts/SettingsManager.cs @@ -9,6 +9,7 @@ public class SettingsManager : MonoBehaviour { public Dropdown resolutionDropdown; public Dropdown antiAliasingDropdown; public Dropdown vSyncDropdown; + public Dropdown fitnessFuncDropdown; public Slider volumeSlider; public Resolution[] resolutions; @@ -16,15 +17,6 @@ public class SettingsManager : MonoBehaviour { public AudioSource audioSrc; - /// - /// Initialize properties that should be set during run-time. - /// Set the default values of UI components. - /// - private void Start() - { - volumeSlider.value = PlayerPrefs.GetFloat("MasterVol"); - } - /// /// Initialize the values of options UI components. /// Sets up listeners for UI components. @@ -38,15 +30,30 @@ void OnEnable () { antiAliasingDropdown.onValueChanged.AddListener(delegate { OnAntiAliasingChange(); }); vSyncDropdown.onValueChanged.AddListener(delegate { OnVSyncChange(); }); volumeSlider.onValueChanged.AddListener(delegate { OnVolumeChange(); }); - + fitnessFuncDropdown.onValueChanged.AddListener(delegate { OnFitnessFuncChange(); }); resolutions = Screen.resolutions; foreach(Resolution resolution in resolutions) { resolutionDropdown.options.Add(new Dropdown.OptionData(resolution.ToString())); } - } + + volumeSlider.value = PlayerPrefs.GetFloat("MasterVol"); + fitnessFuncDropdown.value = (int)PlayerPrefs.GetFloat("FitnessFunc"); + + fullscreenToggle.isOn = Screen.fullScreen; + textureQualityDropdown.value = QualitySettings.masterTextureLimit; + antiAliasingDropdown.value = QualitySettings.antiAliasing; + vSyncDropdown.value = QualitySettings.vSyncCount; + } + public void OnFitnessFuncChange() + { + gameSettings.fitnessFunc = fitnessFuncDropdown.value; + PlayerPrefs.SetFloat("FitnessFunc", gameSettings.fitnessFunc); + PlayerPrefs.Save(); + } + /// /// Toggle fullscreen mode. /// @@ -60,6 +67,7 @@ public void OnFullscreenToggle() /// public void OnResolutionChange() { + gameSettings.resolutionIndex = resolutionDropdown.value; Screen.SetResolution(resolutions[resolutionDropdown.value].width, resolutions[resolutionDropdown.value].height, Screen.fullScreen); }