Skip to content

Commit 214c55a

Browse files
committed
finished functions
1 parent 7bcca41 commit 214c55a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1246
-183
lines changed

src/main/java/io/github/techstreet/dfscript/commands/misc/ScriptsCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.github.techstreet.dfscript.script.Script;
1212
import io.github.techstreet.dfscript.script.ScriptManager;
1313
import io.github.techstreet.dfscript.script.values.ScriptValue;
14+
import io.github.techstreet.dfscript.script.values.ScriptVariable;
1415
import io.github.techstreet.dfscript.util.chat.ChatUtil;
1516
import java.util.List;
1617
import java.util.Map.Entry;
@@ -64,7 +65,7 @@ public void register(CommandDispatcher<FabricClientCommandSource> cd) {
6465
private void listVars(String script, String filter) {
6566
for (Script s : ScriptManager.getInstance().getScripts()) {
6667
if (s.getName().replaceAll(" ", "_").equals(script)) {
67-
List<Entry<String, ScriptValue>> vars = s.getContext().variables().list(filter);
68+
List<Entry<String, ScriptVariable>> vars = s.getContext().variables().list(filter);
6869

6970
int showing = Math.min(vars.size(), 50);
7071
int filtered = vars.size();
@@ -79,7 +80,7 @@ private void listVars(String script, String filter) {
7980
}
8081

8182
for (int i = 0; i < showing; i++) {
82-
Entry<String, ScriptValue> e = vars.get(i);
83+
Entry<String, ScriptVariable> e = vars.get(i);
8384
ChatUtil.info(e.getKey() + ": " + e.getValue().asText());
8485
}
8586
return;

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddArgumentScreen.java

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
import io.github.techstreet.dfscript.screen.widget.CTextField;
77
import io.github.techstreet.dfscript.script.Script;
88
import io.github.techstreet.dfscript.script.ScriptParametrizedPart;
9-
import io.github.techstreet.dfscript.script.argument.ScriptNumberArgument;
10-
import io.github.techstreet.dfscript.script.argument.ScriptTextArgument;
11-
import io.github.techstreet.dfscript.script.argument.ScriptVariableArgument;
12-
import io.github.techstreet.dfscript.script.argument.ScriptVariableScope;
9+
import io.github.techstreet.dfscript.script.argument.*;
10+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
11+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1312
import net.minecraft.item.ItemStack;
1413
import net.minecraft.item.Items;
1514
import net.minecraft.text.Style;
@@ -18,15 +17,18 @@
1817
public class ScriptAddArgumentScreen extends CScreen {
1918

2019
private final Script script;
20+
21+
private final ScriptHeader header;
2122
private final ScriptParametrizedPart action;
2223

23-
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index) {
24-
this(script,action,index,null);
24+
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, ScriptHeader header) {
25+
this(script,action,index, header,null);
2526
}
26-
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, String overwrite) {
27+
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, ScriptHeader header, String overwrite) {
2728
super(100, 50);
2829
this.script = script;
2930
this.action = action;
31+
this.header = header;
3032

3133
CTextField input = new CTextField("Input", 2, 2, 96, 35, true);
3234
if(overwrite != null) input.setText(overwrite);
@@ -51,27 +53,32 @@ public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int
5153
configValueIcon.setCustomName(Text.literal("Config Value")
5254
.fillStyle(Style.EMPTY.withItalic(false)));
5355

56+
ItemStack functionArgumentIcon = new ItemStack(Items.BLUE_DYE);
57+
functionArgumentIcon.setCustomName(Text.literal("Function Argument")
58+
.fillStyle(Style.EMPTY.withItalic(false)));
59+
5460

5561
CItem addNumber = new CItem(2, 40, numberIcon);
5662
CItem addText = new CItem(12, 40, textIcon);
5763
CItem addVariable = new CItem(22, 40, variableIcon);
5864
CItem addClientValue = new CItem(32, 40, clientValueIcon);
5965
CItem addConfigValue = new CItem(42, 40, configValueIcon);
66+
CItem addFunctionArgument = new CItem(52, 40, functionArgumentIcon);
6067

6168
input.setChangedListener(() -> input.textColor = 0xFFFFFF);
6269

6370
addText.setClickListener((btn) -> {
6471
if(overwrite != null) action.getArguments().remove(index);
6572
action.getArguments().add(index, new ScriptTextArgument(input.getText()));
66-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
73+
close();
6774
});
6875

6976
addNumber.setClickListener((btn) -> {
7077
try {
7178
double number = Double.parseDouble(input.getText());
7279
if(overwrite != null) action.getArguments().remove(index);
7380
action.getArguments().add(index, new ScriptNumberArgument(number));
74-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
81+
close();
7582
} catch (Exception err) {
7683
input.textColor = 0xFF3333;
7784
}
@@ -80,15 +87,19 @@ public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int
8087
addVariable.setClickListener((btn) -> {
8188
if(overwrite != null) action.getArguments().remove(index);
8289
action.getArguments().add(index, new ScriptVariableArgument(input.getText(), ScriptVariableScope.SCRIPT));
83-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
90+
close();
8491
});
8592

8693
addClientValue.setClickListener((btn) -> {
87-
DFScript.MC.setScreen(new ScriptAddClientValueScreen(action, script, index, overwrite));
94+
DFScript.MC.setScreen(new ScriptAddClientValueScreen(action, script, index, header, overwrite));
8895
});
8996

9097
addConfigValue.setClickListener((btn) -> {
91-
DFScript.MC.setScreen(new ScriptAddConfigValueScreen(action, script, index, overwrite));
98+
DFScript.MC.setScreen(new ScriptAddConfigValueScreen(action, script, index, header, overwrite));
99+
});
100+
101+
addFunctionArgument.setClickListener((btn) -> {
102+
DFScript.MC.setScreen(new ScriptAddFunctionArgValueScreen(action, script, index, header, overwrite));
92103
});
93104

94105
widgets.add(input);
@@ -97,10 +108,13 @@ public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int
97108
widgets.add(addVariable);
98109
widgets.add(addClientValue);
99110
widgets.add(addConfigValue);
111+
if(header instanceof ScriptFunction) {
112+
widgets.add(addFunctionArgument);
113+
}
100114
}
101115

102116
@Override
103117
public void close() {
104-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
118+
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script, header));
105119
}
106120
}

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddClientValueScreen.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,22 @@
88
import io.github.techstreet.dfscript.script.ScriptPart;
99
import io.github.techstreet.dfscript.script.action.ScriptAction;
1010
import io.github.techstreet.dfscript.script.argument.ScriptClientValueArgument;
11+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1112

1213
public class ScriptAddClientValueScreen extends CScreen {
1314

1415
private final Script script;
16+
17+
private final ScriptHeader header;
1518
private final ScriptParametrizedPart action;
1619
private final int insertIndex;
1720
private static final int WIDTH = 58;
1821

19-
public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, String overwrite) {
22+
public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
2023
super(WIDTH, 58);
2124
this.script = script;
2225
this.action = action;
26+
this.header = header;
2327
this.insertIndex = insertIndex;
2428

2529
int x = 5;
@@ -29,7 +33,7 @@ public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script,
2933
item.setClickListener((btn) -> {
3034
if(overwrite != null) action.getArguments().remove(insertIndex);
3135
action.getArguments().add(insertIndex, arg);
32-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
36+
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script, header));
3337
});
3438
widgets.add(item);
3539
x += 10;
@@ -42,6 +46,6 @@ public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script,
4246

4347
@Override
4448
public void close() {
45-
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex));
49+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
4650
}
4751
}

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddConfigValueScreen.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,36 @@
99
import io.github.techstreet.dfscript.script.ScriptPart;
1010
import io.github.techstreet.dfscript.script.action.ScriptAction;
1111
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
12+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1213
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
1314

1415
public class ScriptAddConfigValueScreen extends CScreen {
1516
private final Script script;
17+
18+
private final ScriptHeader header;
1619
private final ScriptParametrizedPart action;
1720
private final int insertIndex;
1821

1922
private static int WIDTH = 200;
2023
private static int HEIGHT = 94;
2124

22-
public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, String overwrite) {
25+
public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
2326
super(WIDTH, HEIGHT);
2427
this.script = script;
2528
this.action = action;
29+
this.header = header;
2630
this.insertIndex = insertIndex;
2731

2832
CScrollPanel panel = new CScrollPanel(0, 0, WIDTH, HEIGHT);
2933

3034
int x = 5;
3135
int y = 5;
3236
for (ScriptNamedOption arg : script.getOptions()) {
33-
if(overwrite != null) action.getArguments().remove(insertIndex);
3437
CItem item = new CItem(x, y, arg.getIcon());
3538
item.setClickListener((btn) -> {
39+
if(overwrite != null) action.getArguments().remove(insertIndex);
3640
this.action.getArguments().add(insertIndex, new ScriptConfigArgument(arg.getName(), this.script));
37-
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script));
41+
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script, this.header));
3842
});
3943
panel.add(item);
4044
x += 10;
@@ -49,6 +53,6 @@ public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script,
4953

5054
@Override
5155
public void close() {
52-
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex));
56+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
5357
}
5458
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.github.techstreet.dfscript.screen.script;
2+
3+
import io.github.techstreet.dfscript.DFScript;
4+
import io.github.techstreet.dfscript.screen.CScreen;
5+
import io.github.techstreet.dfscript.screen.widget.CItem;
6+
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
7+
import io.github.techstreet.dfscript.script.Script;
8+
import io.github.techstreet.dfscript.script.ScriptParametrizedPart;
9+
import io.github.techstreet.dfscript.script.action.ScriptActionArgument;
10+
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
11+
import io.github.techstreet.dfscript.script.argument.ScriptFunctionArgument;
12+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
13+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
14+
15+
public class ScriptAddFunctionArgValueScreen extends CScreen {
16+
private final Script script;
17+
18+
private final ScriptHeader header;
19+
private final ScriptParametrizedPart action;
20+
private final int insertIndex;
21+
22+
private static int WIDTH = 200;
23+
private static int HEIGHT = 94;
24+
25+
public ScriptAddFunctionArgValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
26+
super(WIDTH, HEIGHT);
27+
this.script = script;
28+
this.action = action;
29+
this.header = header;
30+
this.insertIndex = insertIndex;
31+
32+
CScrollPanel panel = new CScrollPanel(0, 0, WIDTH, HEIGHT);
33+
34+
if(header instanceof ScriptFunction f)
35+
{
36+
int x = 5;
37+
int y = 5;
38+
for (ScriptActionArgument arg : f.argList()) {
39+
CItem item = new CItem(x, y, arg.getIcon());
40+
item.setClickListener((btn) -> {
41+
if(overwrite != null) action.getArguments().remove(insertIndex);
42+
this.action.getArguments().add(insertIndex, new ScriptFunctionArgument(arg.name(), header));
43+
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script, this.header));
44+
});
45+
panel.add(item);
46+
x += 10;
47+
if (x > WIDTH-10) {
48+
x = 5;
49+
y += 10;
50+
}
51+
}
52+
53+
widgets.add(panel);
54+
}
55+
}
56+
57+
@Override
58+
public void close() {
59+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
60+
}
61+
}

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptEditFunctionArgumentScreen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public ScriptEditFunctionArgumentScreen(Script script, ScriptFunction f, ScriptA
3333
input.textColor = 0xFF3333;
3434
} else {
3535
//script.replaceOption(option.getName(), input.getText());
36+
function.replaceArgument(argument.name(), input.getText());
3637
argument.setName(input.getText());
3738
close();
3839
}

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptEditFunctionScreen.java

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.github.techstreet.dfscript.script.Script;
99
import io.github.techstreet.dfscript.script.action.ScriptActionArgument;
1010
import io.github.techstreet.dfscript.script.event.ScriptFunction;
11+
import io.github.techstreet.dfscript.script.values.ScriptUnknownValue;
1112
import net.minecraft.client.font.TextRenderer;
1213
import net.minecraft.client.gui.DrawContext;
1314
import net.minecraft.client.sound.PositionedSoundInstance;
@@ -93,8 +94,8 @@ public void reload() {
9394
}
9495
else {
9596
nameField.textColor = 0xFFFFFF;
96-
function.setName(nameField.getText());
9797
script.replaceFunction(function.getName(), nameField.getText());
98+
function.setName(nameField.getText());
9899
}
99100
});
100101

@@ -107,16 +108,22 @@ public void reload() {
107108
}));
108109
});
109110

111+
CTextField descField = new CTextField(function.getDescription(), 5, 11, 80, 20, true);
112+
descField.setChangedListener(() -> {
113+
function.setDescription(descField.getText());
114+
});
115+
110116
panel.add(icon);
111117
panel.add(nameField);
118+
panel.add(descField);
112119

113-
int y = 15;
120+
int y = 31+4;
114121
int index = 0;
115122
for (ScriptActionArgument arg : function.argList()) {
116-
ItemStack argIcon = arg.type().icon();
123+
ItemStack argIcon = arg.getUnnamedIcon();
117124
String text = arg.name();
118125

119-
panel.add(new CItem(5, y, argIcon));
126+
panel.add(new CItem(5, y, argIcon, Text.literal((arg.optional() ? "*" : "") + (arg.plural() ? "s" : ""))));
120127
panel.add(new CText(15, y + 2, Text.literal(text)));
121128

122129
int currentIndex = index;
@@ -142,12 +149,34 @@ public boolean mouseClicked(double x, double y, int button) {
142149
contextMenuButtons.add(new ContextMenuButton("Insert Before", () -> {
143150
DFScript.MC.setScreen(new ScriptAddFunctionArgumentScreen(script, function, currentIndex));
144151
}, false));
145-
contextMenuButtons.add(new ContextMenuButton("Insert After", () -> {
146-
DFScript.MC.setScreen(new ScriptAddFunctionArgumentScreen(script, function, currentIndex+1));
147-
}, false));
152+
if (!(currentIndex == function.argList().size() - 1 && arg.plural())) {
153+
contextMenuButtons.add(new ContextMenuButton("Insert After", () -> {
154+
DFScript.MC.setScreen(new ScriptAddFunctionArgumentScreen(script, function, currentIndex + 1));
155+
}, false));
156+
}
148157
contextMenuButtons.add(new ContextMenuButton("Delete", () -> {
158+
function.removeArgument(arg.name());
159+
149160
function.argList().remove(currentIndex);
150161
}));
162+
if(arg.type().allowOptional()) {
163+
contextMenuButtons.add(new ContextMenuButton(arg.optional() ? "Required" : "Optional", () -> {
164+
arg.optional(!arg.optional());
165+
}));
166+
if(currentIndex == function.argList().size()-1) {
167+
contextMenuButtons.add(new ContextMenuButton(arg.plural() ? "Singular" : "Plural", () -> {
168+
arg.plural(!arg.plural());
169+
}));
170+
}
171+
if(arg.optional() && !arg.plural() && arg.type().getDefaultValueType() != null) {
172+
contextMenuButtons.add(new ContextMenuButton("Default Value", () -> {
173+
DFScript.MC.setScreen(new ScriptSetValueScreen(script, () -> {
174+
DFScript.MC.setScreen(new ScriptEditFunctionScreen(function, script));
175+
}, arg::defaultValue, arg.type().getDefaultValueType(),
176+
arg.defaultValue() instanceof ScriptUnknownValue ? null : arg.defaultValue().asText()));
177+
}, false));
178+
}
179+
}
151180
DFScript.MC.send(() -> {
152181
if(DFScript.MC.currentScreen instanceof ScriptEditFunctionScreen screen) {
153182
screen.contextMenu((int) x, (int) y, contextMenuButtons);
@@ -173,6 +202,7 @@ public boolean mouseClicked(double x, double y, int button) {
173202
CButton add = new CButton(25, y, 40, 8, "Add", () -> {
174203
DFScript.MC.setScreen(new ScriptAddFunctionArgumentScreen(script, function, function.argList().size()));
175204
});
176-
panel.add(add);
205+
if(function.argList().size() == 0 || !function.argList().get(function.argList().size() - 1).plural())
206+
panel.add(add);
177207
}
178208
}

0 commit comments

Comments
 (0)