Skip to content

Commit

Permalink
Furthered generics on ScriptMenuBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
umbreon22 committed Sep 15, 2019
1 parent 198e992 commit ad28f9e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 26 deletions.
4 changes: 2 additions & 2 deletions src/main/java/moe/maple/api/script/logic/ScriptAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ private static ScriptResponse askMenuResponse(MoeScript script, int max) {
}

public static IntegerActionChain askMenu(MoeScript script, int speakerTemplateId, int param, String prompt, String... menuItems) {
var builder = new ScriptMenuBuilder();
var builder = new ScriptMenuBuilder<>();
builder.append(prompt).newLine().blue().appendMenu(menuItems);

script.setScriptAction(null);
Expand Down Expand Up @@ -547,7 +547,7 @@ public static IntegerActionChain askMenu(MoeScript script, String prompt) {

@SafeVarargs
public static void askMenu(MoeScript script, String prompt, Tuple<String, BasicScriptAction>... options) {
var builder = new ScriptMenuBuilder();
var builder = new ScriptMenuBuilder<>();
builder.append(prompt).newLine().blue().appendMenu(Tuple::left, options);

script.setScriptAction(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* A builder for AskMenu.
*/

public class ScriptMenuBuilder extends StyleAndColorBuilder<ScriptMenuBuilder> implements CharacterSequenceBuilder<ScriptMenuBuilder>, AppendingBuilder<ScriptMenuBuilder>, ScriptFormatter<ScriptMenuBuilder> {
public class ScriptMenuBuilder<Builder extends ScriptMenuBuilder<Builder>> extends StyleAndColorBuilder<Builder> implements CharacterSequenceBuilder<Builder>, AppendingBuilder<Builder>, ScriptFormatter<Builder> {

private final StringBuilder textBuilder;
private int runningMenuIndex;//Used with sequential array menus
Expand All @@ -49,70 +49,68 @@ public ScriptMenuBuilder() {
this(new StringBuilder());
}

public ScriptMenuBuilder get() {
return this;
public Builder get() {
return (Builder) this;
}

@Override
public ScriptMenuBuilder append(String str) {
public Builder append(String str) {
textBuilder.append(str);
return this;
return get();
}

@Override
public ScriptMenuBuilder append(CharSequence text) {
public Builder append(CharSequence text) {
textBuilder.append(text);
return this;
return get();
}

@Override
public ScriptMenuBuilder append(Object object) {
public Builder append(Object object) {
textBuilder.append(object);
return this;
return get();
}

@Override
public ScriptMenuBuilder append(StringBuffer sb) {
public Builder append(StringBuffer sb) {
textBuilder.append(sb);
return this;
return get();
}

private static boolean isValidOption(String option) {
return option != null && !option.isEmpty();
}


public ScriptMenuBuilder appendMenu(String... options) {
public Builder appendMenu(String... options) {
for(int i = 0; i < options.length; i++) {
appendMenuItem(runningMenuIndex++, options[i]);
}
return this;
return get();
}

public ScriptMenuBuilder appendMenu(Collection<Tuple<Integer, String>> options) {
public Builder appendMenu(Collection<Tuple<Integer, String>> options) {
for (Tuple<Integer, String> option : options) {
appendMenuItem(option.left(), option.right());
}
return this;
return get();
}

public <T> ScriptMenuBuilder appendMenu(Function<T, String> formatter, T... options) {
public <T> Builder appendMenu(Function<T, String> formatter, T... options) {
for (T obj : options) {
appendMenuItem(runningMenuIndex++, formatter.apply(obj));
}
return this;
return get();
}

private ScriptMenuBuilder appendMenuItem(int index, String option) {
private Builder appendMenuItem(int index, String option) {
if(isValidOption(option)) {
textBuilder.append("#L").append(index).append("#").append(option).append("#l\r\n");
}
return this;
return get();
}



public ScriptMenuBuilder appendMenuWith(FontStyle menuStyle, FontColor menuColor, String... options) {
public Builder appendMenuWith(FontStyle menuStyle, FontColor menuColor, String... options) {
boolean appendStyle = menuStyle != FontStyle.NONE && menuStyle != this.currentStyle;
boolean appendColor = menuColor != FontColor.NONE && menuColor != this.currentColor;
if(appendStyle) {
Expand All @@ -128,7 +126,7 @@ public ScriptMenuBuilder appendMenuWith(FontStyle menuStyle, FontColor menuColor
if(appendColor) {
textBuilder.append(getColorSafe(FontColor.BLACK).prefix);
}
return this;
return get();
}

public String build() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

package moe.maple.api.script.util.builder;

public class ScriptStringBuilder extends ScriptMenuBuilder {
public class ScriptStringBuilder extends ScriptMenuBuilder<ScriptStringBuilder> {

private final StringBuilder textBuilder;

Expand Down

0 comments on commit ad28f9e

Please sign in to comment.