diff --git a/Assets/Scripts/Loading/Stage.cs b/Assets/Scripts/Loading/Stage.cs index b053893f3f5c02d74c7e00fb11369b85313b7a97..5830eef2fd2036df69864a8bc2a4401bd58d17d6 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 ab8da2ba504b7464a6c03bc1966bcd19ab520dbc..4985a8cae3e2134e08ca426df1eb9f5d5e9d9ea1 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 30746e3c76b2b5715854dc7c1c4d0b32c6a49127..ed8f0a58e86fc20eeadd3a143808dcea07de2d68 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;