From 76e30bef7bff324253b3bee9ee6496b64b486bb4 Mon Sep 17 00:00:00 2001 From: Makussu Date: Tue, 4 Jun 2024 10:42:45 +0200 Subject: [PATCH] Interactable --- src/Bubble.java | 44 +++++++++++++++++++++++++++++++++++++++++++ src/Cell.java | 3 +++ src/Character.java | 10 ++++++++-- src/Enemy.java | 9 ++++++++- src/Fenster.java | 24 +++++++++++++---------- src/Interactable.java | 7 +++++++ src/Player.java | 3 +++ src/Talkable.java | 33 ++++++++++++++++++++++++++++++++ 8 files changed, 120 insertions(+), 13 deletions(-) create mode 100644 src/Bubble.java create mode 100644 src/Interactable.java create mode 100644 src/Talkable.java diff --git a/src/Bubble.java b/src/Bubble.java new file mode 100644 index 0000000..9c029f5 --- /dev/null +++ b/src/Bubble.java @@ -0,0 +1,44 @@ +import processing.core.PApplet; + +/** + * The speech bubble that can be shown by all Talkable characters + */ +public class Bubble { + PApplet window; + String text; + boolean opened; + + Bubble(PApplet window, String text) { + this.window = window; + this.text = text; + this.opened = false; + } + public void open() { + this.opened = true; + } + public void close() { + this.opened = false; + } + + public boolean toggle() { + if (this.opened) { + close(); + } else { + open(); + } + return opened; + } + + public void content(String text) { + this.text = text; + } + + public void draw(float x, float y) { + if (opened) { + window.fill(255); + window.rect(x, y, 300, 50); + window.fill(0); + window.text(text, x, y, 300, 50); + } + } +} diff --git a/src/Cell.java b/src/Cell.java index 1c251be..79742bb 100644 --- a/src/Cell.java +++ b/src/Cell.java @@ -1,3 +1,6 @@ +/** + * Cell which can hold one Character and draws the character at a certain location. + */ public class Cell { float width; float x, y; diff --git a/src/Character.java b/src/Character.java index 2618288..b3afe4c 100644 --- a/src/Character.java +++ b/src/Character.java @@ -1,15 +1,19 @@ import processing.core.PApplet; +/** + * Class from which we define all other Entities which are seen in the game. + */ public class Character { PApplet window; String type; int color; boolean collidable; + float x, y; Character (PApplet window, String type) { this.window = window; this.type = type; - this.collidable = false; + this.collidable = true; this.color = 0; } @@ -17,7 +21,7 @@ public class Character { this.window = window; this.type = type; this.color = color; - this.collidable = false; + this.collidable = true; } Character (PApplet window, String type, int color, boolean collidable) { @@ -39,6 +43,8 @@ public class Character { } public void draw(float x, float y) { + this.x = x; + this.y = y; window.fill(color); window.text(type, x, y); } diff --git a/src/Enemy.java b/src/Enemy.java index 60c9ad7..98822ad 100644 --- a/src/Enemy.java +++ b/src/Enemy.java @@ -1,6 +1,9 @@ import processing.core.PApplet; -public class Enemy extends Character implements Health { +/** + * Enemy which is Interactable in the way, that we can damage him. He also has health so he is also healable. + */ +public class Enemy extends Character implements Health, Interactable { int health; int maxHealth = 20; @@ -26,4 +29,8 @@ public class Enemy extends Character implements Health { health = maxHealth; } } + + public void interact(Player player) { + player.damageEnemy(5, this); + } } diff --git a/src/Fenster.java b/src/Fenster.java index d1a3281..be7c57f 100644 --- a/src/Fenster.java +++ b/src/Fenster.java @@ -7,16 +7,19 @@ import java.util.ArrayList; public class Fenster extends PApplet { Cell[][] tileMap; - Character spot = new Character(this, "."); + Character spot = new Character(this, ".", 0, false); Character empty = new Character(this, " "); Character tree = new Character(this, "A", color(10, 200, 10), true); Character wall = new Character(this, "#", color(132,86,60), true); + Talkable old_dude = new Talkable(this, "T", color(20,20,200), true, new Bubble(this, "Hello youngster, what are you doing here?")); Player player = new Player(this); Character old_player_cell; int old_player_x; int old_player_y; + + UI ui = new UI(this); @Override public void settings() { @@ -37,8 +40,9 @@ public class Fenster extends PApplet { tileMap[25][4].character = new Character(wall); tileMap[25][5].character = new Character(wall); - tileMap[10][10].character = new Enemy(this); + tileMap[30][30].character = old_dude; + tileMap[10][10].character = new Enemy(this); //this.text("lol", 0, 0); //this.rect(4.0f, 4.0f, 4.0f, 4.0f); } @@ -82,8 +86,8 @@ public class Fenster extends PApplet { if (!newTile.character.collidable) { player.y = player.y - 1; tileMap[old_player_y][old_player_x].character = old_player_cell; - } else if (newTile.character instanceof Enemy) { - player.damageEnemy(5, (Enemy) newTile.character); + } else if (newTile.character instanceof Interactable) { + ((Interactable) newTile.character).interact(player); } } if (keyCode == this.LEFT) { @@ -91,8 +95,8 @@ public class Fenster extends PApplet { if (!newTile.character.collidable) { player.x = player.x - 1; tileMap[old_player_y][old_player_x].character = old_player_cell; - } else if (newTile.character instanceof Enemy) { - player.damageEnemy(5, (Enemy) newTile.character); + } else if (newTile.character instanceof Interactable) { + ((Interactable) newTile.character).interact(player); } } if (keyCode == this.DOWN) { @@ -100,8 +104,8 @@ public class Fenster extends PApplet { if (!newTile.character.collidable) { player.y = player.y + 1; tileMap[old_player_y][old_player_x].character = old_player_cell; - } else if (newTile.character instanceof Enemy) { - player.damageEnemy(5, (Enemy) newTile.character); + } else if (newTile.character instanceof Interactable) { + ((Interactable) newTile.character).interact(player); } } if (keyCode == this.RIGHT) { @@ -109,8 +113,8 @@ public class Fenster extends PApplet { if (!newTile.character.collidable) { player.x = player.x + 1; tileMap[old_player_y][old_player_x].character = old_player_cell; - } else if (newTile.character instanceof Enemy) { - player.damageEnemy(5, (Enemy) newTile.character); + } else if (newTile.character instanceof Interactable) { + ((Interactable) newTile.character).interact(player); } } diff --git a/src/Interactable.java b/src/Interactable.java new file mode 100644 index 0000000..1a07dee --- /dev/null +++ b/src/Interactable.java @@ -0,0 +1,7 @@ +public interface Interactable { + /** + *

This is the implementation of interact we use to interact with all entities

+ * @param player The main player which always interacts + */ + public void interact(Player player); +} diff --git a/src/Player.java b/src/Player.java index 7f09372..d1e0696 100644 --- a/src/Player.java +++ b/src/Player.java @@ -1,5 +1,8 @@ import processing.core.PApplet; +/** + * This is the main player of the game we can move around with and interact. + */ public class Player extends Character implements Health { int x, y; int health; diff --git a/src/Talkable.java b/src/Talkable.java new file mode 100644 index 0000000..5cb8532 --- /dev/null +++ b/src/Talkable.java @@ -0,0 +1,33 @@ +import processing.core.PApplet; + +/** + * A Character we can talk to + */ +public class Talkable extends Character implements Interactable{ + Bubble bubble; + + + Talkable (PApplet window, String type, int color, boolean collidable, Bubble bubble) { + super(window, type, color, collidable); + this.bubble = bubble; + } + Talkable(Talkable another) { + super(another); + } + + public Talkable(PApplet window) { + super(window); + } + + public void interact(Player player) { + this.bubble.toggle(); + } + + public void draw(float x, float y) { + this.x = x; + this.y = y; + window.fill(color); + window.text(type, x, y); + this.bubble.draw(x, y); + } +}