Skip to content

Commit 464f52b

Browse files
Replace Lua with Groovy and add test scripts
1 parent fbf802a commit 464f52b

File tree

9 files changed

+167
-5
lines changed

9 files changed

+167
-5
lines changed

assets/new_screen.groovy

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import com.badlogic.gdx.Gdx
2+
import com.badlogic.gdx.Input
3+
import com.badlogic.gdx.graphics.Color
4+
import com.badlogic.gdx.graphics.Texture
5+
import com.badlogic.gdx.graphics.g2d.Sprite
6+
import me.stringfromjava.funkin.Funkin
7+
import me.stringfromjava.funkin.backend.display.FunkinScreen
8+
import me.stringfromjava.funkin.backend.system.Paths
9+
10+
Funkin.Signals.postRender.add { params ->
11+
if (Gdx.input.isKeyJustPressed(Input.Keys.P)) {
12+
Funkin.setScreen(new ScriptedScreen())
13+
}
14+
}
15+
16+
class ScriptedScreen extends FunkinScreen {
17+
18+
private Sprite sprite
19+
20+
ScriptedScreen() {
21+
super()
22+
println('a new scripted screen was just created!')
23+
}
24+
25+
@Override
26+
void show() {
27+
super.show()
28+
29+
bgColor = new Color(1, 0, 0, 1)
30+
31+
sprite = new Sprite(new Texture(Paths.image('notes')))
32+
add(sprite)
33+
34+
Funkin.playMusic("songs/darnell/Inst.ogg")
35+
}
36+
37+
@Override
38+
void render(float delta) {
39+
super.render(delta)
40+
41+
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
42+
sprite.y += 300 * delta
43+
}
44+
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
45+
sprite.x -= 300 * delta
46+
}
47+
if (Gdx.input.isKeyPressed(Input.Keys.S)) {
48+
sprite.y -= 300 * delta
49+
}
50+
if (Gdx.input.isKeyPressed(Input.Keys.D)) {
51+
sprite.x += 300 * delta
52+
}
53+
}
54+
}

assets/test.groovy

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import com.badlogic.gdx.Gdx
2+
import com.badlogic.gdx.Input
3+
import com.badlogic.gdx.graphics.Texture
4+
import com.badlogic.gdx.graphics.g2d.Sprite
5+
import groovy.transform.Field
6+
import me.stringfromjava.funkin.Funkin
7+
import me.stringfromjava.funkin.backend.system.Paths
8+
9+
@Field int count = 0
10+
11+
count++
12+
13+
println(count)
14+
15+
var newSprite = new Sprite(new Texture(Paths.shared("images/transitionSwag/stickers-set-1/bfSticker1.png")))
16+
Funkin.screen.add(newSprite)
17+
18+
Funkin.Signals.postRender.add { params ->
19+
var delta = Gdx.graphics.getDeltaTime()
20+
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
21+
newSprite.y += 300 * delta
22+
}
23+
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
24+
newSprite.x -= 300 * delta
25+
}
26+
if (Gdx.input.isKeyPressed(Input.Keys.S)) {
27+
newSprite.y -= 300 * delta
28+
}
29+
if (Gdx.input.isKeyPressed(Input.Keys.D)) {
30+
newSprite.x += 300 * delta
31+
}
32+
}
33+
34+
Funkin.Signals.preGameClose.add { params ->
35+
newSprite.getTexture().dispose()
36+
}

core/src/main/java/me/stringfromjava/funkin/Funkin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import me.stringfromjava.funkin.backend.display.FunkinScreen;
88
import me.stringfromjava.funkin.backend.system.FunkinSignal;
99
import me.stringfromjava.funkin.backend.system.Paths;
10+
1011
import java.util.HashMap;
1112
import java.util.Map;
1213

core/src/main/java/me/stringfromjava/funkin/FunkinGame.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import com.badlogic.gdx.Game;
44
import com.badlogic.gdx.Gdx;
5+
import com.badlogic.gdx.Input;
56
import com.badlogic.gdx.audio.Sound;
67
import me.stringfromjava.funkin.game.InitScreen;
8+
import me.stringfromjava.funkin.syntrix.script.SyntrixScriptHandler;
79

810
import java.util.Set;
911

@@ -19,6 +21,15 @@ public class FunkinGame extends Game {
1921

2022
@Override
2123
public void create() {
24+
SyntrixScriptHandler.compileScript("test.groovy");
25+
SyntrixScriptHandler.executeScript("new_screen.groovy");
26+
27+
Funkin.Signals.postRender.add(data -> {
28+
if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) {
29+
SyntrixScriptHandler.executeScript("test.groovy");
30+
}
31+
});
32+
2233
setScreen(new InitScreen());
2334
}
2435

core/src/main/java/me/stringfromjava/funkin/backend/display/FunkinScreen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.badlogic.gdx.utils.viewport.FitViewport;
1111
import com.badlogic.gdx.utils.viewport.Viewport;
1212
import me.stringfromjava.funkin.util.Constants;
13+
1314
import java.util.ArrayList;
1415

1516
/**

core/src/main/java/me/stringfromjava/funkin/backend/system/FunkinSignal.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package me.stringfromjava.funkin.backend.system;
22

33
import java.util.ArrayList;
4+
import java.util.concurrent.CopyOnWriteArrayList;
45

56
/**
67
* Utility class for creating objects that can execute multiple callbacks when it is dispatched (or
78
* triggered).
89
*/
910
public class FunkinSignal<T> {
1011

11-
private final ArrayList<SignalHandler<T>> callbacks;
12-
private final ArrayList<SignalHandler<T>>
13-
tempCallbacks; // Callbacks that are added with addOnce().
12+
private final CopyOnWriteArrayList<SignalHandler<T>> callbacks;
13+
private final CopyOnWriteArrayList<SignalHandler<T>> tempCallbacks; // Callbacks that are added with addOnce().
1414

1515
public FunkinSignal() {
16-
callbacks = new ArrayList<>();
17-
tempCallbacks = new ArrayList<>();
16+
callbacks = new CopyOnWriteArrayList<>();
17+
tempCallbacks = new CopyOnWriteArrayList<>();
1818
}
1919

2020
/**
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package me.stringfromjava.funkin.syntrix.script;
2+
3+
import groovy.lang.GroovyShell;
4+
import groovy.lang.Script;
5+
import me.stringfromjava.funkin.backend.system.Paths;
6+
import org.codehaus.groovy.control.CompilationFailedException;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
/**
12+
* Core handler class for compiling and executing G-String scripts (aka {@code .groovy} scripts).
13+
*/
14+
public final class SyntrixScriptHandler {
15+
16+
// Key = the path of the script.
17+
// Value = The script object itself.
18+
private static Map<String, Script> compiledScripts = new HashMap<>();
19+
20+
public static Script executeScript(String path) {
21+
try {
22+
if (compiledScripts.containsKey(path)) {
23+
Script script = compiledScripts.get(path);
24+
script.run();
25+
return script;
26+
} else {
27+
return compileScript(path, true);
28+
}
29+
} catch (Exception e) {
30+
e.printStackTrace();
31+
}
32+
return null;
33+
}
34+
35+
public static Script compileScript(String path) {
36+
return compileScript(path, false);
37+
}
38+
39+
public static Script compileScript(String path, boolean execute) {
40+
try {
41+
if (!compiledScripts.containsKey(path)) {
42+
String code = Paths.asset(path).readString();
43+
Script script = new GroovyShell().parse(code);
44+
compiledScripts.put(path, script);
45+
if (execute) {
46+
script.run();
47+
}
48+
return script;
49+
}
50+
} catch (CompilationFailedException e) {
51+
e.printStackTrace();
52+
}
53+
return null;
54+
}
55+
56+
private SyntrixScriptHandler() {}
57+
}

core/src/main/java/me/stringfromjava/funkin/tween/FunkinTween.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.stringfromjava.funkin.tween;
22

33
import me.stringfromjava.funkin.tween.settings.FunkinTweenSettings;
4+
45
import java.lang.reflect.Field;
56
import java.util.ArrayList;
67

core/src/main/java/me/stringfromjava/funkin/tween/settings/FunkinTweenSettings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.jetbrains.annotations.NotNull;
44
import org.jetbrains.annotations.Nullable;
5+
56
import java.util.ArrayList;
67
import java.util.Collection;
78
import java.util.stream.Collectors;

0 commit comments

Comments
 (0)