Skip to content
Snippets Groups Projects
Commit 21e49b9e authored by Marco Zimmer's avatar Marco Zimmer
Browse files

+exp repair for cloning/saving stages -- needs testing

parent 036a8d5a
Branches
No related tags found
No related merge requests found
...@@ -52,12 +52,46 @@ private static List<Directories> ...@@ -52,12 +52,46 @@ private static List<Directories>
public Stage() public Stage()
{ {
solution = new SolutionOrganizer(); InitOOP();
player_record = new PlayerRecord(record_name);
player_record_list = new Dictionary<string, PlayerRecord>();
} }
public Stage(string category, int number, string name, string description, string scene, bool local = true) 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.category = category;
this.number = number; this.number = number;
...@@ -65,28 +99,54 @@ public Stage(string category, int number, string name, string description, strin ...@@ -65,28 +99,54 @@ public Stage(string category, int number, string name, string description, strin
this.description = description; this.description = description;
this.scene = scene; this.scene = scene;
this.use_install_folder = !local; this.use_install_folder = !local;
}
private void InitOOP()
{
solution = new SolutionOrganizer(); solution = new SolutionOrganizer();
player_record = new PlayerRecord(record_name); player_record = new PlayerRecord(record_name);
player_record_list = new Dictionary<string, PlayerRecord>(); 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; solution.hardreset(false);
this.player_record = get.player_record; solution = new SolutionOrganizer();
this.player_record_list = get.player_record_list;
} }
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 ??= new List<Directories>();
hierarchie.AddRange(hierStage.AsEnumerable()); hierarchie.AddRange(hierStage.AsEnumerable());
if (record.factState != null)
record.factState.hardreset();
record.delete(hierarchie); record.delete(hierarchie);
player_record_list.Remove(record.name); player_record_list.Remove(record.name);
hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count); hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count);
if(b_store)
store(); store();
} }
...@@ -183,13 +243,13 @@ public void delete(bool player_record_too) ...@@ -183,13 +243,13 @@ public void delete(bool player_record_too)
hierarchie.RemoveRange(hierarchie.Count - hierStage.Count, hierStage.Count); 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 ??= new List<Directories>();
hierarchie.AddRange(hierStage.AsEnumerable()); hierarchie.AddRange(hierStage.AsEnumerable());
player_record.name = record_name; player_record.name = record_name;
if (reset) if (reset_player)
player_record = new PlayerRecord(record_name); player_record = new PlayerRecord(record_name);
//if (creatorMode || StageStatic.devel) //if (creatorMode || StageStatic.devel)
...@@ -320,14 +380,14 @@ public static Dictionary<string, Stage> Grup(List<Directories> hierarchie = null ...@@ -320,14 +380,14 @@ public static Dictionary<string, Stage> Grup(List<Directories> hierarchie = null
public void ResetPlay() public void ResetPlay()
{ {
player_record = new PlayerRecord(record_name); ClearPlay();
store(true); store(true);
} }
public void ResetSaves() public void ResetSaves()
{ {
player_record = new PlayerRecord(record_name); ClearPlay();
player_record_list = new Dictionary<string, PlayerRecord>(); ClearALLRecords();
store(true); store(true);
} }
......
...@@ -13,6 +13,8 @@ void Start() ...@@ -13,6 +13,8 @@ void Start()
private void OnDestroy() private void OnDestroy()
{ {
StageStatic.devel = false; StageStatic.devel = false;
StageStatic.stage.solution.hardreset();
StageStatic.stage.factState.hardreset();
} }
public void SetDevel(bool devel) public void SetDevel(bool devel)
......
...@@ -61,8 +61,7 @@ private bool _Clone(bool overwrite) ...@@ -61,8 +61,7 @@ private bool _Clone(bool overwrite)
return false; return false;
} }
Stage new_stage = new Stage(category, id, name, description, scene, true); Stage new_stage = new Stage(original_stage, category, id, name, description, scene, true);
new_stage.CopyStates(original_stage);
if (!overwrite) if (!overwrite)
new_stage.ResetSaves(); new_stage.ResetSaves();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment