Ejemplo n.º 1
0
    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        if (loadingGame)
        {
            // Provide binary formatter a stream of bytes to read and create a save object from
            BinaryFormatter bf   = new BinaryFormatter();
            FileStream      file = File.Open(Application.persistentDataPath + "/gamesave.save", FileMode.Open);
            Save            save = (Save)bf.Deserialize(file);
            file.Close();

            foreach (var condition in save.sceneVars)
            {
                SceneItemManager.sceneItems.loadConditionStatuses[condition.loadIfThisVarTrue] = condition.varStatus;
            }

            player = FindObjectOfType <Player>();
            player.transform.position = new Vector3(save.playerX, save.playerY);

            dialogueVars = FindObjectOfType <ExampleVariableStorage>();
            for (int i = 0; i < save.dialogueVars.Count; i++)
            {
                object value;
                ExampleVariableStorage.SaveVariable variable = save.dialogueVars[i];

                switch (variable.type)
                {
                case Yarn.Value.Type.Number:
                    value = variable.valueAsFloat;
                    break;

                case Yarn.Value.Type.String:
                    value = variable.valueAsString;
                    break;

                case Yarn.Value.Type.Bool:
                    value = variable.valueAsBool;
                    break;

                case Yarn.Value.Type.Null:
                    value = null;
                    break;

                default:
                    throw new System.ArgumentOutOfRangeException();
                }

                var v = new Yarn.Value(value);

                dialogueVars.SetValue(variable.name, v);
            }



            FindObjectOfType <DialogueRunner>().dialogue.visitedNodes = save.nodesVisited;

            loadingGame = false;
        }
    }
Ejemplo n.º 2
0
    private Save CreateSaveGameObject()
    {
        Save save = new Save();

        //foreach (IInventoryItem item in inventory.GetItems())
        foreach (string item in inventory.GetItems())
        {
            save.currentInventory.Add(item);
        }

        foreach (KeyValuePair <string, Yarn.Value> entry in dialogueVars.GetAllVariables())
        {
            ExampleVariableStorage.SaveVariable var = new ExampleVariableStorage.SaveVariable();
            var.name = entry.Key;
            var.type = entry.Value.type;

            var.valueAsBool   = entry.Value.AsBool;
            var.valueAsFloat  = entry.Value.AsNumber;
            var.valueAsString = entry.Value.AsString;

            save.dialogueVars.Add(var);
        }

        foreach (KeyValuePair <string, bool> condition in SceneItemManager.sceneItems.loadConditionStatuses)
        {
            SceneItemManager.LoadCondition var = new SceneItemManager.LoadCondition();
            var.loadIfThisVarTrue = condition.Key;
            var.varStatus         = condition.Value;

            save.sceneVars.Add(var);
        }

        save.currentScene = SceneManager.GetActiveScene().name;

        save.playerX = player.transform.position.x;
        save.playerY = player.transform.position.y;

        save.nodesVisited = FindObjectOfType <DialogueRunner>().dialogue.visitedNodes;

        return(save);
    }