From 3b99bc561a936b77e3914f37e301d676b7c78ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Tue, 31 Oct 2023 19:44:34 +0100 Subject: [PATCH] Apply BASE new MapLabels feature --- .../c8883e76-ae93-4673-8893-d2ec72c1e199.png | Bin 0 -> 20461 bytes data.sql | 23 ++++--- maps/8fbb151f-682a-4357-ba92-157e4097898f.dat | 15 ++++- maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat | Bin 28987 -> 30029 bytes maps/d1b85d85-c52a-46f5-b81e-444847f8ddae.dat | Bin 6387 -> 6454 bytes project.bep | Bin 4604 -> 4700 bytes .../bartlomiejpluta/demo/entity/Chest.java | 29 ++++++++ .../com/bartlomiejpluta/demo/entity/Door.java | 16 ++++- .../bartlomiejpluta/demo/entity/Enemy.java | 8 +-- .../demo/entity/MapObject.java | 4 +- .../bartlomiejpluta/demo/entity/Player.java | 2 +- .../demo/gui/EquipmentWindow.java | 2 +- .../demo/gui/ItemIconView.java | 4 +- .../demo/map/BaseMapHandler.java | 62 +++++++----------- .../bartlomiejpluta/demo/menu/GuiManager.java | 10 +-- .../demo/runner/DemoRunner.java | 31 ++++++--- .../bartlomiejpluta/demo/util/IconUtil.java | 2 +- .../demo/world/weapon/MeleeWeapon.java | 4 +- .../demo/world/weapon/RangedWeapon.java | 12 ++-- .../demo/world/weapon/ThrowingWeapon.java | 12 ++-- .../00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml | 4 +- .../1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml | 2 +- .../53ca3e54-0f8d-44fa-8281-acd9c5bba743.xml | 6 +- .../56ca6b39-f949-4212-9c23-312db25887e0.xml | 10 +-- .../ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml | 6 +- .../c473a91a-ff25-4e71-9bec-b35e48102aeb.xml | 6 +- .../d78413cd-0dad-4b51-8dd1-54e33535fe53.xml | 2 +- 27 files changed, 160 insertions(+), 112 deletions(-) create mode 100644 animations/c8883e76-ae93-4673-8893-d2ec72c1e199.png diff --git a/animations/c8883e76-ae93-4673-8893-d2ec72c1e199.png b/animations/c8883e76-ae93-4673-8893-d2ec72c1e199.png new file mode 100644 index 0000000000000000000000000000000000000000..1092de4a91ad24f22df040e7cd62889bb2660a8b GIT binary patch literal 20461 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 K&t;ucLK6V9*d*To literal 0 HcmV?d00001 diff --git a/data.sql b/data.sql index fb1c2ac..d0e65dc 100644 --- a/data.sql +++ b/data.sql @@ -101,14 +101,16 @@ INSERT INTO "PUBLIC"."ENEMY_DROP" VALUES (9, 'skeleton_archer', 'ranged:wooden_bow', 0.3, '1'), (10, 'skeleton_archer', 'ammo:wooden_arrow', 0.7, '1d4+3'), (11, 'deku', 'junk:eye', 0.7, '1d2'); -CREATE MEMORY TABLE "PUBLIC"."START_GAME"( - "ID" SMALLINT NOT NULL, - "START_POINT" VARCHAR NOT NULL -); -ALTER TABLE "PUBLIC"."START_GAME" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_C0" PRIMARY KEY("ID"); --- 1 +/- SELECT COUNT(*) FROM PUBLIC.START_GAME; -INSERT INTO "PUBLIC"."START_GAME" VALUES -(1, 'Forrest,Main,1,12'); +CREATE MEMORY TABLE "PUBLIC"."CONFIG"( + "KEY" VARCHAR NOT NULL, + "VALUE" VARCHAR +); +ALTER TABLE "PUBLIC"."CONFIG" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_7" PRIMARY KEY("KEY"); +-- 3 +/- SELECT COUNT(*) FROM PUBLIC.CONFIG; +INSERT INTO "PUBLIC"."CONFIG" VALUES +('start_game', 'Hero Home,Main,Start'), +('screen', '1000x800'), +('camera_scale', '2'); CREATE MEMORY TABLE "PUBLIC"."LEVELS"( "LEVEL" INT DEFAULT NEXT VALUE FOR "PUBLIC"."SYSTEM_SEQUENCE_704587BB_DC0E_44AB_A7F0_3DE0CA44FE3F" NOT NULL NULL_TO_DEFAULT SEQUENCE "PUBLIC"."SYSTEM_SEQUENCE_704587BB_DC0E_44AB_A7F0_3DE0CA44FE3F", "MAX_HP" VARCHAR NOT NULL @@ -132,9 +134,10 @@ CREATE MEMORY TABLE "PUBLIC"."THROWING_WEAPON"( "ICON" VARCHAR NOT NULL ); ALTER TABLE "PUBLIC"."THROWING_WEAPON" ADD CONSTRAINT "PUBLIC"."CONSTRAINT_40" PRIMARY KEY("ID"); --- 1 +/- SELECT COUNT(*) FROM PUBLIC.THROWING_WEAPON; +-- 2 +/- SELECT COUNT(*) FROM PUBLIC.THROWING_WEAPON; INSERT INTO "PUBLIC"."THROWING_WEAPON" VALUES -('deku_arrow', 'Deku''s arrow', 500, '2d4', 'Arrow', 'Arrow', '5d4', 'Punch', 'Arrow punch', 'Poof', 'Arrow punch', 'Generic,8,10'); +('deku_arrow', 'Deku''s arrow', 500, '2d4', 'Arrow', 'Arrow', '5d4', 'Punch', 'Arrow punch', 'Poof', 'Arrow punch', 'Generic,8,10'), +('shuriken', 'Shuriken', 100, '3d6', 'Shuriken', 'Arrow', '5d4', 'Punch', 'Arrow punch', 'Poof', 'Arrow punch', 'Generic,9,2'); CREATE MEMORY TABLE "PUBLIC"."ENEMY"( "ID" VARCHAR NOT NULL, "NAME" VARCHAR NOT NULL, diff --git a/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat b/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat index 29511e1..759d592 100644 --- a/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat +++ b/maps/8fbb151f-682a-4357-ba92-157e4097898f.dat @@ -7,8 +7,19 @@ $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|}2> -Main">2D +$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 + * layer: ObjectLayer - current object layer + * map: GameMap - current map + * handler: ForrestHandler - current map handler + * runner: DemoRunner - the game runner of the project + * context: Context - the game context + */ +handler.warp(here, A.maps.hero_house.main.forrest);" +house 2D Objects aboveD $413e09cf-ba41-4fe8-ac47-9697b5ad02453434CDCD3434CDCD34cd34CD34stcdCDCD12cdAB3434cdcdCDCD78ststGH12abABqrcdcdstcdst78abGHcdqrabcdstqrstcd34st34CD56cd34CD12abcd56EF78stCDABqrstEFGHcd56cdstcdabcd34EFstqr12stcdCDcd78ab34ABststGHcdcdqrCDababqrabqr34qr341278cd78cdCDCDABcdGHstGHst78cdst56cdGHstab56EFstqrEF12cdcdcdAB34st12st56cdst78CDABcdEFstGH78abstUV12cd12GHqrcdABstABst2@ Border forrest@ diff --git a/maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat b/maps/b602601a-e9b0-44bf-bc0d-5f31c9964ba1.dat index 0cf89b7549000cb5ef56d14977dd0b9492629947..b452410e9f74a10156a232e751e245cb18b077b5 100644 GIT binary patch delta 454 zcmdn}i1F+z#tjBm+zT|gSbP&R^OUA*Y<9FVWt<#f#Ws1Jqr&6>E49f9wqlbT9M~oo z*sx80V9Pey&sl7;pOe7kdrlmaCphqImb0m2=iJD`!70EkwTfl)Lf6%d^~o8j#U&aU zsYR(e3Q7eziJ5uvU?C+69~loZdB)Lf0c)N+NO#Ju#>l~tZ8AbW!nR)3jwZ$2wMVZ;Dc}hA8rUqcu#Tlh(X*sDHn$}!GpP4zh1-PZ& zFoWGQIlz@w5#kz0z1+ltV!e#iqWt)b{M=N%+{Da0z0|ytqRPoNt}>jrnK^g`M5L}j zH1g-Brer23=BDOBd^7pCrxcgaZ59qi0Wqm7AkS`QWC0mGIo`c{vYdx7=M82KbpckX zixB-9<%vZF&~Sj-oR(iylv-Q@u{R^Xv^Z7MS}Jm~xR)j)*JN=o1+DV@qMQ`Ha&VC7 gX;~|Aaj}3LD!?tlqr}U_4%IK9Cc(Pd!Rxmg05ffq)c^nh delta 266 zcmX^6igEWN#tjBm+oIcUd6<*hlPV(fKzJg<{p6^j4T3duEFA0toKjmhFXY?7$c?0Pa;$(G gXGUUPN=|B#Uhd=-0!qx*Qu>qk2= content.length) { + throw new IllegalStateException("The [" + slot + "] slot exceeds the chest size (" + content.length + ")!"); + } + + if (content[slot] != null) { + throw new IllegalStateException("The [" + slot + "] slot is already filled!"); + } + + content[slot] = item; + + return this; + } + + public Chest shuffle() { + var random = new Random(); + for(int i = content.length - 1; i > 0; --i) { + var index = random.nextInt(i + 1); + var tmp = content[index]; + content[index] = content[i]; + content[i] = tmp; + } + + return this; + } } diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Door.java b/src/main/java/com/bartlomiejpluta/demo/entity/Door.java index 554aebd..a680d47 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Door.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Door.java @@ -1,6 +1,7 @@ package com.bartlomiejpluta.demo.entity; import A.maps; +import com.bartlomiejpluta.base.api.map.layer.object.MapPin; import com.bartlomiejpluta.demo.runner.DemoRunner; import lombok.NonNull; @@ -13,12 +14,23 @@ public class Door extends MapObject { private final int layerId; private final Player player; + public Door(@NonNull MapPin label, @NonNull String id) { + super(id); + this.mapUid = label.getMap(); + this.layerId = label.getLayer(); + this.targetX = label.getX(); + this.targetY = label.getY(); + player = DemoRunner.instance().getPlayer(); + setPositionOffset(0, 16); + } + public Door(@NonNull String mapName, @NonNull String layerName, int targetX, int targetY, @NonNull String id) { super(id); - this.mapUid = maps.get(mapName).uid; + var map = maps.byName(mapName); + this.mapUid = map.$; this.targetX = targetX; this.targetY = targetY; - this.layerId = maps.getLayer(mapName, layerName); + this.layerId = map.layer(layerName).$; player = DemoRunner.instance().getPlayer(); setPositionOffset(0, 16); } diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java index 74703bb..2888660 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java @@ -49,7 +49,7 @@ public class Enemy extends Creature implements NPC { } public Enemy(@NonNull DB.model.EnemyModel template) { - super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.get(template.getCharset()).uid)); + super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.byName(template.getCharset()).$)); this.template = template; name = template.getName(); maxHp = DiceRoller.roll(template.getHp()); @@ -78,7 +78,7 @@ public class Enemy extends Creature implements NPC { this.throwingWeapon = new ThrowingWeapon(split[0], DiceRoller.roll(split[1])); } - this.dieAnimation = new SimpleAnimationRunner(A.animations.get(template.getDieAnimation()).uid); + this.dieAnimation = new SimpleAnimationRunner(A.animations.byName(template.getDieAnimation()).$); } @Override @@ -94,7 +94,7 @@ public class Enemy extends Creature implements NPC { @Override public void die() { super.die(); - changeCharacterSet(A.charsets.get(template.getDeadCharset()).uid); + changeCharacterSet(A.charsets.byName(template.getDeadCharset()).$); setScale(0.5f); setBlocking(false); setZIndex(-1); @@ -102,7 +102,7 @@ public class Enemy extends Creature implements NPC { ai = NoopAI.INSTANCE; dieAnimation.run(context, getLayer(), this); - context.playSound(A.sounds.get(template.getDieSound()).uid); + context.playSound(A.sounds.byName(template.getDieSound()).$); context.fireEvent(new EnemyDiedEvent(this)); LootGenerator.generate(template.getId(), loot); diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/MapObject.java b/src/main/java/com/bartlomiejpluta/demo/entity/MapObject.java index 3f51bd3..c541a5e 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/MapObject.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/MapObject.java @@ -22,11 +22,11 @@ public abstract class MapObject extends com.bartlomiejpluta.base.util.world.MapO } public MapObject(@NonNull DB.model.ObjectModel template) { - super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.get(template.getCharset()).uid), template.getFrame()); + super(ContextHolder.INSTANCE.getContext().createCharacter(A.charsets.byName(template.getCharset()).$), template.getFrame()); this.context = ContextHolder.INSTANCE.getContext(); this.runner = DemoRunner.instance(); this.name = template.getName(); - this.interactSound = A.sounds.get(template.getInteractSound()).uid; + this.interactSound = A.sounds.byName(template.getInteractSound()).$; } @Override diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java index f37557d..a3381fb 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java @@ -28,7 +28,7 @@ public class Player extends Creature { this.hp = this.maxHp; alive = true; - changeCharacterSet(A.charsets.luna.uid); + changeCharacterSet(A.charsets.luna.$); setScale(1f); setSpeed(4f); setAnimationSpeed(1f); diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/EquipmentWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/EquipmentWindow.java index 9dfcf69..10b9edb 100644 --- a/src/main/java/com/bartlomiejpluta/demo/gui/EquipmentWindow.java +++ b/src/main/java/com/bartlomiejpluta/demo/gui/EquipmentWindow.java @@ -58,7 +58,7 @@ public class EquipmentWindow extends DecoratedWindow { public EquipmentWindow(Context context, GUI gui, Map refs) { super(context, gui, refs); this.player = DemoRunner.instance().getPlayer(); - this.popupMenuWindow = gui.inflateWindow(A.widgets.eq_item_menu.uid); + this.popupMenuWindow = gui.inflateWindow(A.widgets.eq_item_menu.$); this.popupMenu = popupMenuWindow.reference("menu", VOptionChoice.class); this.useBtn = popupMenuWindow.reference("use", Button.class); this.dropBtn = popupMenuWindow.reference("drop", Button.class); diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java b/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java index 007cada..be9d4c8 100644 --- a/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java +++ b/src/main/java/com/bartlomiejpluta/demo/gui/ItemIconView.java @@ -81,7 +81,7 @@ public class ItemIconView extends IconView { @Attribute(value = "placeholder", separator = ",") public void setPlaceholderIcon(String icon, int row, int column) { this.placeholderIconPaint = gui.createPaint(); - this.placeholderIconSet = gui.getIconSet(A.iconsets.get(icon).uid); + this.placeholderIconSet = gui.getIconSet(A.iconsets.byName(icon).$); this.placeholderIconSetRow = row; this.placeholderIconSetColumn = column; } @@ -121,7 +121,7 @@ public class ItemIconView extends IconView { if (item != null && item instanceof ItemStack stack) { gui.beginPath(); - gui.setFontFace(fonts.roboto_regular.uid); + gui.setFontFace(fonts.roboto_regular.$); gui.setFontSize(17); gui.putText(x + 15, y + 5, String.valueOf(stack.getCount())); gui.setFillColor(textColor); diff --git a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java index 067e46e..793d8f1 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java @@ -1,13 +1,16 @@ 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; @@ -87,63 +90,42 @@ public abstract class BaseMapHandler implements MapHandler { return guiManager.showDialog(message, WindowPosition.BOTTOM); } - public Enemy enemy(@NonNull String id) { - return new Enemy(id); + protected T addEntity(T entity, MapPin tile) { + entity.setCoordinates(tile.getX(), tile.getY()); + map.getObjectLayer(tile.getLayer()).addEntity(entity); + return entity; } - public Enemy enemy(ObjectLayer layer, int x, int y, @NonNull String id) { - var enemy = new Enemy(id); - enemy.setCoordinates(x, y); - layer.addEntity(enemy); - return enemy; + public Enemy enemy(@NonNull MapPin tile, @NonNull String id) { + return addEntity(new Enemy(id), tile); } - public Chest chest(ObjectLayer layer, int x, int y, @NonNull String id) { - var chest = new Chest(id); - chest.setCoordinates(x, y); - layer.addEntity(chest); - return chest; + public Chest chest(@NonNull MapPin tile, @NonNull String id) { + return addEntity(new Chest(id), tile); } - public Door door(ObjectLayer layer, int x, int y, @NonNull String mapName, @NonNull String layerName, int targetX, int targetY, @NonNull String id) { - var door = new Door(mapName, layerName, targetX, targetY, id); - door.setCoordinates(x, y); - layer.addEntity(door); - return door; + public Door door(@NonNull MapPin tile, @NonNull MapPin target, @NonNull String id) { + return addEntity(new Door(target, id), tile); } - public CharacterSpawner spawner(ObjectLayer layer, int x, int y) { - var spawner = new CharacterSpawner().trackEntities(EnemyDiedEvent.TYPE); - spawner.setCoordinates(x, y); - layer.addEntity(spawner); - return spawner; + public CharacterSpawner spawner(@NonNull MapPin tile) { + return addEntity(new CharacterSpawner().trackEntities(EnemyDiedEvent.TYPE), tile); } - public Medicament medicament(@NonNull String id, int count) { - return new Medicament(id, count); + public Medicament medicament(@NonNull MapPin tile, @NonNull String id, int count) { + return addEntity(new Medicament(id, count), tile); } - public Medicament medicament(ObjectLayer layer, int x, int y, @NonNull String id, int count) { - var medicament = new Medicament(id, count); - medicament.setCoordinates(x, y); - layer.addEntity(medicament); - return medicament; - } - - public Icon icon(ObjectLayer layer, int x, int y, String iconSetUid, int row, int column) { + public Icon icon(@NonNull MapPin tile, String iconSetUid, int row, int column) { var icon = context.createIcon(iconSetUid, row, column); icon.setScale(1f); icon.setZIndex(-1); - icon.setCoordinates(x, y); - layer.addEntity(icon); - return icon; + return addEntity(icon, tile); } - public Warp warp(ObjectLayer layer, int x, int y, String targetMap, String targetLayer, int targetX, int targetY) { - var warp = new Warp(A.maps.get(targetMap).uid, A.maps.getLayer(targetMap, targetLayer), targetX, targetY); + public Warp warp(@NonNull MapPin tile, MapPin target) { + var warp = new Warp(target); warp.setEntity(player); - warp.setCoordinates(x, y); - layer.addEntity(warp); - return warp; + return addEntity(warp, tile); } } \ 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 f0603c2..b398fdb 100644 --- a/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java +++ b/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java @@ -36,20 +36,20 @@ public class GuiManager { this.gui.setRoot(this.manager); - this.startMenu = gui.inflateWindow(A.widgets.start_menu.uid, StartMenuWindow.class); + this.startMenu = gui.inflateWindow(A.widgets.start_menu.$, StartMenuWindow.class); this.startMenu.reference("new_game", Button.class).setAction(runner::newGame); this.startMenu.reference("exit", Button.class).setAction(runner::exit); - this.equipment = gui.inflateWindow(A.widgets.equipment.uid, EquipmentWindow.class); + this.equipment = gui.inflateWindow(A.widgets.equipment.$, EquipmentWindow.class); - this.gameMenu = gui.inflateWindow(A.widgets.game_menu.uid, GameMenuWindow.class); + this.gameMenu = gui.inflateWindow(A.widgets.game_menu.$, GameMenuWindow.class); this.gameMenu.reference("resume_game", Button.class).setAction(this::resumeGame); this.gameMenu.reference("equipment", Button.class).setAction(() -> manager.open(equipment)); this.gameMenu.reference("start_menu", Button.class).setAction(runner::returnToStartMenu); this.gameMenu.reference("exit", Button.class).setAction(runner::exit); - this.dialog = gui.inflateWindow(A.widgets.dialog.uid, DialogWindow.class); - this.loot = gui.inflateWindow(widgets.loot_menu.uid, LootWindow.class); + this.dialog = gui.inflateWindow(A.widgets.dialog.$, DialogWindow.class); + this.loot = gui.inflateWindow(widgets.loot_menu.$, LootWindow.class); } private void handleGameMenuKeyEvent(KeyEvent event) { diff --git a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java index dcf895e..981e2c3 100644 --- a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java +++ b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java @@ -1,5 +1,7 @@ package com.bartlomiejpluta.demo.runner; +import A.maps; +import DB.ConfigDAO; import DB.dao; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.gui.GUI; @@ -34,12 +36,15 @@ public class DemoRunner implements GameRunner { private void configureScreen() { var resolution = screen.getCurrentResolution(); - screen.setSize(800, 600); - screen.setPosition((resolution.x() - 1800) / 2, (resolution.y() - 1000) / 2); + var config = dao.config.find("screen").getValue().split("x"); + var width = Integer.parseInt(config[0]); + var height = Integer.parseInt(config[1]); + screen.setSize(width, height); + screen.setPosition((resolution.x() - width) / 2, (resolution.y() - height) / 2); } private void configureCamera() { - context.getCamera().setScale(2.5f); + context.getCamera().setScale(Float.parseFloat(dao.config.find("camera_scale").getValue())); } private void initMenu() { @@ -49,12 +54,12 @@ public class DemoRunner implements GameRunner { private void initHUD() { hud = context.newGUI(); hud.hide(); - var hudComponent = hud.inflateComponent(A.widgets.hud.uid); + var hudComponent = hud.inflateComponent(A.widgets.hud.$); hud.setRoot(hudComponent); } private void initPlayer() { - this.player = new Player(context.createCharacter(A.charsets.luna.uid)); + this.player = new Player(context.createCharacter(A.charsets.luna.$)); } public void newGame() { @@ -62,13 +67,19 @@ public class DemoRunner implements GameRunner { guiManager.closeAll(); guiManager.enableGameMenu(); player.reset(); - var start = dao.start_game.find((short) 1); - var startPoint = start.getStartPoint().split(","); - context.openMap(A.maps.get(startPoint[0]).uid); - context.getMap().getObjectLayer(A.maps.getLayer(startPoint[0], startPoint[1])).addEntity(this.player); - player.setCoordinates(parseInt(startPoint[2]), parseInt(startPoint[3])); + var start = dao.config.find("start_game").getValue().split(","); + + var map = A.maps.byName(start[0]); + var layer = map.layer(start[1]); + var label = layer.label(start[2]); + + context.openMap(map.$); + context.getMap().getObjectLayer(layer.$).addEntity(this.player); + player.setCoordinates(label.getX(), label.getY()); context.resume(); hud.show(); + + var x = A.maps.hero_home.main.entry; } public void returnToStartMenu() { diff --git a/src/main/java/com/bartlomiejpluta/demo/util/IconUtil.java b/src/main/java/com/bartlomiejpluta/demo/util/IconUtil.java index c8db851..266dd53 100644 --- a/src/main/java/com/bartlomiejpluta/demo/util/IconUtil.java +++ b/src/main/java/com/bartlomiejpluta/demo/util/IconUtil.java @@ -6,6 +6,6 @@ import com.bartlomiejpluta.base.api.icon.Icon; public class IconUtil { public static Icon parseIcon(String iconDefinition) { var parts = iconDefinition.split(","); - return ContextHolder.INSTANCE.getContext().createIcon(A.iconsets.get(parts[0]).uid, Integer.parseInt(parts[1]), Integer.parseInt(parts[2])); + return ContextHolder.INSTANCE.getContext().createIcon(A.iconsets.byName(parts[0]).$, Integer.parseInt(parts[1]), Integer.parseInt(parts[2])); } } diff --git a/src/main/java/com/bartlomiejpluta/demo/world/weapon/MeleeWeapon.java b/src/main/java/com/bartlomiejpluta/demo/world/weapon/MeleeWeapon.java index 0b5c660..25102d6 100644 --- a/src/main/java/com/bartlomiejpluta/demo/world/weapon/MeleeWeapon.java +++ b/src/main/java/com/bartlomiejpluta/demo/world/weapon/MeleeWeapon.java @@ -37,8 +37,8 @@ public class MeleeWeapon extends BaseItem implements Weapon { this.name = template.getName(); this.dmgRoller = DiceRoller.of(template.getDamage()); this.cooldown = template.getCooldown(); - this.animation = new RandomAnimationsRunner(2).nRange(0, 2f).nScale(0.2f, 0.15f).uAnimationSpeed(0.5f, 1f).nRotation(0, 10).offset(0, -10).uDelay(250, 500).with(A.animations.get(template.getAnimation()).uid); - this.sound = A.sounds.get(template.getSound()).uid; + this.animation = new RandomAnimationsRunner(2).nRange(0, 2f).nScale(0.2f, 0.15f).uAnimationSpeed(0.5f, 1f).nRotation(0, 10).offset(0, -10).uDelay(250, 500).with(A.animations.byName(template.getAnimation()).$); + this.sound = A.sounds.byName(template.getSound()).$; } @Override diff --git a/src/main/java/com/bartlomiejpluta/demo/world/weapon/RangedWeapon.java b/src/main/java/com/bartlomiejpluta/demo/world/weapon/RangedWeapon.java index edc62d5..f91662a 100644 --- a/src/main/java/com/bartlomiejpluta/demo/world/weapon/RangedWeapon.java +++ b/src/main/java/com/bartlomiejpluta/demo/world/weapon/RangedWeapon.java @@ -52,12 +52,12 @@ public class RangedWeapon extends BaseItem implements Weapon { this.dmgRoller = DiceRoller.of(template.getDamage()); this.rangeRoller = DiceRoller.of(template.getRange()); this.cooldown = template.getCooldown(); - this.animation = new BulletAnimationRunner(A.animations.get(template.getAnimation()).uid).infinite().offset(0, -15).onHit(this::onHit).onMiss(this::onMiss).speed(7f).animationSpeed(4f).scale(0.6f); - this.sound = A.sounds.get(template.getSound()).uid; - this.punchAnimation = new SimpleAnimationRunner(A.animations.get(template.getPunchAnimation()).uid); - this.punchSound = A.sounds.get(template.getPunchSound()).uid; - this.missAnimation = new SimpleAnimationRunner(A.animations.get(template.getMissAnimation()).uid).scale(0.4f); - this.missSound = A.sounds.get(template.getMissSound()).uid; + this.animation = new BulletAnimationRunner(A.animations.byName(template.getAnimation()).$).infinite().offset(0, -15).onHit(this::onHit).onMiss(this::onMiss).speed(7f).animationSpeed(4f).scale(0.6f); + this.sound = A.sounds.byName(template.getSound()).$; + this.punchAnimation = new SimpleAnimationRunner(A.animations.byName(template.getPunchAnimation()).$); + this.punchSound = A.sounds.byName(template.getPunchSound()).$; + this.missAnimation = new SimpleAnimationRunner(A.animations.byName(template.getMissAnimation()).$).scale(0.4f); + this.missSound = A.sounds.byName(template.getMissSound()).$; } private void onHit(Movable attacker, Entity target) { diff --git a/src/main/java/com/bartlomiejpluta/demo/world/weapon/ThrowingWeapon.java b/src/main/java/com/bartlomiejpluta/demo/world/weapon/ThrowingWeapon.java index 4019ade..cd437cd 100644 --- a/src/main/java/com/bartlomiejpluta/demo/world/weapon/ThrowingWeapon.java +++ b/src/main/java/com/bartlomiejpluta/demo/world/weapon/ThrowingWeapon.java @@ -57,12 +57,12 @@ public class ThrowingWeapon extends StackableItem implements Weapon { this.dmgRoller = DiceRoller.of(template.getDamage()); this.rangeRoller = DiceRoller.of(template.getRange()); this.cooldown = template.getCooldown(); - this.animation = new BulletAnimationRunner(A.animations.get(template.getAnimation()).uid).infinite().offset(0, -15).onHit(this::onHit).onMiss(this::onMiss).speed(7f).animationSpeed(4f).scale(0.6f); - this.sound = A.sounds.get(template.getSound()).uid; - this.punchAnimation = new SimpleAnimationRunner(A.animations.get(template.getPunchAnimation()).uid); - this.punchSound = A.sounds.get(template.getPunchSound()).uid; - this.missAnimation = new SimpleAnimationRunner(A.animations.get(template.getMissAnimation()).uid).scale(0.4f); - this.missSound = A.sounds.get(template.getMissSound()).uid; + this.animation = new BulletAnimationRunner(A.animations.byName(template.getAnimation()).$).infinite().offset(0, -15).onHit(this::onHit).onMiss(this::onMiss).speed(7f).animationSpeed(4f).scale(0.6f); + this.sound = A.sounds.byName(template.getSound()).$; + this.punchAnimation = new SimpleAnimationRunner(A.animations.byName(template.getPunchAnimation()).$); + this.punchSound = A.sounds.byName(template.getPunchSound()).$; + this.missAnimation = new SimpleAnimationRunner(A.animations.byName(template.getMissAnimation()).$).scale(0.4f); + this.missSound = A.sounds.byName(template.getMissSound()).$; } private void onHit(Movable attacker, Entity target) { diff --git a/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml b/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml index f7e5464..e4623ca 100644 --- a/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml +++ b/widgets/00bd0625-b3b8-4abf-97b7-91f42bce28ec.xml @@ -23,7 +23,7 @@ diff --git a/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml b/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml index 0da7877..39e8ae4 100644 --- a/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml +++ b/widgets/1c2b2ba2-66bf-40ee-97bf-6e5065b7b420.xml @@ -7,7 +7,7 @@ margin="20f" width="900f" height="auto"> - \ No newline at end of file diff --git a/widgets/53ca3e54-0f8d-44fa-8281-acd9c5bba743.xml b/widgets/53ca3e54-0f8d-44fa-8281-acd9c5bba743.xml index d01c39c..efa9ac2 100644 --- a/widgets/53ca3e54-0f8d-44fa-8281-acd9c5bba743.xml +++ b/widgets/53ca3e54-0f8d-44fa-8281-acd9c5bba743.xml @@ -10,7 +10,7 @@