Skip to content
Snippets Groups Projects
EditLoader.cs 2.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class EditLoader : CreateLoader
    {
        private Stage original_stage;
    
        public new void Init()
        {
            base.Init();
        }
    
        public void SetStage(string name, bool local)
        {
            StageStatic.SetStage(name, local);
            original_stage = StageStatic.stage;
    
            if (!original_stage.DeepLoad())
    
                Error(StageStatic.StageErrorStruct.NotLoadable);
    
            id = original_stage.number;
            this.name = original_stage.name;
            description= original_stage.description;
            scene = original_stage.scene;
        }
    
        public void Reset()
        {
            SetStage(original_stage.name, !original_stage.use_install_folder);
        }
    
        private void _Delete()
        {
            StageStatic.Delete(original_stage);
        }
    
        public void Delete()
        {
    
    Marco Zimmer's avatar
    Marco Zimmer committed
            if (original_stage.use_install_folder)
            {
    
                Error(StageStatic.StageErrorStruct.InvalidFolder);
    
    Marco Zimmer's avatar
    Marco Zimmer committed
                return;
            }
    
            //Reset();
            //TODO: ask user
            _Delete();
            pageMenue.RevertMode();
        }
    
        private bool _Clone(bool overwrite)
        {
    
            var error = StageStatic.Validate(category, id, name, description, scene);
    
            if (overwrite) {
                if(name == original_stage.name)
                    error.name = false;
                if(id == original_stage.number)
                    error.id = false;
    
                Error(error);
                return false;
            }
    
    
            IJSONsavable<Stage>.load(null /*original_stage.hierarchie*/, original_stage.name, out Stage new_stage, original_stage.use_install_folder, true);
            new_stage.InitFields(category, id, name, description, scene, true);
    
    
                new_stage.ResetSaves();
    
    
            StageStatic.stage = new_stage;
    
            new_stage.store(force_stage_file: true );
            new_stage.store(force_stage_file: false);
    
            return true;
        }
    
        public void Clone()
        {
            if (!_Clone(false))
                return;
    
            StageStatic.SetStage(name, true);
            StageStatic.LoadCreate();
        }
    
        private bool _Save()
        {
            if (!_Clone(true))
                return false;
    
            if (name != original_stage.name)
            // has not been overridden
                _Delete();
    
            return true;
        }
    
        public void Save()
        {
    
    Marco Zimmer's avatar
    Marco Zimmer committed
            if (original_stage.use_install_folder)
            {
    
                Error(StageStatic.StageErrorStruct.InvalidFolder);
    
            if (!_Save())
                return;
    
            pageMenue.RevertMode();
        }
    
        public void Edit()
        {
    
    Marco Zimmer's avatar
    Marco Zimmer committed
            if (original_stage.use_install_folder)
            {
    
                Error(StageStatic.StageErrorStruct.InvalidFolder);
    
            _Save();
    
            StageStatic.SetStage(name, true);
            StageStatic.LoadCreate();
        }
    }