-
Notifications
You must be signed in to change notification settings - Fork 183
/
Copy pathStoryOutcome.java
129 lines (106 loc) · 3.94 KB
/
StoryOutcome.java
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
124
125
126
127
128
129
/*
* StoryOutcome.java
*
* Copyright (c) 2021 - The MegaMek Team. All Rights Reserved
*
* This file is part of MekHQ.
*
* MekHQ is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MekHQ is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MekHQ. If not, see <http://www.gnu.org/licenses/>.
*/
package mekhq.campaign.storyarc;
import megamek.Version;
import mekhq.utilities.MHQXMLUtility;
import mekhq.campaign.Campaign;
import org.apache.logging.log4j.LogManager;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
import java.util.ArrayList;
/**
* This class controls what happens when a story point is completed and a certain result is achieved. Basically, it
* tracks an alternate `nextStoryPointId` and a list of {@link StoryTrigger StoryTrigger} objects that will replace
* the default
*/
public class StoryOutcome {
/** result this outcome is tied too **/
String result;
/** id of the next story point to start. Can be null **/
private UUID nextStoryPointId;
/** A list of StoryTriggers to replace the defaults on this outcome */
List<StoryTrigger> storyTriggers;
public StoryOutcome() {
storyTriggers = new ArrayList<>();
}
public String getResult() {
return result;
}
public void setResult(String r) {
this.result = r;
}
public UUID getNextStoryPointId() {
return nextStoryPointId;
}
public void setNextStoryPointId(UUID id) {
this.nextStoryPointId = id;
}
public List<StoryTrigger> getStoryTriggers() {
return storyTriggers;
}
public void setStoryTriggers(List<StoryTrigger> triggers) {
this.storyTriggers = triggers;
}
/**
* Set the StoryArc on all StoryTriggers here
* @param a a {@link StoryArc StoryArc}
*/
public void setStoryArc(StoryArc a) {
for (StoryTrigger storyTrigger : storyTriggers) {
storyTrigger.setStoryArc(a);
}
}
//region File I/O
public void writeToXml(PrintWriter pw1, int indent) {
MHQXMLUtility.writeSimpleXMLOpenTag(pw1, indent++, "storyOutcome", "result", result);
MHQXMLUtility.writeSimpleXMLTag(pw1, indent, "nextStoryPointId", nextStoryPointId);
if (!storyTriggers.isEmpty()) {
for (StoryTrigger trigger : storyTriggers) {
trigger.writeToXml(pw1, indent);
}
}
MHQXMLUtility.writeSimpleXMLCloseTag(pw1, --indent, "storyOutcome");
}
public static StoryOutcome generateInstanceFromXML(Node wn, Campaign c, Version v) {
StoryOutcome retVal = null;
try {
retVal = new StoryOutcome();
retVal.result = wn.getAttributes().getNamedItem("result").getTextContent().trim();
// Okay, now load specific fields!
NodeList nl = wn.getChildNodes();
for (int x = 0; x < nl.getLength(); x++) {
Node wn2 = nl.item(x);
if (wn2.getNodeName().equalsIgnoreCase("nextStoryPointId")) {
retVal.nextStoryPointId = UUID.fromString(wn2.getTextContent().trim());
} else if(wn2.getNodeName().equalsIgnoreCase("storyTrigger")) {
StoryTrigger trigger = StoryTrigger.generateInstanceFromXML(wn2, c, v);
retVal.storyTriggers.add(trigger);
}
}
} catch (Exception ex) {
LogManager.getLogger().error(ex);
}
return retVal;
}
}