// Use this for initialization void Start() { CreatureSaver.SetupPlayerPrefs(); // initialize arrays joints = new List <Joint>(); bones = new List <Bone>(); muscles = new List <Muscle>(); // Joints are selected by default. selectedPart = BuildSelection.Joint; buttonManager.SetupDropDown(); //creatureSaver = new CreatureSaver(); if (!firstTime) { CreatureSaver.LoadCurrentCreature(this); //print("Last creature name: " + lastCreatureName); buttonManager.SetDropDownToValue(lastCreatureName); } firstTime = false; //CreatureSaver.Test(); }
/// <summary> /// Loads the simulation from save file of format version 1. /// </summary> /// <param name="filename">The Filename has to end on .txt .</param> /// <param name="content">The Content of the save file.</param> private static void LoadSimulationFromSaveFileV1(string filename, string content, SplitOptions splitOptions, CreatureBuilder creatureBuilder, Evolution evolution) { var creatureName = filename.Split('-')[0].Replace(" ", ""); var components = content.Split(splitOptions.SPLIT_ARRAY, System.StringSplitOptions.None); // extract the save data from the file contents. var taskType = EvolutionTaskUtil.TaskForNumber(int.Parse(components[0].Replace(Environment.NewLine, ""))); var timePerGen = int.Parse(components[1].Replace(Environment.NewLine, "")); var creatureData = components[2]; CreatureSaver.LoadCreatureFromContents(creatureData, creatureBuilder); var bestChromosomesData = new List <string>(components[3].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None)); var bestChromosomes = new List <ChromosomeStats>(); foreach (var chromosomeData in bestChromosomesData) { if (chromosomeData != "") { var chromosomeInfo = ChromosomeInfo.FromString(chromosomeData); var chromosomeStats = new ChromosomeStats(chromosomeInfo.chromosome, new CreatureStats()); chromosomeStats.stats.fitness = chromosomeInfo.fitness; bestChromosomes.Add(chromosomeStats); } } var chromosomeComponents = components[4].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None); var currentChromosomes = new List <string>(); foreach (var chromosome in chromosomeComponents) { if (chromosome != "") { currentChromosomes.Add(chromosome); } } var currentGeneration = bestChromosomes.Count + 1; var settings = new EvolutionSettings(); settings.task = taskType; settings.simulationTime = timePerGen; settings.populationSize = currentChromosomes.Count; var networkSettings = new NeuralNetworkSettings(); evolution.Settings = settings; creatureBuilder.ContinueEvolution(evolution, () => { CreatureSaver.SaveCurrentCreatureName(creatureName); evolution.ContinueEvolution(currentGeneration, settings, networkSettings, bestChromosomes, currentChromosomes); }); }
public static List <string> CreateDropDownOptions() { var options = new List <string>(); options.Add("Creature"); options.AddRange(CreatureSaver.GetCreatureNames()); return(options); }
/// <summary> /// Creates the creature and attached it to the evolution. /// </summary> public void AttachCreatureToEvolution(Evolution evolution) { ResetHoverableColliders(); CreatureSaver.SaveCurrentCreature(lastCreatureName, joints, bones, muscles); Creature creature = BuildCreature(); DontDestroyOnLoad(creature.gameObject); evolution.creature = creature; }
/// <summary> /// Saves the simulation. /// </summary> /// <returns>The filename of the savefile.</returns> public string SaveSimulation() { if (currentGenerationNumber == 1) { return(null); } var creatureName = CreatureSaver.GetCurrentCreatureName(); var creatureSaveData = CreatureSaver.GetCurrentCreatureData(); var bestChromosomes = BCController.GetBestChromosomes(); var currentChromosomes = new List <string>(this.currentChromosomes); return(EvolutionSaver.WriteSaveFile(creatureName, settings, brainSettings, currentGenerationNumber, creatureSaveData, bestChromosomes, currentChromosomes)); }
public void LoadCreature(Dropdown dropDown) { DeleteCreature(); //var name = CreatureSaver.GetCreatureNames()[dropDown.value]; var name = ButtonManager.CreateDropDownOptions()[dropDown.value]; lastCreatureName = name; // The first option in the Dropdown list is going to be an empty creature if (dropDown.value == 0) { return; } CreatureSaver.LoadCreature(name, this); }
/** Generates a creature and starts the evolution simulation. */ public void Evolve() { // don't attempt evolution if there is no creature if (joints.Count == 0) { return; } ResetHoverableColliders(); CreatureSaver.SaveCurrentCreature(lastCreatureName, joints, bones, muscles); Creature creature = BuildCreature(); DontDestroyOnLoad(creature.gameObject); //SceneManager.LoadScene("EvolutionScene"); AsyncOperation sceneLoading = SceneManager.LoadSceneAsync("EvolutionScene"); //AsyncOperation sceneLoading = SceneManager.LoadSceneAsync("TestEvolutionScene"); sceneLoading.allowSceneActivation = true; DontDestroyOnLoad(evolution.gameObject); evolution.creature = creature; //evolution.PopulationSize = buttonManager.GetPopulationInput(); //evolution.SimulationTime = buttonManager.GetSimulationTime(); var settings = settingsMenu.GetEvolutionSettings(); //evolution.PopulationSize = settings.populationSize; //evolution.SimulationTime = settings.simulationTime; //Evolution.task = buttonManager.GetTask(); //Evolution.task = settings.task; evolution.Settings = settings; evolution.BrainSettings = settingsMenu.GetNeuralNetworkSettings(); SetMobileNoSleep(); StartCoroutine(WaitForEvolutionSceneToLoad(sceneLoading)); DontDestroyOnLoad(this); //evolution.StartEvolution(); //Time.timeScale = 5.0f; }
public void DeleteCurrentCreatureSave() { var selectedCreatureIndex = dropDown.value; var options = CreateDropDownOptions(); var currentCreatureName = options[selectedCreatureIndex]; if (currentCreatureName.ToUpper() != "CREATURE") { deleteConfirmation.ConfirmDeletionFor(currentCreatureName, delegate(string name) { CreatureSaver.DeleteCreatureSave(currentCreatureName); creatureBuilder.DeleteCreature(); SetupDropDown(); dropDown.value = 0; }); } }
/// <summary> /// Loads the simulation from save file with the format version 2 /// </summary> /// <param name="filename">The Filename has to end on .txt .</param> /// <param name="content">The Content of the save file.</param> private static void LoadSimulationFromSaveFileV2(string filename, string content, SplitOptions splitOptions, CreatureBuilder creatureBuilder, Evolution evolution) { var creatureName = filename.Split('-')[0].Replace(" ", ""); var components = content.Split(splitOptions.SPLIT_ARRAY, System.StringSplitOptions.None); var evolutionSettings = EvolutionSettings.Decode(components[1]); var networkSettings = NeuralNetworkSettings.Decode(components[2]); var creatureData = components[3]; CreatureSaver.LoadCreatureFromContents(creatureData, creatureBuilder); var bestChromosomesData = new List <string>(components[4].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None)); var bestChromosomes = new List <ChromosomeStats>(); foreach (var chromosomeData in bestChromosomesData) { if (chromosomeData != "") { bestChromosomes.Add(ChromosomeStats.FromString(chromosomeData)); } } var chromosomeComponents = components[5].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None); var currentChromosomes = new List <string>(); foreach (var chromosome in chromosomeComponents) { if (chromosome != "") { currentChromosomes.Add(chromosome); } } var currentGeneration = bestChromosomes.Count + 1; evolution.Settings = evolutionSettings; creatureBuilder.ContinueEvolution(evolution, () => { CreatureSaver.SaveCurrentCreatureName(creatureName); evolution.ContinueEvolution(currentGeneration, evolutionSettings, networkSettings, bestChromosomes, currentChromosomes); }); }
/// <summary> /// Attempts to save the current creature. Shows an error screen if something went wrong. /// </summary> /// <param name="name">Name.</param> public void SaveCreature(string name) { saveDialog.ResetErrors(); if (name == "") { saveDialog.ShowErrorMessage("The Creature name is empty."); return; } try { CreatureSaver.WriteSaveFile(name, joints, bones, muscles); } catch (IllegalFilenameException e) { saveDialog.ShowErrorMessage("The name can't contain . (dots) or _ (underscores)."); print(e.Message); return; } // The save was successful saveDialog.gameObject.SetActive(false); buttonManager.Refresh(); }
/** Handles all possible keyboard controls / shortcuts. */ private void HandleKeyboardInput() { if (saveDialog != null && saveDialog.gameObject.activeSelf) { return; } if (Input.anyKeyDown) { // J = place Joint if (Input.GetKeyDown(KeyCode.J)) { SelectedPart = BuildSelection.Joint; } // B = place body connection else if (Input.GetKeyDown(KeyCode.B)) { SelectedPart = BuildSelection.Bone; } // M = place muscle else if (Input.GetKeyDown(KeyCode.M)) { SelectedPart = BuildSelection.Muscle; } // D = Delete component else if (Input.GetKeyDown(KeyCode.D)) { SelectedPart = BuildSelection.Delete; } // S = Save Creature else if (Input.GetKeyDown(KeyCode.S) && Application.platform != RuntimePlatform.WebGLPlayer) { //SaveCreature(); //PromptCreatureSave(); } // L = Load Creature else if (Input.GetKeyDown(KeyCode.L)) { //LoadCreature(); } // E = Go to Evolution Scene else if (Input.GetKeyDown(KeyCode.E)) { Evolve(); } // P = Print the current creature's save string else if (Input.GetKeyDown(KeyCode.P)) { print(CreatureSaver.CreateSaveInfoFromCreature(joints, bones, muscles)); } buttonManager.selectButton(selectedPart); } }
private void OnSave2Clicked(object sender, EventArgs e) { CreatureSaver.Save(_lastFittest2, "creature.dna"); }