Skip to content

Commit a196d2a

Browse files
committed
Missions, and experiments
1 parent f3c49f5 commit a196d2a

17 files changed

Lines changed: 272 additions & 39 deletions

File tree

src/PatchManager.Missions/MissionsTypes.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ static MissionsTypes()
2020
Conditions.Add(type.Name,type);
2121
}
2222

23-
if (type.IsSubclassOf(typeof(IMissionAction)))
23+
if (typeof(IMissionAction).IsAssignableFrom(type))
2424
{
2525
Actions.Add(type.Name, type);
2626
}

src/PatchManager.Missions/Rulesets/MissionRuleset.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public INewAsset CreateNew(List<DataValue> dataValues)
2020
{
2121
var missionDataObject = new MissionData
2222
{
23-
name = dataValues[0].String
23+
ID = dataValues[0].String
2424
};
2525

2626
return new NewGenericAsset("missions", dataValues[0].String,

src/PatchManager.Missions/Selectables/ActionsSelectable.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,26 @@ public override bool MatchesClass(string @class, out DataValue classValue)
6262
return false;
6363
}
6464

65-
public override bool IsSameAs(ISelectable other) => throw new NotImplementedException();
65+
public override bool IsSameAs(ISelectable other) =>
66+
other is ActionsSelectable actionsSelectable && actionsSelectable.Actions == Actions;
6667

6768
public override IModifiable OpenModification() => new JTokenModifiable(Actions, Selectable.SetModified);
6869

6970
public override ISelectable AddElement(string elementType)
7071
{
7172
var actualType = MissionsTypes.Actions[elementType];
72-
var elementObject = JObject.FromObject(Activator.CreateInstance(actualType));
73+
var elementObject = new JObject()
74+
{
75+
["$type"] = actualType.AssemblyQualifiedName
76+
};
77+
foreach (var (key, value) in JObject.FromObject(Activator.CreateInstance(actualType)))
78+
{
79+
elementObject[key] = value;
80+
}
7381
var selectable = new JTokenSelectable(Selectable.SetModified, elementObject, token => TrimTypeName(((JObject)token)!.Value<string>()!), elementType);
7482
Children.Add(selectable);
7583
Classes.Add(elementType);
84+
Actions.Add(elementObject);
7685
return selectable;
7786
}
7887

src/PatchManager.Missions/Selectables/ConditionSetSelectable.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,14 @@ public override bool IsSameAs(ISelectable other) => other is ConditionSetSelecta
6565
public override ISelectable AddElement(string elementType)
6666
{
6767
var conditionType = MissionsTypes.Conditions[elementType];
68-
var conditionObject = JObject.FromObject(Activator.CreateInstance(conditionType));
69-
conditionObject["$type"] = conditionType.AssemblyQualifiedName;
68+
var conditionObject = new JObject()
69+
{
70+
["$type"] = conditionType.AssemblyQualifiedName
71+
};
72+
foreach (var (key, value) in JObject.FromObject(Activator.CreateInstance(conditionType)))
73+
{
74+
conditionObject[key] = value;
75+
}
7076
_children.Add(conditionObject);
7177
if (conditionType == typeof(ConditionSet))
7278
{

src/PatchManager.Missions/Selectables/ContentBranchesSelectable.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public override ISelectable AddElement(string elementType)
6161
var selectable = new ContentBranchSelectable(Selectable, obj);
6262
Children.Add(selectable);
6363
Classes.Add(elementType);
64+
ContentBranches.Add(obj);
6465
return selectable;
6566
}
6667

src/PatchManager.Missions/Selectables/MissionRewardSelectable.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Newtonsoft.Json.Linq;
22
using PatchManager.SassyPatching;
33
using PatchManager.SassyPatching.Interfaces;
4+
using PatchManager.SassyPatching.Modifiables;
45
using PatchManager.SassyPatching.Selectables;
56

67
namespace PatchManager.Missions.Selectables;
@@ -47,9 +48,11 @@ public override bool MatchesClass(string @class, out DataValue classValue)
4748
return false;
4849
}
4950

50-
public override bool IsSameAs(ISelectable other) => throw new NotImplementedException();
51+
public override bool IsSameAs(ISelectable other) => other is MissionRewardSelectable missionRewardSelectable &&
52+
missionRewardSelectable.MissionReward == MissionReward;
5153

52-
public override IModifiable OpenModification() => throw new NotImplementedException();
54+
public override IModifiable OpenModification() =>
55+
new JTokenModifiable(MissionReward, MissionSelectable.SetModified);
5356

5457
public override ISelectable AddElement(string elementType)
5558
{

src/PatchManager.Missions/Selectables/MissionSelectable.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ public MissionSelectable(JObject missionObject)
4646

4747
var stages = (JArray)MissionObject["missionStages"]!;
4848
Children.Add(new StagesSelectable(this, stages));
49-
var branches = (JArray)MissionObject["ContentBranches"]!;
49+
if (missionObject.ContainsKey("ContentBranches"))
50+
{
51+
var branches = (JArray)MissionObject["ContentBranches"]!;
52+
Children.Add(new ContentBranchesSelectable(this, branches));
53+
}
5054
}
5155

5256
public JObject MissionObject;

src/PatchManager.Missions/Selectables/StageSelectable.cs

Lines changed: 66 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json.Linq;
33
using PatchManager.SassyPatching;
44
using PatchManager.SassyPatching.Interfaces;
5+
using PatchManager.SassyPatching.Modifiables;
56
using PatchManager.SassyPatching.Selectables;
67

78
namespace PatchManager.Missions.Selectables;
@@ -12,7 +13,7 @@ public sealed class StageSelectable : BaseSelectable
1213

1314
public JObject StageObject;
1415

15-
private int ConditionIndex = 0;
16+
private int ConditionIndex = -1;
1617

1718
public StageSelectable(MissionSelectable missionSelectable, JObject stageObject)
1819
{
@@ -29,42 +30,90 @@ public StageSelectable(MissionSelectable missionSelectable, JObject stageObject)
2930
}
3031
}
3132

32-
ConditionIndex = Children.Count;
33-
if (((JObject)stageObject["scriptableCondition"]!)["ConditionType"]!.Value<string>() == "ConditionSet")
33+
if (stageObject["scriptableCondition"].Type == JTokenType.Object)
3434
{
35-
Children.Add(new ConditionSetSelectable(missionSelectable,(JObject)stageObject["scriptableCondition"]!));
35+
if (((JObject)stageObject["scriptableCondition"]!)["ConditionType"]!.Value<string>() == "ConditionSet")
36+
{
37+
38+
ConditionIndex = Children.Count;
39+
Children.Add(
40+
new ConditionSetSelectable(missionSelectable, (JObject)stageObject["scriptableCondition"]!));
41+
}
42+
else
43+
{
44+
45+
ConditionIndex = Children.Count;
46+
Children.Add(new JTokenSelectable(MissionSelectable.SetModified, stageObject["scriptableCondition"],
47+
"scriptableCondition", "scriptableCondition"));
48+
}
3649
}
37-
else
50+
51+
if (stageObject.TryGetValue("MissionReward", out var value))
3852
{
39-
Children.Add(new JTokenSelectable(MissionSelectable.SetModified, stageObject["scriptableCondition"],
40-
"scriptableCondition", "scriptableCondition"));
53+
Children.Add(new MissionRewardSelectable(MissionSelectable, (JObject)value!));
4154
}
42-
Children.Add(new MissionRewardSelectable(MissionSelectable,(JObject)stageObject["MissionReward"]!));
55+
4356
Children.Add(new ActionsSelectable(MissionSelectable,(JArray)stageObject["actions"]!));
4457
}
4558

4659
public override List<ISelectable> Children { get; }
4760
public override string Name => $"_{StageObject["StageID"]!.Value<long>()}";
4861
public override List<string> Classes { get; }
49-
public override bool MatchesClass(string @class, out DataValue classValue) => throw new NotImplementedException();
5062

51-
public override bool IsSameAs(ISelectable other) => throw new NotImplementedException();
63+
public override bool MatchesClass(string @class, out DataValue classValue)
64+
{
65+
if (StageObject.TryGetValue(@class, out var jToken))
66+
{
67+
classValue = DataValue.FromJToken(jToken);
68+
return true;
69+
}
70+
classValue = DataValue.Null;
71+
return false;
72+
}
73+
74+
public override bool IsSameAs(ISelectable other) =>
75+
other is StageSelectable stageSelectable && stageSelectable.StageObject == StageObject;
5276

53-
public override IModifiable OpenModification() => throw new NotImplementedException();
77+
public override IModifiable OpenModification() => new JTokenModifiable(StageObject,MissionSelectable.SetModified);
5478

5579
public override ISelectable AddElement(string elementType)
5680
{
5781
var conditionType = MissionsTypes.Conditions[elementType];
58-
var conditionObject = JObject.FromObject(Activator.CreateInstance(conditionType));
59-
conditionObject["$type"] = conditionType.AssemblyQualifiedName;
82+
// var conditionObject = JObject.FromObject(Activator.CreateInstance(conditionType));
83+
var conditionObject = new JObject();
84+
foreach (var (key, value) in JObject.FromObject(Activator.CreateInstance(conditionType)))
85+
{
86+
conditionObject[key] = value;
87+
}
88+
StageObject["scriptableCondition"] = conditionObject;
6089
if (conditionType == typeof(ConditionSet))
6190
{
62-
return Children[ConditionIndex] = new ConditionSetSelectable(MissionSelectable, conditionObject);
91+
var selectable = new ConditionSetSelectable(MissionSelectable, conditionObject);
92+
if (ConditionIndex > 0)
93+
{
94+
return Children[ConditionIndex] = selectable;
95+
}
96+
97+
ConditionIndex = Children.Count;
98+
Children.Add(selectable);
99+
return selectable;
100+
}
101+
else
102+
{
103+
104+
var selectable = new JTokenSelectable(MissionSelectable.SetModified, conditionObject,
105+
"scriptableCondition", "scriptableCondition");
106+
107+
if (ConditionIndex > 0)
108+
{
109+
return Children[ConditionIndex] = selectable;
110+
}
111+
112+
ConditionIndex = Children.Count;
113+
Children.Add(selectable);
114+
return selectable;
63115
}
64116

65-
StageObject["scriptableCondition"] = conditionObject;
66-
return Children[ConditionIndex] = new JTokenSelectable(MissionSelectable.SetModified, conditionObject,
67-
"scriptableCondition", "scriptableCondition");
68117
}
69118

70119
public override string Serialize() => StageObject.ToString();

src/PatchManager.Missions/Selectables/StagesSelectable.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public override ISelectable AddElement(string elementType)
6161
Classes.Add(elementType);
6262
var selectable = new StageSelectable(MissionSelectable, stage);
6363
Children.Add(selectable);
64+
Stages.Add(stage);
6465
return selectable;
6566
}
6667

src/PatchManager.SassyPatching/Execution/SassyTextPatcher.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ internal SassyTextPatcher(Environment environmentSnapshot, SelectionBlock rootSe
4242
// Priority = global.Universe.AllStages[stageName];
4343
// }
4444
var global = environmentSnapshot.GlobalEnvironment;
45+
OriginalGuid = environmentSnapshot.GlobalEnvironment.ModGuid;
4546
var universe = global.Universe;
4647
PriorityString =
4748
rootSelectionBlock.Attributes.OfType<RunAtStageAttribute>().FirstOrDefault() is { } runAtStageAttribute
@@ -50,8 +51,8 @@ internal SassyTextPatcher(Environment environmentSnapshot, SelectionBlock rootSe
5051

5152
}
5253

53-
public string OriginalGuid { get; internal set; }
54-
public string PriorityString { get; internal set; }
54+
public string OriginalGuid { get; }
55+
public string PriorityString { get; }
5556

5657
/// <inheritdoc />
5758
public ulong Priority { get; set; }

0 commit comments

Comments
 (0)