From 21e49b9e758e3a27647bcc6eef4857c75507f1fe Mon Sep 17 00:00:00 2001 From: MaZiFAU <marco.alexander.zimmer@fau.de> Date: Wed, 15 Sep 2021 00:59:50 +0200 Subject: [PATCH] +exp repair for cloning/saving stages -- needs testing --- Assets/Scripts/Loading/Stage.cs | 88 ++++++++++++++++--- Assets/Scripts/StageBehaviour.cs | 2 + .../UI/MainMenue/PageLoader/EditLoader.cs | 5 +- 3 files changed, 78 insertions(+), 17 deletions(-) diff --git a/Assets/Scripts/Loading/Stage.cs b/Assets/Scripts/Loading/Stage.cs index b053893f..5830eef2 100644 --- a/Assets/Scripts/Loading/Stage.cs +++ b/Assets/Scripts/Loading/Stage.cs @@ -52,12 +52,46 @@ private static List<Directories> public Stage() { - solution = new SolutionOrganizer(); - player_record = new PlayerRecord(record_name); - player_record_list = new Dictionary<string, PlayerRecord>(); + InitOOP(); } public Stage(string category, int number, string name, string description, string scene, bool local = true) + { + InitFields(category, number, name, description, scene, local); + InitOOP(); + } + + public Stage(Stage get, string category, int number, string name, string description, string scene, bool local = true) + { + Stage cpy = new Stage(); + // "DeepCopy" of ref-types, 'cause screw c# and ICloneable + load(ref cpy, get.name, null, get.use_install_folder); + this.hierarchie = cpy.hierarchie; + this.solution = cpy.solution; + this.player_record = cpy.player_record; + this.player_record_list = cpy.player_record_list; + + InitFields(category, number, name, description, scene, local); + + hierarchie ??= new List<Directories>(); + hierarchie.AddRange(hierStage.AsEnumerable()); + + player_record.load(hierarchie); + player_record.name = player_record.name.Replace(get.record_name, record_name); + player_record.store(hierarchie, false); + + foreach (var record in player_record_list.Values) + { + record.load(hierarchie); + record.name = record.name.Replace(get.record_name, record_name); + record.store(hierarchie, false); + } + + hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count); + store(false); + } + + public void InitFields(string category, int number, string name, string description, string scene, bool local) { this.category = category; this.number = number; @@ -65,29 +99,55 @@ public Stage(string category, int number, string name, string description, strin this.description = description; this.scene = scene; this.use_install_folder = !local; + } + private void InitOOP() + { solution = new SolutionOrganizer(); player_record = new PlayerRecord(record_name); player_record_list = new Dictionary<string, PlayerRecord>(); } - public void CopyStates(Stage get) + public void ClearAll() + { + ClearSolution(); + ClearPlay(); + ClearALLRecords(); + } + + public void ClearSolution() { - this.solution = get.solution; - this.player_record = get.player_record; - this.player_record_list = get.player_record_list; + solution.hardreset(false); + solution = new SolutionOrganizer(); } - public void deletet_record(PlayerRecord record) + public void ClearPlay() + { + player_record.factState.hardreset(false); + player_record = new PlayerRecord(record_name); + } + + public void ClearALLRecords() + { + foreach (var record in player_record_list.Values) + deletet_record(record, false); + + player_record_list = new Dictionary<string, PlayerRecord>(); + } + + public void deletet_record(PlayerRecord record, bool b_store = true) { hierarchie ??= new List<Directories>(); hierarchie.AddRange(hierStage.AsEnumerable()); + if (record.factState != null) + record.factState.hardreset(); record.delete(hierarchie); player_record_list.Remove(record.name); hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count); - store(); + if(b_store) + store(); } public bool set_record(PlayerRecord record) @@ -183,13 +243,13 @@ public void delete(bool player_record_too) hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count); } - public void store(bool reset = false) + public void store(bool reset_player = false) { hierarchie ??= new List<Directories>(); hierarchie.AddRange(hierStage.AsEnumerable()); player_record.name = record_name; - if (reset) + if (reset_player) player_record = new PlayerRecord(record_name); //if (creatorMode || StageStatic.devel) @@ -320,14 +380,14 @@ public static Dictionary<string, Stage> Grup(List<Directories> hierarchie = null public void ResetPlay() { - player_record = new PlayerRecord(record_name); + ClearPlay(); store(true); } public void ResetSaves() { - player_record = new PlayerRecord(record_name); - player_record_list = new Dictionary<string, PlayerRecord>(); + ClearPlay(); + ClearALLRecords(); store(true); } diff --git a/Assets/Scripts/StageBehaviour.cs b/Assets/Scripts/StageBehaviour.cs index ab8da2ba..4985a8ca 100644 --- a/Assets/Scripts/StageBehaviour.cs +++ b/Assets/Scripts/StageBehaviour.cs @@ -13,6 +13,8 @@ void Start() private void OnDestroy() { StageStatic.devel = false; + StageStatic.stage.solution.hardreset(); + StageStatic.stage.factState.hardreset(); } public void SetDevel(bool devel) diff --git a/Assets/Scripts/UI/MainMenue/PageLoader/EditLoader.cs b/Assets/Scripts/UI/MainMenue/PageLoader/EditLoader.cs index 30746e3c..ed8f0a58 100644 --- a/Assets/Scripts/UI/MainMenue/PageLoader/EditLoader.cs +++ b/Assets/Scripts/UI/MainMenue/PageLoader/EditLoader.cs @@ -61,9 +61,8 @@ private bool _Clone(bool overwrite) return false; } - Stage new_stage = new Stage(category, id, name, description, scene, true); - new_stage.CopyStates(original_stage); - if(!overwrite) + Stage new_stage = new Stage(original_stage, category, id, name, description, scene, true); + if (!overwrite) new_stage.ResetSaves(); StageStatic.stage = new_stage; -- GitLab