Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Story Arc Editor #4020

Draft
wants to merge 48 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
5164532
Add startup button for story arc editor
AaronGullickson Apr 22, 2024
ca96ed2
Add frame for StoryArcEditorGUI and ability to get there from splash …
AaronGullickson Apr 22, 2024
4e5e6cd
Add StoryPointTableModel and corresponding table to GUI
AaronGullickson Apr 22, 2024
d002bbc
Add StoryPointEditorPanel framework (WIP)
AaronGullickson Apr 22, 2024
2a7f60a
Add information on linking storypoints to StoryPointEditorPanel
AaronGullickson Apr 22, 2024
4936a11
Add beginning of story outcomes table to StoryPointEditorPanel
AaronGullickson Apr 22, 2024
c58bf35
Add default outcomes to story outcome table in StoryPointEditorPanel
AaronGullickson Apr 22, 2024
33a7c42
Report next story point name rather than id in outcome table for Stor…
AaronGullickson Apr 22, 2024
6c92c0b
Add class name for each story point
AaronGullickson Apr 22, 2024
fb4dd58
Create StoryPointHyperLinkListener
AaronGullickson Apr 23, 2024
19cb0da
Try another approach to displaying StoryOutcomes in StoryPointEditoPa…
AaronGullickson Apr 23, 2024
4efcbb6
Preventing JLabel wrapping with <nobr> tag
AaronGullickson Apr 23, 2024
0f9f924
Add getAllPossibleResults method to StoryPoint
AaronGullickson Apr 23, 2024
e0aa366
Make delete outcome button function in StoryPointEditorPanel
AaronGullickson Apr 24, 2024
a998aa7
Add StoryTrigger description
AaronGullickson Apr 24, 2024
891acf3
Refactor StoryPointHyperLinkListener to gui
AaronGullickson Apr 24, 2024
d803935
Use static token for STORYPOINT in hyperlinklistener
AaronGullickson Apr 24, 2024
54f4686
Add CustomizeStoryOutcomeDialog
AaronGullickson Apr 24, 2024
2eb1fd1
Make add outcome button functional in StoryPointEditorPanel
AaronGullickson Apr 24, 2024
212b0c6
Add actual possible results for CheckStringVariableStoryPoint
AaronGullickson Apr 24, 2024
b2cfbe0
Improve layout of Add StoryOutcome button and combobox
AaronGullickson Apr 24, 2024
35c698c
Add missing space
AaronGullickson Apr 24, 2024
b44680b
Disallow CURRENT as a possible result for ScenarioStoryPoint
AaronGullickson Apr 24, 2024
87bab0b
Fix graphical artifact when updating story outcomes
AaronGullickson Apr 24, 2024
3a8633d
Add save and cancel button for name in StoryPointEditorPanel
AaronGullickson Apr 24, 2024
8f16056
Change title of story arc editor
AaronGullickson Apr 24, 2024
90ddeaf
Remove StoryOutcomeModel
AaronGullickson Apr 24, 2024
14e16bc
Set up story trigger panel in CustomizeStoryOutcomeDialog
AaronGullickson Apr 24, 2024
d894c65
Add storytriggerpanels
AaronGullickson Apr 27, 2024
17ec557
Merge branch 'master' into story-arc-editor
AaronGullickson May 7, 2024
63fe8fa
Redesign CustomizeStoryOUtcomeDialog for display of triggerpanels
AaronGullickson May 8, 2024
4482900
Make StoryTrigger.getStoryArc public
AaronGullickson May 8, 2024
6668390
Add ChangeStringVariableStoryTriggerPanel
AaronGullickson May 8, 2024
0f701f9
Add SwitchTabStoryTriggerPanel
AaronGullickson May 8, 2024
e78a901
Pass in proper subclass to StoryTriggerPanel
AaronGullickson May 8, 2024
e2e4f31
Make combobox private
AaronGullickson May 8, 2024
5b2a867
Add CompleteMissionStoryTriggerPanel
AaronGullickson May 8, 2024
a51979b
Add SetDateStoryTriggerPanel
AaronGullickson May 8, 2024
b6e20b4
Add delete button for triggers in StoryTriggerPanel
AaronGullickson May 8, 2024
8020621
Merge branch 'master' into story-arc-editor
AaronGullickson May 8, 2024
04895c5
Make delete trigger button functional
AaronGullickson May 11, 2024
ba3e117
Remove unused function
AaronGullickson May 11, 2024
44009fc
Set layout of SwitchTabStoryTriggerPanel to GridBagLayout
AaronGullickson May 11, 2024
dd43f6f
Add AdvanceTimeStoryTriggerPanel
AaronGullickson May 28, 2024
46e66cf
Add EndArc and GameOver StoryTriggerPanels
AaronGullickson May 28, 2024
4647b66
Add story trigger drop down selector
AaronGullickson May 28, 2024
037d14e
Correct layout of CompleteMissionStoryTriggerPanel
AaronGullickson May 28, 2024
e579c30
Fix conflicts
AaronGullickson May 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MekHQ/resources/mekhq/resources/GUI.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1190,7 +1190,7 @@ btnNewCampaign.text=Start a New Campaign
btnLoadCampaign.text=Load a Campaign
btnLoadLastCampaign.text=Load Last Save
btnLoadStoryArc.text=Load a Story Arc

btnStoryArcEditor.text=Story Arc Editor

##### Panes
#### RankSystemsPane Class
Expand Down
4 changes: 4 additions & 0 deletions MekHQ/resources/mekhq/resources/StoryArcEditorGUI.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
fileMenu.text=File
miNewArc.text=New Story Arc...
miLoadArc.text=Load Story Arc...
miSaveArc.text=Save Story Arc
7 changes: 7 additions & 0 deletions MekHQ/src/mekhq/MekHQ.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@
import mekhq.campaign.mission.AtBContract;
import mekhq.campaign.mission.AtBScenario;
import mekhq.campaign.mission.Scenario;
import mekhq.campaign.storyarc.StoryArc;
import mekhq.campaign.stratcon.StratconRulesManager;
import mekhq.campaign.unit.Unit;
import mekhq.gui.CampaignGUI;
import mekhq.gui.StoryArcEditorGUI;
import mekhq.gui.dialog.ResolveScenarioWizardDialog;
import mekhq.gui.dialog.RetirementDefectionDialog;
import mekhq.gui.panels.StartupScreenPanel;
Expand Down Expand Up @@ -95,6 +97,7 @@ public class MekHQ implements GameListener {
// the actual campaign - this is where the good stuff is
private CampaignController campaignController;
private CampaignGUI campaignGUI;
private StoryArcEditorGUI storyArcEditorGUI;

private IconPackage iconPackage = new IconPackage();

Expand Down Expand Up @@ -246,6 +249,10 @@ public void showNewView() {
campaignGUI = new CampaignGUI(this);
}

public void showNewStoryArcEditor(StoryArc arc) {
storyArcEditorGUI = new StoryArcEditorGUI(this, arc);
}

/**
* Main method launching the application.
*/
Expand Down
36 changes: 36 additions & 0 deletions MekHQ/src/mekhq/StoryPointHyperLinkListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package mekhq;

import mekhq.campaign.storyarc.StoryArc;
import mekhq.gui.StoryArcEditorGUI;
import org.apache.logging.log4j.LogManager;

import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import java.util.UUID;

public class StoryPointHyperLinkListener implements HyperlinkListener {

private StoryArc storyArc;
private StoryArcEditorGUI editorGUI;

public static final String STORYPOINT = "STORYPOINT";

public StoryPointHyperLinkListener(final StoryArc arc, final StoryArcEditorGUI gui) {
this.storyArc = arc;
this.editorGUI = gui;
}

@Override
public void hyperlinkUpdate(HyperlinkEvent evt) {
if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (evt.getDescription().startsWith(STORYPOINT)) {
try {
final UUID id = UUID.fromString(evt.getDescription().split(":")[1]);
editorGUI.focusOnStoryPoint(id);
} catch (Exception e) {
LogManager.getLogger().error("", e);
}
}
}
}
}
4 changes: 4 additions & 0 deletions MekHQ/src/mekhq/campaign/storyarc/StoryArc.java
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ private UUID getStartingPointId() {
return startingPointId;
}

public List<StoryPoint> getStoryPoints() {
return new ArrayList<StoryPoint>(storyPoints.values());
}

public void setInitCampaignPath(String s) {
this.initCampaignPath =s;
}
Expand Down
14 changes: 13 additions & 1 deletion MekHQ/src/mekhq/campaign/storyarc/StoryOutcome.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,34 @@ public class StoryOutcome {
/** A list of StoryTriggers to replace the defaults on this outcome */
List<StoryTrigger> storyTriggers;

StoryOutcome() {
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}
Expand Down
40 changes: 38 additions & 2 deletions MekHQ/src/mekhq/campaign/storyarc/StoryPoint.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,15 @@ public void setStoryArc(StoryArc a) {
}
}

protected StoryArc getStoryArc() {
public StoryArc getStoryArc() {
return storyArc;
}

public void setId(UUID id) {
this.id = id;
}

protected UUID getId() {
public UUID getId() {
return id;
}

Expand All @@ -134,13 +134,25 @@ public String getName() {
return name;
}

public UUID getNextStoryPointId() {
return nextStoryPointId;
}

public Image getImage() {
if(storySplash.isDefault()) {
return null;
}
return storySplash.getImage();
}

public List<StoryOutcome> getStoryOutcomes() {
return new ArrayList<StoryOutcome>(storyOutcomes.values());
}

public List<StoryTrigger> getStoryTriggers() {
return storyTriggers;
}

/**
* Do whatever needs to be done to start this story point. Specific story point types may need to override this
*/
Expand Down Expand Up @@ -234,6 +246,30 @@ public Campaign getCampaign() {
return getStoryArc().getCampaign();
}

public List<StoryPoint> getLinkingStoryPoints() {
List previous = new ArrayList<StoryPoint>();
UUID nextId;
for (StoryPoint otherStoryPoint : storyArc.getStoryPoints()) {
nextId = otherStoryPoint.getNextStoryPointId();
if ((nextId != null) && (nextId.equals(getId()))) {
previous.add(otherStoryPoint);
continue;
}
for( StoryOutcome outcome : otherStoryPoint.getStoryOutcomes()) {
nextId = outcome.getNextStoryPointId();
if ((nextId != null) && (nextId.equals(getId()))) {
previous.add(otherStoryPoint);
continue;
}
}
}
return previous;
}

public String getHyperlinkedName() {
return String.format("<a href='STORYPOINT:%s'>%s</a>", getId(), getName());
}

//region I/O
public abstract void writeToXml(PrintWriter pw1, int indent);

Expand Down
Loading
Loading