-
Notifications
You must be signed in to change notification settings - Fork 1
/
SplitStruct.cs
123 lines (103 loc) · 2.79 KB
/
SplitStruct.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace LiveSplit.RedFaction
{
public class Mod : ICloneable
{
[XmlAttribute] public string ModName;
[XmlArrayItem] public List<SplitStructOverall> Splits;
public Mod()
{
ModName = "";
Splits = null;
}
public Mod(string ModName, List<SplitStructOverall> Splits)
{
this.ModName = ModName;
this.Splits = Splits;
}
public object Clone()
{
var newSplits = new List<SplitStructOverall>();
for(int i=0; i<this.Splits.Count; i++)
{
newSplits.Add(this.Splits[i].Clone());
}
return new Mod(this.ModName, newSplits);
}
public override string ToString() => ModName;
}
[Serializable]
public abstract class SplitStructOverall
{
[XmlAttribute] public bool Split { get; set; }
[XmlAttribute] public string Name { get; set; }
public SplitStructOverall()
{
Split = false;
Name = "";
}
public abstract SplitStructOverall Clone();
internal abstract bool Check(in string levelName, in string prevLevelName, in bool isMoviePlaying);
}
[Serializable]
public class SplitLevelChange : SplitStructOverall
{
[XmlIgnore] public string PreviousLevelName;
[XmlIgnore] public string CurrentLevelName;
public SplitLevelChange()
{
Split = false;
Name = "";
PreviousLevelName = "";
CurrentLevelName = "";
}
public SplitLevelChange(string Name, string PreviousLevelName, string CurrentLevelName)
{
this.Split = true;
this.Name = Name;
this.PreviousLevelName = PreviousLevelName;
this.CurrentLevelName = CurrentLevelName;
}
public override SplitStructOverall Clone()
{
return new SplitLevelChange() { Split = this.Split, Name = this.Name, PreviousLevelName = this.PreviousLevelName, CurrentLevelName = this.CurrentLevelName };
}
internal override bool Check(in string levelName, in string prevLevelName, in bool isMoviePlaying)
{
if (this.Split && this.CurrentLevelName == levelName && this.PreviousLevelName == prevLevelName)
return true;
else
return false;
}
}
[Serializable]
public class SplitVideoPlays : SplitStructOverall
{
[XmlIgnore] public string CurrentLevelName;
public SplitVideoPlays()
{
Split = false;
Name = "";
CurrentLevelName = "";
}
public SplitVideoPlays(string Name, string CurrentLevelName)
{
this.Split = true;
this.Name = Name;
this.CurrentLevelName = CurrentLevelName;
}
public override SplitStructOverall Clone()
{
return new SplitVideoPlays() { Split = this.Split, Name = this.Name, CurrentLevelName = this.CurrentLevelName };
}
internal override bool Check(in string levelName, in string prevLevelName, in bool isMoviePlaying)
{
if (this.Split && isMoviePlaying && this.CurrentLevelName == levelName)
return true;
else
return false;
}
}
}