From 345d1876f7fb349ccb6a19b48ba0179000738304 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:32:23 +0000 Subject: [PATCH 1/5] Initial plan From 48d6ac439098a7b2da468aff2fe8f6bc887faa83 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:37:41 +0000 Subject: [PATCH 2/5] Add 10 basic Sprite method examples for size, mouse, and navigation methods Co-authored-by: mikebarkmin <2592379+mikebarkmin@users.noreply.github.com> --- .../java/reference/SpriteChangeSize.java | 34 ++++++++++++++++ .../java/reference/SpriteGetMouseX.java | 28 +++++++++++++ .../java/reference/SpriteGetMouseY.java | 28 +++++++++++++ .../java/reference/SpriteGetSize.java | 26 ++++++++++++ .../reference/SpriteGoToMousePointer.java | 28 +++++++++++++ .../reference/SpriteGoToRandomPosition.java | 28 +++++++++++++ .../java/reference/SpriteGoToSprite.java | 37 +++++++++++++++++ .../reference/SpritePointInDirection.java | 34 ++++++++++++++++ .../reference/SpritePointTowardsSprite.java | 40 +++++++++++++++++++ .../java/reference/SpritePreviousCostume.java | 32 +++++++++++++++ 10 files changed, 315 insertions(+) create mode 100644 src/examples/java/reference/SpriteChangeSize.java create mode 100644 src/examples/java/reference/SpriteGetMouseX.java create mode 100644 src/examples/java/reference/SpriteGetMouseY.java create mode 100644 src/examples/java/reference/SpriteGetSize.java create mode 100644 src/examples/java/reference/SpriteGoToMousePointer.java create mode 100644 src/examples/java/reference/SpriteGoToRandomPosition.java create mode 100644 src/examples/java/reference/SpriteGoToSprite.java create mode 100644 src/examples/java/reference/SpritePointInDirection.java create mode 100644 src/examples/java/reference/SpritePointTowardsSprite.java create mode 100644 src/examples/java/reference/SpritePreviousCostume.java diff --git a/src/examples/java/reference/SpriteChangeSize.java b/src/examples/java/reference/SpriteChangeSize.java new file mode 100644 index 00000000..34189856 --- /dev/null +++ b/src/examples/java/reference/SpriteChangeSize.java @@ -0,0 +1,34 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteChangeSize { + public SpriteChangeSize() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change size by increasing it + while (myStage.getTimer().forMillis(2000)) { + gamma.changeSize(2); + myStage.wait(50); + } + + // Change size by decreasing it + while (myStage.getTimer().forMillis(4000)) { + gamma.changeSize(-3); + myStage.wait(50); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteChangeSize(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetMouseX.java b/src/examples/java/reference/SpriteGetMouseX.java new file mode 100644 index 00000000..c0a79bf0 --- /dev/null +++ b/src/examples/java/reference/SpriteGetMouseX.java @@ -0,0 +1,28 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetMouseX { + public SpriteGetMouseX() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Show mouse X position for a few seconds + while (myStage.getTimer().forMillis(3000)) { + mySprite.say("Mouse X: " + (int) mySprite.getMouseX()); + myStage.wait(100); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetMouseX(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetMouseY.java b/src/examples/java/reference/SpriteGetMouseY.java new file mode 100644 index 00000000..6516fec7 --- /dev/null +++ b/src/examples/java/reference/SpriteGetMouseY.java @@ -0,0 +1,28 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetMouseY { + public SpriteGetMouseY() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Show mouse Y position for a few seconds + while (myStage.getTimer().forMillis(3000)) { + mySprite.say("Mouse Y: " + (int) mySprite.getMouseY()); + myStage.wait(100); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetMouseY(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetSize.java b/src/examples/java/reference/SpriteGetSize.java new file mode 100644 index 00000000..65de3dfa --- /dev/null +++ b/src/examples/java/reference/SpriteGetSize.java @@ -0,0 +1,26 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetSize { + public SpriteGetSize() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // Set a custom size + mySprite.setSize(150); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + mySprite.say("Size: " + mySprite.getSize() + "%"); + recorder.start(); + myStage.wait(3000); + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetSize(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGoToMousePointer.java b/src/examples/java/reference/SpriteGoToMousePointer.java new file mode 100644 index 00000000..d89c2043 --- /dev/null +++ b/src/examples/java/reference/SpriteGoToMousePointer.java @@ -0,0 +1,28 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGoToMousePointer { + public SpriteGoToMousePointer() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Move to mouse pointer periodically + while (myStage.getTimer().forMillis(3000)) { + gamma.goToMousePointer(); + myStage.wait(200); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGoToMousePointer(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGoToRandomPosition.java b/src/examples/java/reference/SpriteGoToRandomPosition.java new file mode 100644 index 00000000..cb35a1a0 --- /dev/null +++ b/src/examples/java/reference/SpriteGoToRandomPosition.java @@ -0,0 +1,28 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGoToRandomPosition { + public SpriteGoToRandomPosition() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Move to random positions several times + for (int i = 0; i < 6; i++) { + gamma.goToRandomPosition(); + myStage.wait(500); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGoToRandomPosition(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGoToSprite.java b/src/examples/java/reference/SpriteGoToSprite.java new file mode 100644 index 00000000..4ea65bc5 --- /dev/null +++ b/src/examples/java/reference/SpriteGoToSprite.java @@ -0,0 +1,37 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGoToSprite { + public SpriteGoToSprite() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + myStage.add(gamma); + myStage.add(zeta); + + // Position zeta at different locations + zeta.setPosition(100, 50); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + myStage.wait(500); + gamma.goToSprite(zeta); // Move gamma to zeta's position + myStage.wait(1000); + + zeta.setPosition(-100, -50); + myStage.wait(500); + gamma.goToSprite(zeta); // Move gamma to zeta's new position + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGoToSprite(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpritePointInDirection.java b/src/examples/java/reference/SpritePointInDirection.java new file mode 100644 index 00000000..3ac37e50 --- /dev/null +++ b/src/examples/java/reference/SpritePointInDirection.java @@ -0,0 +1,34 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpritePointInDirection { + public SpritePointInDirection() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Point in different directions + gamma.pointInDirection(0); // Point right + myStage.wait(500); + gamma.pointInDirection(90); // Point up + myStage.wait(500); + gamma.pointInDirection(180); // Point left + myStage.wait(500); + gamma.pointInDirection(270); // Point down + myStage.wait(500); + gamma.pointInDirection(45); // Point diagonal + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpritePointInDirection(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpritePointTowardsSprite.java b/src/examples/java/reference/SpritePointTowardsSprite.java new file mode 100644 index 00000000..04bbf920 --- /dev/null +++ b/src/examples/java/reference/SpritePointTowardsSprite.java @@ -0,0 +1,40 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpritePointTowardsSprite { + public SpritePointTowardsSprite() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + myStage.add(gamma); + myStage.add(zeta); + + gamma.setPosition(-100, 0); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Move zeta to different positions and make gamma point towards it + zeta.setPosition(100, 50); + gamma.pointTowardsSprite(zeta); + myStage.wait(1000); + + zeta.setPosition(100, -50); + gamma.pointTowardsSprite(zeta); + myStage.wait(1000); + + zeta.setPosition(-50, 80); + gamma.pointTowardsSprite(zeta); + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpritePointTowardsSprite(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpritePreviousCostume.java b/src/examples/java/reference/SpritePreviousCostume.java new file mode 100644 index 00000000..065a421e --- /dev/null +++ b/src/examples/java/reference/SpritePreviousCostume.java @@ -0,0 +1,32 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpritePreviousCostume { + public SpritePreviousCostume() { + Stage myStage = new Stage(600, 240); + Sprite zeta = new Sprite("green", "assets/zeta_green_badge.png"); + zeta.addCostume("yellow", "assets/zeta_yellow_badge.png"); + myStage.add(zeta); + + // Start with yellow costume + zeta.switchCostume("yellow"); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + myStage.wait(1000); + zeta.previousCostume(); // Switch back to green + myStage.wait(1000); + zeta.previousCostume(); // Switch to yellow again (wraps around) + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpritePreviousCostume(); + } +} \ No newline at end of file From 9c9ce4aa553e97e624fba8c22dce28eef0a44160 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:41:03 +0000 Subject: [PATCH 3/5] Add 15 more Sprite method examples covering size, appearance, sounds, stamping, and utility methods Co-authored-by: mikebarkmin <2592379+mikebarkmin@users.noreply.github.com> --- .../java/reference/SpriteChangeHeight.java | 33 ++++++++++++++++ .../java/reference/SpriteChangePosition.java | 34 ++++++++++++++++ .../java/reference/SpriteChangeWidth.java | 33 ++++++++++++++++ src/examples/java/reference/SpriteClone.java | 36 +++++++++++++++++ .../java/reference/SpriteGetPosition.java | 29 ++++++++++++++ .../java/reference/SpriteGetStage.java | 27 +++++++++++++ .../java/reference/SpriteGetText.java | 27 +++++++++++++ .../java/reference/SpriteGetTint.java | 29 ++++++++++++++ .../java/reference/SpriteGetTransparency.java | 26 +++++++++++++ .../java/reference/SpriteIsSoundPlaying.java | 32 +++++++++++++++ src/examples/java/reference/SpriteIsUI.java | 31 +++++++++++++++ src/examples/java/reference/SpriteRemove.java | 34 ++++++++++++++++ .../java/reference/SpriteRemoveTimer.java | 33 ++++++++++++++++ .../java/reference/SpriteSetHeight.java | 32 +++++++++++++++ .../java/reference/SpriteSetWidth.java | 32 +++++++++++++++ .../reference/SpriteStampToBackground.java | 39 +++++++++++++++++++ .../reference/SpriteStampToForeground.java | 39 +++++++++++++++++++ .../java/reference/SpriteStampToUI.java | 39 +++++++++++++++++++ .../java/reference/SpriteStopSound.java | 31 +++++++++++++++ 19 files changed, 616 insertions(+) create mode 100644 src/examples/java/reference/SpriteChangeHeight.java create mode 100644 src/examples/java/reference/SpriteChangePosition.java create mode 100644 src/examples/java/reference/SpriteChangeWidth.java create mode 100644 src/examples/java/reference/SpriteClone.java create mode 100644 src/examples/java/reference/SpriteGetPosition.java create mode 100644 src/examples/java/reference/SpriteGetStage.java create mode 100644 src/examples/java/reference/SpriteGetText.java create mode 100644 src/examples/java/reference/SpriteGetTint.java create mode 100644 src/examples/java/reference/SpriteGetTransparency.java create mode 100644 src/examples/java/reference/SpriteIsSoundPlaying.java create mode 100644 src/examples/java/reference/SpriteIsUI.java create mode 100644 src/examples/java/reference/SpriteRemove.java create mode 100644 src/examples/java/reference/SpriteRemoveTimer.java create mode 100644 src/examples/java/reference/SpriteSetHeight.java create mode 100644 src/examples/java/reference/SpriteSetWidth.java create mode 100644 src/examples/java/reference/SpriteStampToBackground.java create mode 100644 src/examples/java/reference/SpriteStampToForeground.java create mode 100644 src/examples/java/reference/SpriteStampToUI.java create mode 100644 src/examples/java/reference/SpriteStopSound.java diff --git a/src/examples/java/reference/SpriteChangeHeight.java b/src/examples/java/reference/SpriteChangeHeight.java new file mode 100644 index 00000000..13b4bfc9 --- /dev/null +++ b/src/examples/java/reference/SpriteChangeHeight.java @@ -0,0 +1,33 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteChangeHeight { + public SpriteChangeHeight() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change height by increasing and decreasing + while (myStage.getTimer().forMillis(2000)) { + gamma.changeHeight(3); + myStage.wait(50); + } + + while (myStage.getTimer().forMillis(4000)) { + gamma.changeHeight(-4); + myStage.wait(50); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteChangeHeight(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteChangePosition.java b/src/examples/java/reference/SpriteChangePosition.java new file mode 100644 index 00000000..e8dde5f5 --- /dev/null +++ b/src/examples/java/reference/SpriteChangePosition.java @@ -0,0 +1,34 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; +import org.openpatch.scratch.extensions.math.Vector2; + +public class SpriteChangePosition { + public SpriteChangePosition() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change position using vectors + for (int i = 0; i < 6; i++) { + Vector2 change = new Vector2(50, 30); + gamma.changePosition(change); + myStage.wait(400); + + change = new Vector2(-30, -20); + gamma.changePosition(change); + myStage.wait(400); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteChangePosition(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteChangeWidth.java b/src/examples/java/reference/SpriteChangeWidth.java new file mode 100644 index 00000000..25fb8a3e --- /dev/null +++ b/src/examples/java/reference/SpriteChangeWidth.java @@ -0,0 +1,33 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteChangeWidth { + public SpriteChangeWidth() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change width by increasing and decreasing + while (myStage.getTimer().forMillis(2000)) { + gamma.changeWidth(3); + myStage.wait(50); + } + + while (myStage.getTimer().forMillis(4000)) { + gamma.changeWidth(-4); + myStage.wait(50); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteChangeWidth(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteClone.java b/src/examples/java/reference/SpriteClone.java new file mode 100644 index 00000000..cae6a99d --- /dev/null +++ b/src/examples/java/reference/SpriteClone.java @@ -0,0 +1,36 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteClone { + public SpriteClone() { + Stage myStage = new Stage(600, 240); + Sprite original = new Sprite("gamma", "assets/gamma_purple_badge.png"); + original.setPosition(-100, 0); + myStage.add(original); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Clone the sprite + Sprite clone = original.clone(); + clone.setPosition(100, 0); + myStage.add(clone); + + myStage.wait(1500); + + // Move both sprites to show they are independent + original.move(30); + clone.move(-30); + + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteClone(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetPosition.java b/src/examples/java/reference/SpriteGetPosition.java new file mode 100644 index 00000000..6a0d925a --- /dev/null +++ b/src/examples/java/reference/SpriteGetPosition.java @@ -0,0 +1,29 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetPosition { + public SpriteGetPosition() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // Set a position first + mySprite.setPosition(120, -80); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + + var position = mySprite.getPosition(); + mySprite.say("Position: (" + (int)position.getX() + ", " + (int)position.getY() + ")"); + + recorder.start(); + myStage.wait(3000); + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetPosition(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetStage.java b/src/examples/java/reference/SpriteGetStage.java new file mode 100644 index 00000000..9db31b96 --- /dev/null +++ b/src/examples/java/reference/SpriteGetStage.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetStage { + public SpriteGetStage() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Get reference to the stage + var stage = mySprite.getStage(); + mySprite.say("Stage size: " + stage.getWidth() + "x" + stage.getHeight()); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetStage(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetText.java b/src/examples/java/reference/SpriteGetText.java new file mode 100644 index 00000000..768dcf91 --- /dev/null +++ b/src/examples/java/reference/SpriteGetText.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetText { + public SpriteGetText() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Show that we can access the text object + var text = mySprite.getText(); + mySprite.say("Text object: " + text.getClass().getSimpleName()); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetText(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetTint.java b/src/examples/java/reference/SpriteGetTint.java new file mode 100644 index 00000000..35aa807e --- /dev/null +++ b/src/examples/java/reference/SpriteGetTint.java @@ -0,0 +1,29 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetTint { + public SpriteGetTint() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // Set a tint first + mySprite.setTint(255, 100, 100); // Reddish tint + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + + var tint = mySprite.getTint(); + mySprite.say("Tint: R=" + (int)tint.getRed() + " G=" + (int)tint.getGreen() + " B=" + (int)tint.getBlue()); + + recorder.start(); + myStage.wait(3000); + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetTint(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetTransparency.java b/src/examples/java/reference/SpriteGetTransparency.java new file mode 100644 index 00000000..697faaf6 --- /dev/null +++ b/src/examples/java/reference/SpriteGetTransparency.java @@ -0,0 +1,26 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetTransparency { + public SpriteGetTransparency() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // Set transparency first + mySprite.setTransparency(180); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + mySprite.say("Transparency: " + (int) mySprite.getTransparency()); + recorder.start(); + myStage.wait(3000); + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetTransparency(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteIsSoundPlaying.java b/src/examples/java/reference/SpriteIsSoundPlaying.java new file mode 100644 index 00000000..f8440b62 --- /dev/null +++ b/src/examples/java/reference/SpriteIsSoundPlaying.java @@ -0,0 +1,32 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteIsSoundPlaying { + public SpriteIsSoundPlaying() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + mySprite.addSound("bump", "assets/bump.wav"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Check if sound is playing before starting + mySprite.say("Playing: " + mySprite.isSoundPlaying("bump")); + myStage.wait(1000); + + // Play sound and check status + mySprite.playSound("bump"); + mySprite.say("Playing: " + mySprite.isSoundPlaying("bump")); + myStage.wait(2000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteIsSoundPlaying(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteIsUI.java b/src/examples/java/reference/SpriteIsUI.java new file mode 100644 index 00000000..1d2d5a2e --- /dev/null +++ b/src/examples/java/reference/SpriteIsUI.java @@ -0,0 +1,31 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteIsUI { + public SpriteIsUI() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Check if sprite is UI initially + mySprite.say("Is UI: " + mySprite.isUI()); + myStage.wait(1500); + + // Set as UI sprite + mySprite.isUI(true); + mySprite.say("Is UI: " + mySprite.isUI()); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteIsUI(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteRemove.java b/src/examples/java/reference/SpriteRemove.java new file mode 100644 index 00000000..406dff34 --- /dev/null +++ b/src/examples/java/reference/SpriteRemove.java @@ -0,0 +1,34 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteRemove { + public SpriteRemove() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + gamma.setPosition(-100, 0); + zeta.setPosition(100, 0); + + myStage.add(gamma); + myStage.add(zeta); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + myStage.wait(1500); + + // Remove gamma sprite from stage + gamma.remove(); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteRemove(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteRemoveTimer.java b/src/examples/java/reference/SpriteRemoveTimer.java new file mode 100644 index 00000000..cf20922f --- /dev/null +++ b/src/examples/java/reference/SpriteRemoveTimer.java @@ -0,0 +1,33 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteRemoveTimer { + public SpriteRemoveTimer() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // Add a custom timer + mySprite.addTimer("customTimer"); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + mySprite.say("Timer added"); + myStage.wait(1500); + + // Remove the custom timer + mySprite.removeTimer("customTimer"); + mySprite.say("Timer removed"); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteRemoveTimer(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetHeight.java b/src/examples/java/reference/SpriteSetHeight.java new file mode 100644 index 00000000..c64c4622 --- /dev/null +++ b/src/examples/java/reference/SpriteSetHeight.java @@ -0,0 +1,32 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteSetHeight { + public SpriteSetHeight() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change height progressively + gamma.setHeight(50); + myStage.wait(800); + gamma.setHeight(120); + myStage.wait(800); + gamma.setHeight(200); + myStage.wait(800); + gamma.setHeight(80); + myStage.wait(800); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteSetHeight(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWidth.java b/src/examples/java/reference/SpriteSetWidth.java new file mode 100644 index 00000000..60e62a96 --- /dev/null +++ b/src/examples/java/reference/SpriteSetWidth.java @@ -0,0 +1,32 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteSetWidth { + public SpriteSetWidth() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Change width progressively + gamma.setWidth(50); + myStage.wait(800); + gamma.setWidth(120); + myStage.wait(800); + gamma.setWidth(200); + myStage.wait(800); + gamma.setWidth(80); + myStage.wait(800); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteSetWidth(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteStampToBackground.java b/src/examples/java/reference/SpriteStampToBackground.java new file mode 100644 index 00000000..2d4b3168 --- /dev/null +++ b/src/examples/java/reference/SpriteStampToBackground.java @@ -0,0 +1,39 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteStampToBackground { + public SpriteStampToBackground() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Create stamps at different positions + gamma.setPosition(-150, 50); + gamma.stampToBackground(); + myStage.wait(500); + + gamma.setPosition(0, 0); + gamma.stampToBackground(); + myStage.wait(500); + + gamma.setPosition(150, -50); + gamma.stampToBackground(); + myStage.wait(500); + + // Move sprite to show stamps remain in background + gamma.setPosition(-100, -100); + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteStampToBackground(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteStampToForeground.java b/src/examples/java/reference/SpriteStampToForeground.java new file mode 100644 index 00000000..ce6e6263 --- /dev/null +++ b/src/examples/java/reference/SpriteStampToForeground.java @@ -0,0 +1,39 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteStampToForeground { + public SpriteStampToForeground() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Create stamps at different positions in foreground layer + gamma.setPosition(-150, 50); + gamma.stampToForeground(); + myStage.wait(500); + + gamma.setPosition(0, 0); + gamma.stampToForeground(); + myStage.wait(500); + + gamma.setPosition(150, -50); + gamma.stampToForeground(); + myStage.wait(500); + + // Move sprite to show stamps remain in foreground + gamma.setPosition(-100, -100); + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteStampToForeground(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteStampToUI.java b/src/examples/java/reference/SpriteStampToUI.java new file mode 100644 index 00000000..1377d4cf --- /dev/null +++ b/src/examples/java/reference/SpriteStampToUI.java @@ -0,0 +1,39 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteStampToUI { + public SpriteStampToUI() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + myStage.add(gamma); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Create stamps at different positions in UI layer + gamma.setPosition(-150, 50); + gamma.stampToUI(); + myStage.wait(500); + + gamma.setPosition(0, 0); + gamma.stampToUI(); + myStage.wait(500); + + gamma.setPosition(150, -50); + gamma.stampToUI(); + myStage.wait(500); + + // Move sprite to show stamps remain in UI + gamma.setPosition(-100, -100); + myStage.wait(1000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteStampToUI(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteStopSound.java b/src/examples/java/reference/SpriteStopSound.java new file mode 100644 index 00000000..80d8c1e7 --- /dev/null +++ b/src/examples/java/reference/SpriteStopSound.java @@ -0,0 +1,31 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteStopSound { + public SpriteStopSound() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + mySprite.addSound("bump", "assets/bump.wav"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + mySprite.say("Playing sound..."); + mySprite.playSound("bump"); + myStage.wait(1000); + + mySprite.say("Stopping sound"); + mySprite.stopSound("bump"); + myStage.wait(2000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteStopSound(); + } +} \ No newline at end of file From e5246b3650a853136465ae3196ec41b843749288 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:44:05 +0000 Subject: [PATCH 4/5] Add 12 more Sprite examples: collision detection, time methods, event handlers, and spritesheet costumes Co-authored-by: mikebarkmin <2592379+mikebarkmin@users.noreply.github.com> --- .../java/reference/SpriteAddCostumes.java | 33 ++++++++++++++ .../java/reference/SpriteDisableHitbox.java | 41 +++++++++++++++++ .../java/reference/SpriteEnableHitbox.java | 44 +++++++++++++++++++ .../java/reference/SpriteGetCurrentDay.java | 27 ++++++++++++ .../java/reference/SpriteGetCurrentHour.java | 27 ++++++++++++ .../java/reference/SpriteGetCurrentMonth.java | 27 ++++++++++++ .../java/reference/SpriteGetCurrentYear.java | 27 ++++++++++++ .../java/reference/SpriteGetHitbox.java | 29 ++++++++++++ .../reference/SpriteGetTouchingSprite.java | 44 +++++++++++++++++++ .../reference/SpriteGetTouchingSprites.java | 37 ++++++++++++++++ .../java/reference/SpriteGetWindow.java | 27 ++++++++++++ .../java/reference/SpriteSetRun/MySprite.java | 17 +++++++ .../java/reference/SpriteSetRun/MyStage.java | 9 ++++ .../java/reference/SpriteSetRun/MyWindow.java | 24 ++++++++++ .../SpriteSetWhenIReceive/MySprite.java | 21 +++++++++ .../SpriteSetWhenIReceive/MyStage.java | 9 ++++ .../SpriteSetWhenIReceive/MyWindow.java | 24 ++++++++++ 17 files changed, 467 insertions(+) create mode 100644 src/examples/java/reference/SpriteAddCostumes.java create mode 100644 src/examples/java/reference/SpriteDisableHitbox.java create mode 100644 src/examples/java/reference/SpriteEnableHitbox.java create mode 100644 src/examples/java/reference/SpriteGetCurrentDay.java create mode 100644 src/examples/java/reference/SpriteGetCurrentHour.java create mode 100644 src/examples/java/reference/SpriteGetCurrentMonth.java create mode 100644 src/examples/java/reference/SpriteGetCurrentYear.java create mode 100644 src/examples/java/reference/SpriteGetHitbox.java create mode 100644 src/examples/java/reference/SpriteGetTouchingSprite.java create mode 100644 src/examples/java/reference/SpriteGetTouchingSprites.java create mode 100644 src/examples/java/reference/SpriteGetWindow.java create mode 100644 src/examples/java/reference/SpriteSetRun/MySprite.java create mode 100644 src/examples/java/reference/SpriteSetRun/MyStage.java create mode 100644 src/examples/java/reference/SpriteSetRun/MyWindow.java create mode 100644 src/examples/java/reference/SpriteSetWhenIReceive/MySprite.java create mode 100644 src/examples/java/reference/SpriteSetWhenIReceive/MyStage.java create mode 100644 src/examples/java/reference/SpriteSetWhenIReceive/MyWindow.java diff --git a/src/examples/java/reference/SpriteAddCostumes.java b/src/examples/java/reference/SpriteAddCostumes.java new file mode 100644 index 00000000..a089a53a --- /dev/null +++ b/src/examples/java/reference/SpriteAddCostumes.java @@ -0,0 +1,33 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteAddCostumes { + public SpriteAddCostumes() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite(); + + // Add costumes from spritesheet (using bee animation as example) + mySprite.addCostumes("frame", "assets/bee_idle.png", 36, 34); + mySprite.setSize(200); // Make it bigger to see clearly + + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Cycle through the costumes added from spritesheet + for (int i = 0; i < 12; i++) { // Assuming multiple frames were added + mySprite.switchCostume("frame" + (i % 6)); // Cycle through frames + myStage.wait(200); + } + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteAddCostumes(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteDisableHitbox.java b/src/examples/java/reference/SpriteDisableHitbox.java new file mode 100644 index 00000000..b27c4c8e --- /dev/null +++ b/src/examples/java/reference/SpriteDisableHitbox.java @@ -0,0 +1,41 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteDisableHitbox { + public SpriteDisableHitbox() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + gamma.setPosition(-20, 0); + zeta.setPosition(20, 0); + + myStage.add(gamma); + myStage.add(zeta); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Check collision before disabling hitbox + gamma.say("Touching: " + gamma.isTouchingSprite(zeta)); + myStage.wait(1500); + + // Disable hitbox + gamma.disableHitbox(); + gamma.say("Hitbox disabled"); + myStage.wait(1000); + + // Check collision after disabling + gamma.say("Touching: " + gamma.isTouchingSprite(zeta)); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteDisableHitbox(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteEnableHitbox.java b/src/examples/java/reference/SpriteEnableHitbox.java new file mode 100644 index 00000000..509556c8 --- /dev/null +++ b/src/examples/java/reference/SpriteEnableHitbox.java @@ -0,0 +1,44 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteEnableHitbox { + public SpriteEnableHitbox() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + gamma.setPosition(-20, 0); + zeta.setPosition(20, 0); + + myStage.add(gamma); + myStage.add(zeta); + + // Start with disabled hitbox + gamma.disableHitbox(); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Check collision with disabled hitbox + gamma.say("Touching: " + gamma.isTouchingSprite(zeta)); + myStage.wait(1500); + + // Enable hitbox + gamma.enableHitbox(); + gamma.say("Hitbox enabled"); + myStage.wait(1000); + + // Check collision after enabling + gamma.say("Touching: " + gamma.isTouchingSprite(zeta)); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteEnableHitbox(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentDay.java b/src/examples/java/reference/SpriteGetCurrentDay.java new file mode 100644 index 00000000..e186c48b --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentDay.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentDay { + public SpriteGetCurrentDay() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current day + int currentDay = mySprite.getCurrentDay(); + mySprite.say("Current Day: " + currentDay); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentDay(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentHour.java b/src/examples/java/reference/SpriteGetCurrentHour.java new file mode 100644 index 00000000..9d3ff77c --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentHour.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentHour { + public SpriteGetCurrentHour() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current hour + int currentHour = mySprite.getCurrentHour(); + mySprite.say("Current Hour: " + currentHour); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentHour(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentMonth.java b/src/examples/java/reference/SpriteGetCurrentMonth.java new file mode 100644 index 00000000..ff9fe8ef --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentMonth.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentMonth { + public SpriteGetCurrentMonth() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current month + int currentMonth = mySprite.getCurrentMonth(); + mySprite.say("Current Month: " + currentMonth); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentMonth(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentYear.java b/src/examples/java/reference/SpriteGetCurrentYear.java new file mode 100644 index 00000000..bcedad9d --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentYear.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentYear { + public SpriteGetCurrentYear() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current year + int currentYear = mySprite.getCurrentYear(); + mySprite.say("Current Year: " + currentYear); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentYear(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetHitbox.java b/src/examples/java/reference/SpriteGetHitbox.java new file mode 100644 index 00000000..f8be262f --- /dev/null +++ b/src/examples/java/reference/SpriteGetHitbox.java @@ -0,0 +1,29 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetHitbox { + public SpriteGetHitbox() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Get the hitbox and show its bounds + var hitbox = mySprite.getHitbox(); + var bounds = hitbox.getBounds(); + mySprite.say("Hitbox: " + (int)bounds.width() + "x" + (int)bounds.height()); + + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetHitbox(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetTouchingSprite.java b/src/examples/java/reference/SpriteGetTouchingSprite.java new file mode 100644 index 00000000..d6ba8c3d --- /dev/null +++ b/src/examples/java/reference/SpriteGetTouchingSprite.java @@ -0,0 +1,44 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetTouchingSprite { + public SpriteGetTouchingSprite() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta = new Sprite("zeta", "assets/zeta_green_badge.png"); + + gamma.setPosition(-50, 0); + zeta.setPosition(50, 0); + + myStage.add(gamma); + myStage.add(zeta); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + gamma.say("Moving to touch..."); + myStage.wait(1000); + + // Move gamma to touch zeta + gamma.setPosition(50, 0); + + // Get the touching sprite + Sprite touching = gamma.getTouchingSprite(Sprite.class); + if (touching != null) { + gamma.say("Touching sprite found!"); + } else { + gamma.say("No sprite touching"); + } + + myStage.wait(2000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetTouchingSprite(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetTouchingSprites.java b/src/examples/java/reference/SpriteGetTouchingSprites.java new file mode 100644 index 00000000..31e55add --- /dev/null +++ b/src/examples/java/reference/SpriteGetTouchingSprites.java @@ -0,0 +1,37 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetTouchingSprites { + public SpriteGetTouchingSprites() { + Stage myStage = new Stage(600, 240); + Sprite gamma = new Sprite("gamma", "assets/gamma_purple_badge.png"); + Sprite zeta1 = new Sprite("zeta1", "assets/zeta_green_badge.png"); + Sprite zeta2 = new Sprite("zeta2", "assets/zeta_yellow_badge.png"); + + gamma.setPosition(0, 0); + zeta1.setPosition(0, 0); // Overlapping with gamma + zeta2.setPosition(0, 0); // Overlapping with gamma + + myStage.add(gamma); + myStage.add(zeta1); + myStage.add(zeta2); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Get all touching sprites + var touchingSprites = gamma.getTouchingSprites(Sprite.class); + gamma.say("Touching " + touchingSprites.size() + " sprites"); + + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetTouchingSprites(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetWindow.java b/src/examples/java/reference/SpriteGetWindow.java new file mode 100644 index 00000000..eaf8b60e --- /dev/null +++ b/src/examples/java/reference/SpriteGetWindow.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetWindow { + public SpriteGetWindow() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Get reference to the window + var window = mySprite.getWindow(); + mySprite.say("Window: " + window.getClass().getSimpleName()); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetWindow(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetRun/MySprite.java b/src/examples/java/reference/SpriteSetRun/MySprite.java new file mode 100644 index 00000000..fbeff1e5 --- /dev/null +++ b/src/examples/java/reference/SpriteSetRun/MySprite.java @@ -0,0 +1,17 @@ +package reference.SpriteSetRun; + +import org.openpatch.scratch.Sprite; + +public class MySprite extends Sprite { + private int counter = 0; + + public MySprite() { + this.addCostume("zeta", "assets/zeta_green_badge.png"); + + // Set a custom run handler + this.setRun((sprite) -> { + counter++; + this.say("Frame: " + counter); + }); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetRun/MyStage.java b/src/examples/java/reference/SpriteSetRun/MyStage.java new file mode 100644 index 00000000..9e4eb430 --- /dev/null +++ b/src/examples/java/reference/SpriteSetRun/MyStage.java @@ -0,0 +1,9 @@ +package reference.SpriteSetRun; + +import org.openpatch.scratch.Stage; + +public class MyStage extends Stage { + public MyStage() { + this.add(new MySprite()); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetRun/MyWindow.java b/src/examples/java/reference/SpriteSetRun/MyWindow.java new file mode 100644 index 00000000..8fbb59cf --- /dev/null +++ b/src/examples/java/reference/SpriteSetRun/MyWindow.java @@ -0,0 +1,24 @@ +package reference.SpriteSetRun; + +import org.openpatch.scratch.Stage; +import org.openpatch.scratch.Window; +import org.openpatch.scratch.extensions.recorder.GifRecorder; +import org.openpatch.scratch.extensions.recorder.Recorder; + +public class MyWindow extends Window { + public MyWindow() { + Stage myStage = new MyStage(); + this.setStage(myStage); + Recorder recorder = new GifRecorder("examples/reference/" + this.getClass().getPackageName()); + recorder.start(); + // Wait for 3 seconds to show the run handler in action + while (myStage.getTimer().forMillis(3000)) + ; + recorder.stop(); + this.exit(); + } + + public static void main(String[] args) { + new MyWindow(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenIReceive/MySprite.java b/src/examples/java/reference/SpriteSetWhenIReceive/MySprite.java new file mode 100644 index 00000000..44321b5a --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenIReceive/MySprite.java @@ -0,0 +1,21 @@ +package reference.SpriteSetWhenIReceive; + +import org.openpatch.scratch.Sprite; + +public class MySprite extends Sprite { + public MySprite() { + this.addCostume("zeta", "assets/zeta_green_badge.png"); + + // Set a custom message handler + this.setWhenIReceive((sprite, message) -> { + sprite.say("Received: " + message); + }); + } + + public void run() { + // Broadcast a message after 1 second + if (this.getTimer().forMillis(1000)) { + this.broadcast("Hello World!"); + } + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenIReceive/MyStage.java b/src/examples/java/reference/SpriteSetWhenIReceive/MyStage.java new file mode 100644 index 00000000..86d8aa5f --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenIReceive/MyStage.java @@ -0,0 +1,9 @@ +package reference.SpriteSetWhenIReceive; + +import org.openpatch.scratch.Stage; + +public class MyStage extends Stage { + public MyStage() { + this.add(new MySprite()); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenIReceive/MyWindow.java b/src/examples/java/reference/SpriteSetWhenIReceive/MyWindow.java new file mode 100644 index 00000000..dbea6c97 --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenIReceive/MyWindow.java @@ -0,0 +1,24 @@ +package reference.SpriteSetWhenIReceive; + +import org.openpatch.scratch.Stage; +import org.openpatch.scratch.Window; +import org.openpatch.scratch.extensions.recorder.GifRecorder; +import org.openpatch.scratch.extensions.recorder.Recorder; + +public class MyWindow extends Window { + public MyWindow() { + Stage myStage = new MyStage(); + this.setStage(myStage); + Recorder recorder = new GifRecorder("examples/reference/" + this.getClass().getPackageName()); + recorder.start(); + // Wait for 3 seconds to show the message handling + while (myStage.getTimer().forMillis(3000)) + ; + recorder.stop(); + this.exit(); + } + + public static void main(String[] args) { + new MyWindow(); + } +} \ No newline at end of file From 8096ebf21602e78bc9d08c104b9a69e4bb3e1f81 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:45:47 +0000 Subject: [PATCH 5/5] Complete Sprite examples implementation with final 8 examples covering nine-slice, time methods, and mouse events Co-authored-by: mikebarkmin <2592379+mikebarkmin@users.noreply.github.com> --- .../reference/SpriteDisableNineSlice.java | 34 +++++++++++++++++++ .../reference/SpriteGetCurrentMinute.java | 27 +++++++++++++++ .../reference/SpriteGetCurrentSecond.java | 27 +++++++++++++++ .../reference/SpriteGetDaysSince2000.java | 27 +++++++++++++++ .../java/reference/SpriteSetNineSlice.java | 31 +++++++++++++++++ .../SpriteSetWhenMouseClicked/MySprite.java | 21 ++++++++++++ .../SpriteSetWhenMouseClicked/MyStage.java | 9 +++++ .../SpriteSetWhenMouseClicked/MyWindow.java | 24 +++++++++++++ 8 files changed, 200 insertions(+) create mode 100644 src/examples/java/reference/SpriteDisableNineSlice.java create mode 100644 src/examples/java/reference/SpriteGetCurrentMinute.java create mode 100644 src/examples/java/reference/SpriteGetCurrentSecond.java create mode 100644 src/examples/java/reference/SpriteGetDaysSince2000.java create mode 100644 src/examples/java/reference/SpriteSetNineSlice.java create mode 100644 src/examples/java/reference/SpriteSetWhenMouseClicked/MySprite.java create mode 100644 src/examples/java/reference/SpriteSetWhenMouseClicked/MyStage.java create mode 100644 src/examples/java/reference/SpriteSetWhenMouseClicked/MyWindow.java diff --git a/src/examples/java/reference/SpriteDisableNineSlice.java b/src/examples/java/reference/SpriteDisableNineSlice.java new file mode 100644 index 00000000..0067505e --- /dev/null +++ b/src/examples/java/reference/SpriteDisableNineSlice.java @@ -0,0 +1,34 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteDisableNineSlice { + public SpriteDisableNineSlice() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + // First enable nine-slice + mySprite.setNineSlice(10, 10, 10, 10); + mySprite.setSize(200); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + mySprite.say("Nine-slice enabled"); + myStage.wait(1500); + + // Disable nine-slice + mySprite.disableNineSlice(); + mySprite.say("Nine-slice disabled"); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteDisableNineSlice(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentMinute.java b/src/examples/java/reference/SpriteGetCurrentMinute.java new file mode 100644 index 00000000..ce9438ce --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentMinute.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentMinute { + public SpriteGetCurrentMinute() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current minute + int currentMinute = mySprite.getCurrentMinute(); + mySprite.say("Current Minute: " + currentMinute); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentMinute(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetCurrentSecond.java b/src/examples/java/reference/SpriteGetCurrentSecond.java new file mode 100644 index 00000000..fab148f1 --- /dev/null +++ b/src/examples/java/reference/SpriteGetCurrentSecond.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetCurrentSecond { + public SpriteGetCurrentSecond() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display current second + int currentSecond = mySprite.getCurrentSecond(); + mySprite.say("Current Second: " + currentSecond); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetCurrentSecond(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteGetDaysSince2000.java b/src/examples/java/reference/SpriteGetDaysSince2000.java new file mode 100644 index 00000000..b27c9bd2 --- /dev/null +++ b/src/examples/java/reference/SpriteGetDaysSince2000.java @@ -0,0 +1,27 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteGetDaysSince2000 { + public SpriteGetDaysSince2000() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Display days since 2000 + int daysSince2000 = mySprite.getDaysSince2000(); + mySprite.say("Days since 2000: " + daysSince2000); + myStage.wait(3000); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteGetDaysSince2000(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetNineSlice.java b/src/examples/java/reference/SpriteSetNineSlice.java new file mode 100644 index 00000000..c63cfafc --- /dev/null +++ b/src/examples/java/reference/SpriteSetNineSlice.java @@ -0,0 +1,31 @@ +package reference; +import org.openpatch.scratch.*; +import org.openpatch.scratch.extensions.recorder.*; + +public class SpriteSetNineSlice { + public SpriteSetNineSlice() { + Stage myStage = new Stage(600, 240); + Sprite mySprite = new Sprite("zeta", "assets/zeta_green_badge.png"); + myStage.add(mySprite); + + GifRecorder recorder = + new GifRecorder("examples/reference/" + this.getClass().getName() + ".gif"); + recorder.start(); + + // Set nine-slice parameters (top, right, bottom, left) + mySprite.setNineSlice(10, 10, 10, 10); + mySprite.say("Nine-slice enabled"); + myStage.wait(1500); + + // Change size to show nine-slice effect + mySprite.setSize(200); + myStage.wait(1500); + + recorder.stop(); + myStage.exit(); + } + + public static void main(String[] args) { + new SpriteSetNineSlice(); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenMouseClicked/MySprite.java b/src/examples/java/reference/SpriteSetWhenMouseClicked/MySprite.java new file mode 100644 index 00000000..bd1829af --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenMouseClicked/MySprite.java @@ -0,0 +1,21 @@ +package reference.SpriteSetWhenMouseClicked; + +import org.openpatch.scratch.MouseCode; +import org.openpatch.scratch.Sprite; + +public class MySprite extends Sprite { + public MySprite() { + this.addCostume("zeta", "assets/zeta_green_badge.png"); + + // Set a custom mouse click handler + this.setWhenMouseClicked((sprite, mouseCode) -> { + if (mouseCode == MouseCode.LEFT) { + sprite.say("Left click detected!"); + } else if (mouseCode == MouseCode.RIGHT) { + sprite.say("Right click detected!"); + } else { + sprite.say("Mouse clicked: " + mouseCode); + } + }); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenMouseClicked/MyStage.java b/src/examples/java/reference/SpriteSetWhenMouseClicked/MyStage.java new file mode 100644 index 00000000..22f22b49 --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenMouseClicked/MyStage.java @@ -0,0 +1,9 @@ +package reference.SpriteSetWhenMouseClicked; + +import org.openpatch.scratch.Stage; + +public class MyStage extends Stage { + public MyStage() { + this.add(new MySprite()); + } +} \ No newline at end of file diff --git a/src/examples/java/reference/SpriteSetWhenMouseClicked/MyWindow.java b/src/examples/java/reference/SpriteSetWhenMouseClicked/MyWindow.java new file mode 100644 index 00000000..39bdff62 --- /dev/null +++ b/src/examples/java/reference/SpriteSetWhenMouseClicked/MyWindow.java @@ -0,0 +1,24 @@ +package reference.SpriteSetWhenMouseClicked; + +import org.openpatch.scratch.Stage; +import org.openpatch.scratch.Window; +import org.openpatch.scratch.extensions.recorder.GifRecorder; +import org.openpatch.scratch.extensions.recorder.Recorder; + +public class MyWindow extends Window { + public MyWindow() { + Stage myStage = new MyStage(); + this.setStage(myStage); + Recorder recorder = new GifRecorder("examples/reference/" + this.getClass().getPackageName()); + recorder.start(); + // Wait for 5 seconds to allow mouse interaction + while (myStage.getTimer().forMillis(5000)) + ; + recorder.stop(); + this.exit(); + } + + public static void main(String[] args) { + new MyWindow(); + } +} \ No newline at end of file