From eaa5f5d54790b2e546441a4ce2e098b3fdb43bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 2 Nov 2023 13:57:51 +0100 Subject: [PATCH] Implement some sample dialogs | apply BASE engine updates --- .../35f770a6-5d94-4ddf-a132-dc3788a3adaf.png | Bin 0 -> 3666 bytes .../4a636044-2dbd-4ef3-8bdf-b63501c85ae3.png | Bin 0 -> 13205 bytes data.sql | 14 ++++ maps/1825b6a1-842d-4565-97e0-2005118b2b2b.dat | 2 - maps/8fbb151f-682a-4357-ba92-157e4097898f.dat | 8 +- maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat | Bin 30029 -> 29989 bytes maps/d1b85d85-c52a-46f5-b81e-444847f8ddae.dat | Bin 6454 -> 9399 bytes project.bep | Bin 4700 -> 4984 bytes .../bartlomiejpluta/demo/entity/Friend.java | 74 ++++++++++++++++++ .../demo/entity/NamedCharacter.java | 4 + .../bartlomiejpluta/demo/entity/Player.java | 25 ++++-- .../demo/gui/DialogChoiceWindow.java | 54 +++++++++++++ .../demo/gui/DialogWindow.java | 23 +++++- .../demo/gui/PrintTextView.java | 49 ++++++++++++ .../demo/map/BaseMapHandler.java | 25 +++--- .../demo/map/HeroHomeHandler.java | 8 +- .../bartlomiejpluta/demo/menu/GuiManager.java | 18 +++-- .../1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml | 7 +- .../5a5aea0a-8c8b-4730-8e45-9ec6ccc5c4f6.xml | 16 ++++ 19 files changed, 288 insertions(+), 39 deletions(-) create mode 100644 charsets/35f770a6-5d94-4ddf-a132-dc3788a3adaf.png create mode 100644 charsets/4a636044-2dbd-4ef3-8bdf-b63501c85ae3.png delete mode 100644 maps/1825b6a1-842d-4565-97e0-2005118b2b2b.dat create mode 100644 src/main/java/com/bartlomiejpluta/demo/entity/Friend.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/DialogChoiceWindow.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/PrintTextView.java create mode 100644 widgets/5a5aea0a-8c8b-4730-8e45-9ec6ccc5c4f6.xml diff --git a/charsets/35f770a6-5d94-4ddf-a132-dc3788a3adaf.png b/charsets/35f770a6-5d94-4ddf-a132-dc3788a3adaf.png new file mode 100644 index 0000000000000000000000000000000000000000..65963d7e6046a45a74b509771298b0e13dfdb8ce GIT binary patch literal 3666 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 literal 0 HcmV?d00001 diff --git a/data.sql b/data.sql index d0e65dc..4361f7a 100644 --- a/data.sql +++ b/data.sql @@ -163,5 +163,19 @@ INSERT INTO "PUBLIC"."ENEMY" VALUES ('eagle', 'Eagle', 'Eagle', 'Corpse', '2d4+2', '10d2', TRUE, 'wooden_sword', NULL, NULL, 'Poof', 'Deku death'), ('skeleton', 'Skeleton', 'Skeleton', 'Corpse', '2d6+2', '10d2', TRUE, 'wooden_sword', NULL, NULL, 'Poof', 'Deku death'), ('skeleton_archer', 'Skeleton Archer', 'Skeleton', 'Corpse', '2d6+2', '10d2', TRUE, 'wooden_dagger', 'wooden_bow,wooden_arrow,2d4+3', NULL, 'Poof', 'Deku death'); +CREATE MEMORY TABLE "PUBLIC"."FRIEND"( + "ID" VARCHAR NOT NULL, + "NAME" VARCHAR NOT NULL, + "CHARSET" VARCHAR NOT NULL, + "SPEED" VARCHAR NOT NULL, + "BLOCKING" BOOLEAN DEFAULT FALSE NOT NULL, + "DIALOG_COLOR" VARCHAR DEFAULT '0xFFFFFF' NOT NULL +); +ALTER TABLE "PUBLIC"."FRIEND" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_7C" PRIMARY KEY("ID"); +-- 3 +/- SELECT COUNT(*) FROM PUBLIC.FRIEND; +INSERT INTO "PUBLIC"."FRIEND" VALUES +('turtle', 'Turtle', 'Turtle', '10d2', TRUE, 'AA00DD'), +('neko', 'Neko', 'Neko', '14', TRUE, 'AA00DD'), +('grandma', 'Grandma', 'Grandma', '7', TRUE, 'DD00AA'); ALTER TABLE "PUBLIC"."ENEMY_DROP" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_8A" FOREIGN KEY("ENEMY") REFERENCES "PUBLIC"."ENEMY"("ID") NOCHECK; ALTER TABLE "PUBLIC"."ENEMY" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_3F" FOREIGN KEY("MELEE_WEAPON") REFERENCES "PUBLIC"."MELEE_WEAPON"("ID") NOCHECK; diff --git a/maps/1825b6a1-842d-4565-97e0-2005118b2b2b.dat b/maps/1825b6a1-842d-4565-97e0-2005118b2b2b.dat deleted file mode 100644 index 6ec77ab..0000000 --- a/maps/1825b6a1-842d-4565-97e0-2005118b2b2b.dat +++ /dev/null @@ -1,2 +0,0 @@ - -$1825b6a1-842d-4565-97e0-2005118b2b2b2 ( :+com.bartlomiejpluta.demo.map.ForrestHandler \ No newline at end of file diff --git a/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat b/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat index 759d592..0b52c00 100644 --- a/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat +++ b/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat @@ -7,8 +7,8 @@ $04ac5ad8-4100-4016-97b3-a51a728ca49d Water> $fc294b9e-105a-4120-8caa-393d78fdf414!?(2G Objects belowF -$413e09cf-ba41-4fe8-ac47-9697b5ad0245<=<=PPPPKSTST[PPPPPP9lm;|}IstSTQRjkstz{QR9STIZWXYiPPPPyst]I]YPPNN``I``<=`WXQRYIJQRjk`]z{ST`STEFQRSTQRQRUVopIWXlmGH|}KUVQRABWXY[STQRIWXQRST^NNNQRABGHSTSTQRstWXJiWXWXy:WXEFQRQRUVABstQRGHY9STQRWXPPNNNNNNAB:WXQRlmQR|}2B -Main"B /* +$413e09cf-ba41-4fe8-ac47-9697b5ad0245<=<=PPPPKSTST[PPPPPP9lm;|}IstSTQRjkstz{QR9STIZWXYiPPPPyst]I]YPPNN``I``<=`WXQRYIJQRjk`]z{ST`STEFQRSTQRQRUVopIWXlmGH|}KUVQRABWXY[STQRIWXQRST^NNNQRABGHSTSTQRstWXJiWXWXy:WXEFQRQRUVABstQRGHY9STQRWXPPNNNNNNAB:WXQRlmQR|}2B +Main"B /* * Following final parameters are available to use: * x: int - the x coordinate of tile the object has been created on * y: int - the y coordinate of tile the object has been created on @@ -18,11 +18,11 @@ $413e09cf-ba41-4fe8-ac47-9697b5ad0245 * runner: DemoRunner - the game runner of the project * context: Context - the game context */ -handler.warp(here, A.maps.hero_house.main.forrest);" +warp(here, A.maps.hero_house.main.forrest); house 2D Objects aboveD $413e09cf-ba41-4fe8-ac47-9697b5ad02453434CDCD3434CDCD34cd34CD34stcdCDCD12cdAB3434cdcdCDCD78ststGH12abABqrcdcdstcdst78abGHcdqrabcdstqrstcd34st34CD56cd34CD12abcd56EF78stCDABqrstEFGHcd56cdstcdabcd34EFstqr12stcdCDcd78ab34ABststGHcdcdqrCDababqrabqr34qr341278cd78cdCDCDABcdGHstGHst78cdst56cdGHstab56EFstqrEF12cdcdcdAB34st12st56cdst78CDABcdEFstGH78abstUV12cd12GHqrcdABstABst2@ Border forrest@ $413e09cf-ba41-4fe8-ac47-9697b5ad0245cdstcdstcdstcdst2 Layer 8* - :+com.bartlomiejpluta.demo.map.ForrestHandler \ No newline at end of file + :+com.bartlomiejpluta.demo.map.ForrestHandlerB \ No newline at end of file diff --git a/maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat b/maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat index b452410e9f74a10156a232e751e245cb18b077b5..a974922e11d7663b5d29824e913a4756991411ae 100644 GIT binary patch delta 209 zcmX^6igD>H#tjBm+;i2rSbP&R^OUBjZ+5gYWt<#f#Ws1Jqr&6>E49f9wqlbT9M~oo z*sx80V9Pey&sl7;pOe7kdrlmaCphqImb0m2=XlM`!7aco^2_C7tkfp+`$E49f9wqlbT9M~oo z*sx80V9Pey&sl7;pOe7kdrlmaCphqImb0m2=iJD`!70EkwTfl)e)q+U92tpuDLJV{ zdXvrE8#q2Qb8riAOTF2=&wUA!l!vPm$8BZ~UI7uQD`-+lo?4u@SvV90#H6mEn`q&^ zisJ?|hq?f()I~IHeZK0GPnSgTDsgeKWaQ_j3UEvCC~ZFIdrOVeO&~==M1jjnZSvm| J$;o?5cmeD^Q;q-t diff --git a/maps/d1b85d85-c52a-46f5-b81e-444847f8ddae.dat b/maps/d1b85d85-c52a-46f5-b81e-444847f8ddae.dat index ef3ecfc7c51caf47f354f3ca362548f4cea6f1f1..3f823c22570d00cce37a10aae5799dca3679e635 100644 GIT binary patch delta 2431 zcmdmHwB2*VQ*Q1(DqJkSiJ5syn^iV{;9kkZv4w?$U4T<+?dFAis~9H-3$$|FVCG;J z;E}qx`GLSH#>ta}G`NK33UKfWuu4r6nEX({u0A8RDAh{AH?bffGfzQRp(G zaQ}qB>`{Pv2B8zHMuf}5GZIVSo=yjOTA?IgAthg-BtIpwQb)n3G%wL!NwZ#)OF=;a z928g_;+&D6nVbp_UXW5wB~T#14NS|d00l#lLQ#HxnhwmBN;)v5DGE86*{L9_bMo`E z71HvH6pHh6Qx!5YQ&Lj%6iVugQWJ|yi&7O5i}FkJQXpn!~DjLP~y~dWk}IUVgbkWon6@o}LoOJ(`$)&9BE6?ZxGp zCCM2Y`I-vVTnY-DoXLsBsR{-ll}i2@8IZ73RPZcOD9DnNn+l+KeA3lfuZz@eU4Qj(aQt&mofpR16l zkdj$kl9-pAiZH3ZI90(IY!o!`@=GCcsZf+!SejXsTC7l7lnyFi(lRSRft#39oDV88 zz)_Y8iOiJ5y!6zf{L*5$8^Cc1G721(pa_73MoMa0VrfnZ$ilqRoE&SedIbfAT1{~J zb1W#xsf6Uid|38?C-Qud7HIZ_<&I*cXhMmk$ox|EqEv+sUOL26Py->c;hzCb0L6L= zo(f5+Ihm;XOft1>rdFjOG^sJpkP7`C3xutj~=LLV8ak)5JD%Yv{6(*O06IxG_8g9aIkT(3b06RWgCH2A8N&y zmztfAyVe8Ag0cX-$}1|(%S$cNOHVBc09Sq*nmP)g(kVkn0i066wNFv1f_G*~38?N; z!YKUeA$ct?wOk=MGq)fo6ewK#*&2>|iJ%G?BvPzbke{EXr=rQl$*EVIoS2iU zVW4M{2Idx(=4pW1BdHZ7ItpO7=qP}ktI5R)t>myKlRU-L?0g*sCEwKia!{(*)a25% zmg44OP0cGQsuW@*j@gs~9;l67y1WQj7E^ zdkeI3JYeQv7T}S(x%q|wvQ(3h29s3$WObEzJ|%80*3`U`qDlc~32vp$;&Qxf07L#C A*#H0l diff --git a/project.bep b/project.bep index 7398f4212114cbf718ada7a6870721bbde6c8de2..ed9054d2e746e8b2b3f7cd02d48ff057c454415a 100644 GIT binary patch delta 300 zcmcbk@l2UX{QqzoeEs|2wbd$`CO$`i_ zEi6nEQ;mf*2q^=p0vpcmUX+-ZlAE|$l=BT!qEkGVifN*0Vrrs6qOL`> interaction; + + public Friend(@NonNull String id) { + this(DB.dao.friend.find(id)); + } + + public Friend(@NonNull FriendModel template) { + super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.byName(template.getCharset()).$)); + name = template.getName(); + setSpeed(DiceRoller.roll(template.getSpeed()) / 10f); + setBlocking(template.isBlocking()); + dialogNameColor = Integer.parseInt(template.getDialogColor(), 16); + } + + @Override + public void removeItemFromEquipment(Item item) { + + } + + public CompletableFuture interact(Character trigger) { + if(interaction != null && !interacting) { + setFaceDirection(getDirectionTowards(trigger)); + priorStrategy = strategy; + strategy = NoopAI.INSTANCE; + interacting = true; + + return interaction.apply(this).thenApply(o -> { + strategy = priorStrategy; + interacting = false; + return o; + }); + } + + return CompletableFuture.completedFuture(null); + } + + public Friend interaction(Function> interaction) { + this.interaction = interaction; + return this; + } + + public Friend asAnimal() { + this.strategy = new RandomMovementAI<>(this, 4f); + return this; + } +} diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java b/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java index f91a2bd..163bbaf 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java @@ -17,4 +17,8 @@ public abstract class NamedCharacter extends CharacterDelegate { } public abstract String getName(); + + public int getDialogNameColor() { + return 0xFFFFFF; + } } \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java index a3381fb..961c26b 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java @@ -47,12 +47,22 @@ public class Player extends Creature { for (var i = 0; i < entities.size(); ++i) { var entity = entities.get(i); - // Use some map object which player is looking at - if (entity.getCoordinates().equals(coords) && entity instanceof MapObject object) { - object.triggerInteraction(); - return; + if (entity.getCoordinates().equals(coords)) { + + // Use some map object which player is looking at + if(entity instanceof MapObject object) { + object.triggerInteraction(); + return; + } + + // Interact with friend creature which player is looking at + if(entity instanceof Friend friend) { + friend.interact(this).thenApply(o -> interactionCooldown = INTERACTION_COOLDOWN); + return; + } } + if (entity.getCoordinates().equals(getCoordinates())) { // Pick some item from the ground @@ -223,7 +233,12 @@ public class Player extends Creature { @Override public String getName() { - return "Player"; + return "Luna"; + } + + @Override + public int getDialogNameColor() { + return 0x00AA00; } @Override diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/DialogChoiceWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/DialogChoiceWindow.java new file mode 100644 index 0000000..fa65b69 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/DialogChoiceWindow.java @@ -0,0 +1,54 @@ +package com.bartlomiejpluta.demo.gui; + +import A.fonts; +import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.gui.*; +import com.bartlomiejpluta.base.lib.gui.TextView; +import com.bartlomiejpluta.base.lib.gui.VOptionChoice; + +import java.util.Collections; +import java.util.Map; + +public class DialogChoiceWindow extends DecoratedWindow { + + @Ref("speaker") + private TextView speaker; + + @Ref("choice") + private VOptionChoice choice; + + @SuppressWarnings("unchecked") + @Override + public void onOpen(WindowManager manager, Object[] args) { + super.onOpen(manager, args); + + speaker.setText((String) args[0]); + speaker.setColor((int) args[1]); + + var index = 0; + choice.removeAllChildren(); + var options = (String[]) args[2]; + for(var option : options) { + var button = new Button(context, gui, Collections.emptyMap()); + choice.add(button); + button.setText(option); + button.setColor(0xFFFFFF); + button.setWidthMode(SizeMode.RELATIVE); + button.setWidth(1f); + button.setFont(fonts.roboto_regular.$); + button.setFontSize(20f); + button.setAction(onChoose(index)); + ++index; + } + + choice.focus(); + } + + private Runnable onChoose(int index) { + return () -> resolve(index); + } + + public DialogChoiceWindow(Context context, GUI gui, Map refs) { + super(context, gui, refs); + } +} diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/DialogWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/DialogWindow.java index 426db28..46c8b74 100644 --- a/src/main/java/com/bartlomiejpluta/demo/gui/DialogWindow.java +++ b/src/main/java/com/bartlomiejpluta/demo/gui/DialogWindow.java @@ -5,14 +5,18 @@ import com.bartlomiejpluta.base.api.gui.*; import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.input.KeyAction; import com.bartlomiejpluta.base.api.input.KeyEvent; +import com.bartlomiejpluta.base.lib.gui.PrintedTextView; import com.bartlomiejpluta.base.lib.gui.TextView; import java.util.Map; public class DialogWindow extends DecoratedWindow { + @Ref("speaker") + private TextView speaker; + @Ref("message") - private TextView text; + private PrintedTextView text; public DialogWindow(Context context, GUI gui, Map refs) { super(context, gui, refs); @@ -26,6 +30,12 @@ public class DialogWindow extends DecoratedWindow { } if (event.getKey() == Key.KEY_ENTER && event.getAction() == KeyAction.PRESS) { + if (text.isPrinting()) { + text.printAll(); + event.consume(); + return; + } + manager.close(); event.consume(); } @@ -35,11 +45,16 @@ public class DialogWindow extends DecoratedWindow { public void onOpen(WindowManager manager, Object[] args) { super.onOpen(manager, args); - text.setText((String) args[0]); + speaker.setText((String) args[0]); + speaker.setColor((int) args[1]); - if (args.length > 1) { - setWindowPosition((WindowPosition) args[1]); + text.setText((String) args[2]); + + if (args.length > 3) { + setWindowPosition((WindowPosition) args[3]); } + + text.start(); } @Override diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/PrintTextView.java b/src/main/java/com/bartlomiejpluta/demo/gui/PrintTextView.java new file mode 100644 index 0000000..b8ff1d5 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/PrintTextView.java @@ -0,0 +1,49 @@ +package com.bartlomiejpluta.demo.gui; + +import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.gui.Component; +import com.bartlomiejpluta.base.api.gui.GUI; +import com.bartlomiejpluta.base.lib.gui.TextView; +import lombok.Setter; + +import java.util.Map; + +public class PrintTextView extends TextView { + + @Setter + private Float duration; + + private float acc; + + private String originalText; + + public void start() { + acc = 0f; + } + + public boolean isPrinting() { + return originalText.length() != super.getText().length(); + } + + public void printAll() { + acc = originalText.length() * duration; + } + + @Override + public void setText(String text) { + super.setText(""); + this.originalText = text; + } + + @Override + public void update(float dt) { + super.update(dt); + + acc += dt; + super.setText(originalText.substring(0, Math.min(originalText.length(), (int) (acc / duration)))); + } + + public PrintTextView(Context context, GUI gui, Map refs) { + super(context, gui, refs); + } +} diff --git a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java index 793d8f1..42b49a2 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java @@ -1,29 +1,22 @@ package com.bartlomiejpluta.demo.map; -import A.maps; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.entity.Entity; -import com.bartlomiejpluta.base.api.gui.Window; import com.bartlomiejpluta.base.api.gui.WindowPosition; import com.bartlomiejpluta.base.api.icon.Icon; import com.bartlomiejpluta.base.api.input.Input; import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.map.handler.MapHandler; import com.bartlomiejpluta.base.api.map.layer.object.MapPin; -import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.map.model.GameMap; -import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.lib.camera.CameraController; import com.bartlomiejpluta.base.lib.camera.FollowingCameraController; import com.bartlomiejpluta.base.util.input.InputUtil; import com.bartlomiejpluta.base.util.world.CharacterSpawner; import com.bartlomiejpluta.base.util.world.Warp; -import com.bartlomiejpluta.demo.entity.Chest; -import com.bartlomiejpluta.demo.entity.Door; -import com.bartlomiejpluta.demo.entity.Enemy; -import com.bartlomiejpluta.demo.entity.Player; +import com.bartlomiejpluta.demo.entity.*; import com.bartlomiejpluta.demo.event.EnemyDiedEvent; import com.bartlomiejpluta.demo.menu.GuiManager; import com.bartlomiejpluta.demo.runner.DemoRunner; @@ -82,12 +75,16 @@ public abstract class BaseMapHandler implements MapHandler { cameraController.update(); } - public CompletableFuture dialog(String message, WindowPosition position) { - return guiManager.showDialog(message, position); + public CompletableFuture dialog(NamedCharacter speaker, String message, WindowPosition position) { + return guiManager.showDialog(speaker.getName(), speaker.getDialogNameColor(), message, position); } - public CompletableFuture dialog(String message) { - return guiManager.showDialog(message, WindowPosition.BOTTOM); + public CompletableFuture dialog(NamedCharacter speaker, String message) { + return guiManager.showDialog(speaker.getName(), speaker.getDialogNameColor(), message, WindowPosition.BOTTOM); + } + + public CompletableFuture dialogChoice(NamedCharacter speaker, String... choices) { + return guiManager.showDialogChoice(speaker.getName(), speaker.getDialogNameColor(), choices); } protected T addEntity(T entity, MapPin tile) { @@ -100,6 +97,10 @@ public abstract class BaseMapHandler implements MapHandler { return addEntity(new Enemy(id), tile); } + public Friend friend(@NonNull MapPin tile, @NonNull String id) { + return addEntity(new Friend(id), tile); + } + public Chest chest(@NonNull MapPin tile, @NonNull String id) { return addEntity(new Chest(id), tile); } diff --git a/src/main/java/com/bartlomiejpluta/demo/map/HeroHomeHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/HeroHomeHandler.java index 8fa78ad..bf6a077 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/HeroHomeHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/HeroHomeHandler.java @@ -1,11 +1,11 @@ package com.bartlomiejpluta.demo.map; import com.bartlomiejpluta.base.api.context.Context; -import com.bartlomiejpluta.base.api.input.Input; import com.bartlomiejpluta.base.api.map.model.GameMap; -import com.bartlomiejpluta.base.api.map.handler.MapHandler; -import com.bartlomiejpluta.base.api.screen.Screen; public class HeroHomeHandler extends BaseMapHandler { - + @Override + public void onOpen(Context context, GameMap map) { + dialog(player, "Ahhh, another beautiful day for an adventure... Let's go!"); + } } \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java b/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java index b398fdb..403ac61 100644 --- a/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java +++ b/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java @@ -26,6 +26,7 @@ public class GuiManager { private final EquipmentWindow equipment; private final LootWindow loot; private final DialogWindow dialog; + private final DialogChoiceWindow dialogChoice; private final Consumer gameMenuHandler = this::handleGameMenuKeyEvent; public GuiManager(@NonNull DemoRunner runner, @NonNull Context context) { @@ -49,6 +50,7 @@ public class GuiManager { this.gameMenu.reference("exit", Button.class).setAction(runner::exit); this.dialog = gui.inflateWindow(A.widgets.dialog.$, DialogWindow.class); + this.dialogChoice = gui.inflateWindow(A.widgets.dialog_choice.$, DialogChoiceWindow.class); this.loot = gui.inflateWindow(widgets.loot_menu.$, LootWindow.class); } @@ -83,7 +85,7 @@ public class GuiManager { return manager.size(); } - public CompletableFuture showStartMenu() { + public CompletableFuture showStartMenu() { manager.closeAll(); return manager.open(startMenu); } @@ -100,19 +102,23 @@ public class GuiManager { manager.setDisplayMode(DisplayMode.DISPLAY_TOP); } - public CompletableFuture showDialog(@NonNull String message, @NonNull WindowPosition position) { - return manager.open(dialog, message, position); + public CompletableFuture showDialog(@NonNull String speaker, int color, @NonNull String message, @NonNull WindowPosition position) { + return manager.open(dialog, speaker, color, message, position); } - public CompletableFuture openLootWindow(@NonNull Enemy enemy) { + public CompletableFuture showDialogChoice(@NonNull String speaker, int color, @NonNull String... choices) { + return manager.openForResult(Integer.class, dialogChoice, speaker, color, choices); + } + + public CompletableFuture openLootWindow(@NonNull Enemy enemy) { return manager.open(loot, enemy.getLoot(), "Loot"); } - public CompletableFuture openChestWindow(@NonNull Chest chest) { + public CompletableFuture openChestWindow(@NonNull Chest chest) { return manager.open(loot, chest.getContent(), chest.getName()); } - public CompletableFuture openGameMenu() { + public CompletableFuture openGameMenu() { return manager.open(gameMenu); } diff --git a/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml b/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml index 39e8ae4..dc07f33 100644 --- a/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml +++ b/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml @@ -7,7 +7,10 @@ margin="20f" width="900f" height="auto"> - + + + + + \ No newline at end of file diff --git a/widgets/5a5aea0a-8c8b-4730-8e45-9ec6ccc5c4f6.xml b/widgets/5a5aea0a-8c8b-4730-8e45-9ec6ccc5c4f6.xml new file mode 100644 index 0000000..3d0f935 --- /dev/null +++ b/widgets/5a5aea0a-8c8b-4730-8e45-9ec6ccc5c4f6.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file