Ejemplo n.º 1
0
        public void DeleteButtonClicked(FileSelectionViewController controller)
        {
            var name = creatureNames[selectedIndex];

            CreatureSerializer.DeleteCreatureSave(name);
            selectedIndex = 0;
            RefreshCache();
        }
Ejemplo n.º 2
0
        private IEnumerator LoadOnNextFrame(string name)
        {
            yield return(new WaitForEndOfFrame());

            var design = CreatureSerializer.LoadCreatureDesign(name);

            editor.LoadDesign(design);
        }
Ejemplo n.º 3
0
        public void ExportButtonClicked(FileSelectionViewController controller)
        {
            var    name = creatureNames[selectedIndex];
            string path = CreatureSerializer.PathToCreatureDesign(name);

            FileToSave file = new FileToSave(path, CustomEvolutionFileType.creat);

            NativeFileSO.NativeFileSO.shared.SaveFile(file);
        }
Ejemplo n.º 4
0
 public void DidChangeValue(SaveDialog dialog, string value)
 {
     if (CreatureSerializer.CreatureExists(value))
     {
         dialog.ShowErrorMessage(string.Format("The existing save for {0} will be overwritten!", value));
     }
     else
     {
         dialog.ResetErrors();
     }
 }
Ejemplo n.º 5
0
    /// <summary>
    /// Loads the simulation from save file with the format version 2
    /// </summary>
    /// <param name="name">The name of the simulation save.</param>
    /// <param name="content">The Content of the save file.</param>
    public static SimulationData ParseSimulationData(string name, string content, LegacySimulationLoader.SplitOptions splitOptions)
    {
        var creatureName = name.Split('-')[0].Replace(" ", "");

        if (string.IsNullOrEmpty(creatureName))
        {
            creatureName = "Unnamed";
        }

        var components = content.Split(splitOptions.SPLIT_ARRAY, System.StringSplitOptions.None);

        var simulationSettings = SimulationSettings.Decode(components[1]);
        var networkSettings    = NeuralNetworkSettings.Decode(components[2]);

        var creatureData   = components[3];
        var creatureDesign = CreatureSerializer.ParseCreatureDesign(creatureData);

        creatureDesign.Name = creatureName;

        var bestChromosomesData = new List <string>(components[4].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None));
        var bestChromosomes     = new List <ChromosomeData>();

        foreach (var chromosomeData in bestChromosomesData)
        {
            if (chromosomeData != "")
            {
                var stats = ChromosomeStats.FromString(chromosomeData);
                var data  = new StringChromosomeData(stats.chromosome, stats.stats);
                bestChromosomes.Add(data.ToChromosomeData());
            }
        }

        var chromosomeComponents = components[5].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None);
        var currentChromosomes   = new List <float[]>();

        foreach (var chromosome in chromosomeComponents)
        {
            if (chromosome != "")
            {
                currentChromosomes.Add(ConversionUtils.BinaryStringToFloatArray(chromosome));
            }
        }

        var sceneDescription = DefaultSimulationScenes.DefaultSceneForObjective(simulationSettings.Objective);

        sceneDescription.PhysicsConfiguration = ScenePhysicsConfiguration.Legacy;

        return(new SimulationData(
                   simulationSettings, networkSettings, creatureDesign,
                   sceneDescription, bestChromosomes, currentChromosomes.ToArray(),
                   bestChromosomes.Count
                   ));
    }
Ejemplo n.º 6
0
        public void DidEditTitleAtIndex(FileSelectionViewController controller, int index, string newName)
        {
            if (!IsNameAvailable(controller, newName))
            {
                return;
            }

            var currentName = creatureNames[index];

            CreatureSerializer.RenameCreatureDesign(currentName, newName);
            RefreshCache();
        }
Ejemplo n.º 7
0
        private void TryImport(OpenedFile[] files)
        {
            // Whether at least one file was successfully imported
            var successfulImport = false;
            // Whether at least one .creat file failed to be imported
            var            failedImport       = false;
            CreatureDesign lastImportedDesign = null;

            foreach (var file in files)
            {
                var extension = file.Extension.ToLower();
                if (extension.Equals(".creat"))
                {
                    var nameFromFile = CreatureSerializer.EXTENSION_PATTERN.Replace(file.Name, "");
                    var encoded      = file.ToUTF8String();
                    try {
                        var design = CreatureSerializer.ParseCreatureDesign(encoded, nameFromFile);
                        CreatureSerializer.SaveCreatureDesign(design, false);
                        lastImportedDesign = design;
                    } catch {
                        failedImport = true;
                        Debug.LogError(string.Format("Failed to parse .creat file contents: {0}", encoded));
                        continue;
                    }
                    successfulImport = true;
                }
            }
            RefreshCache();
            try {
                viewController.Refresh();
            } catch {}
            if (successfulImport)
            {
                importIndicator.FadeInOut();
                CloseAndLoadOnNextFrame(lastImportedDesign.Name);
            }
            if (failedImport)
            {
                failedImportIndicator.FadeInOut(1.8f);
            }
        }
Ejemplo n.º 8
0
 public void SaveDesign(CreatureDesign design)
 {
     CreatureSerializer.SaveCreatureDesign(design);
 }
Ejemplo n.º 9
0
    /// <summary>
    /// Loads the simulation from save file of format version 1.
    /// </summary>
    /// <param name="name">The name of the simualtion save.</param>
    /// <param name="content">The Content of the save file.</param>
    public static SimulationData ParseSimulationData(string name, string content, LegacySimulationLoader.SplitOptions splitOptions)
    {
        var creatureName = name.Split('-')[0].Replace(" ", "");

        if (string.IsNullOrEmpty(creatureName))
        {
            creatureName = "Unnamed";
        }

        var components = content.Split(splitOptions.SPLIT_ARRAY, System.StringSplitOptions.None);

        // extract the save data from the file contents.
        var objectiveType = ObjectiveUtil.ObjectiveForNumber(int.Parse(components[0].Replace(Environment.NewLine, "")));

        var timePerGen = int.Parse(components[1].Replace(Environment.NewLine, ""));

        var creatureData   = components[2];
        var creatureDesign = CreatureSerializer.ParseCreatureDesign(creatureData, creatureName);

        var bestChromosomesData = new List <string>(components[3].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None));
        var bestChromosomes     = new List <ChromosomeData>();

        foreach (var chromosomeData in bestChromosomesData)
        {
            if (chromosomeData != "")
            {
                // Parse the chromosome data
                var parts           = chromosomeData.Split(':');
                var chromosome      = parts[0];
                var fitness         = float.Parse(parts[1]);
                var chromosomeStats = new ChromosomeStats(chromosome, new CreatureStats());
                chromosomeStats.stats.fitness = fitness;
                var data = new StringChromosomeData(chromosome, chromosomeStats.stats);
                bestChromosomes.Add(data.ToChromosomeData());
            }
        }

        var chromosomeComponents = components[4].Split(splitOptions.NEWLINE_SPLIT, StringSplitOptions.None);
        var currentChromosomes   = new List <float[]>();

        foreach (var chromosome in chromosomeComponents)
        {
            if (chromosome != "")
            {
                currentChromosomes.Add(ConversionUtils.BinaryStringToFloatArray(chromosome));
            }
        }

        var currentGeneration = bestChromosomes.Count + 1;

        var settings = new SimulationSettings();

        settings.Objective      = objectiveType;
        settings.SimulationTime = timePerGen;
        settings.PopulationSize = currentChromosomes.Count;

        var networkSettings  = NeuralNetworkSettings.Default;
        var sceneDescription = DefaultSimulationScenes.DefaultSceneForObjective(settings.Objective);

        sceneDescription.PhysicsConfiguration = ScenePhysicsConfiguration.Legacy;

        int lastSimulatedV2Generation = bestChromosomes.Count;

        return(new SimulationData(
                   settings, networkSettings, creatureDesign,
                   sceneDescription, bestChromosomes,
                   currentChromosomes.ToArray(),
                   lastSimulatedV2Generation
                   ));
    }
Ejemplo n.º 10
0
 private void RefreshCache()
 {
     creatureNames = CreatureSerializer.GetCreatureNames();
 }
Ejemplo n.º 11
0
 public bool IsNameAvailable(FileSelectionViewController controller, string newName)
 {
     return(!CreatureSerializer.CreatureExists(newName));
 }