From d398b042a765f5222c2adbaa789d53af8b184c9d Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 24 Sep 2025 01:29:36 -0400 Subject: [PATCH] New bossfight layout with fake 'paper cutouts' to work out how the UI would work. --- Makefile | 2 +- assets/bosses.json | 12 +++--- assets/bossfights/test_background.png | Bin 0 -> 10217 bytes assets/bossfights/test_boss.png | Bin 0 -> 14562 bytes assets/bossfights/test_floor.png | Bin 0 -> 10217 bytes assets/bossfights/test_player.png | Bin 0 -> 8850 bytes assets/bossfights/test_thirds.png | Bin 0 -> 11529 bytes assets/config.json | 27 +++++++++++- assets/sprites/peasant_girl_rear_view_01.png | Bin 0 -> 34174 bytes boss/ui.cpp | 42 +++++++++++++++---- boss/ui.hpp | 6 +++ components.hpp | 4 +- tests/components.cpp | 6 +-- 13 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 assets/bossfights/test_background.png create mode 100644 assets/bossfights/test_boss.png create mode 100644 assets/bossfights/test_floor.png create mode 100644 assets/bossfights/test_player.png create mode 100644 assets/bossfights/test_thirds.png create mode 100644 assets/sprites/peasant_girl_rear_view_01.png diff --git a/Makefile b/Makefile index a3f6721..ece7c1d 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ clean: meson compile --clean -C builddir debug_test: build - gdb --nx -x .gdbinit --ex run --ex bt --ex q --args builddir/runtests -e "[lighting]" + gdb --nx -x .gdbinit --ex run --ex bt --ex q --args builddir/runtests -e win_installer: powershell 'start "C:\Program Files (x86)\solicus\InstallForge\bin\ifbuilderenvx86.exe" scripts\win_installer.ifp' diff --git a/assets/bosses.json b/assets/bosses.json index 2d18cdb..f82834b 100644 --- a/assets/bosses.json +++ b/assets/bosses.json @@ -2,8 +2,8 @@ "RAT_KING": { "components": [ {"_type": "BossFight", - "background": "boss_fight_background", - "stage": null, + "background": "test_background", + "floor": "test_floor", "weapon_sound": "Sword_Hit_2" }, {"_type": "Combat", "hp": 20, "max_hp": 20, "damage": 20, "dead": false}, @@ -16,15 +16,15 @@ "scale": 0.2, "stationary": false }, - {"_type": "Sprite", "name": "rat_king_boss", "width": 720, "height": 720, "scale": 0.8, "stationary": false}, + {"_type": "Sprite", "name": "test_boss", "width": 720, "height": 720, "scale": 0.8, "stationary": false}, {"_type": "Sound", "attack": "Marmot_Scream_1", "death": "Creature_Death_1"} ] }, "DEVILS_FINGERS": { "components": [ {"_type": "BossFight", - "background": "devils_fingers_background", - "stage": "devils_fingers_stage", + "background": "test_background", + "floor": "test_floor", "weapon_sound": "Sword_Hit_2" }, {"_type": "Combat", "hp": 20, "max_hp": 20, "damage": 20, "dead": false}, @@ -38,7 +38,7 @@ "stationary": true }, {"_type": "Sprite", - "name": "devils_fingers_sprite", + "name": "test_boss", "width": 720, "height": 720, "scale": 1.0 diff --git a/assets/bossfights/test_background.png b/assets/bossfights/test_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3af780a293fec7aff785285814fb8ce54ae59290 GIT binary patch literal 10217 zcmeHNeQZ-z6o2J&8;k-O!eGMdV?i=#U)!ydKH9;yZnS2dqpPfw!1mVOw$HVFkG{9H zn+gL#V=%-KKtO|JQG<-}71R*E#xjOcaUep#0D)`?Bmxr_R6Zi!`#SdFKx5)RCijo# zzI%V?oO|!N=bZb?P2VjlT#%SBIe{REM4Q#(Ac&E51Tkz*+z>e8+qWnQb`Eh)m*lb+ zFm67mVLf~W&_sg*#0kPQFDkI^N+6LHz{iEmRM(+n6v=taREfc^wF|kx&sl53pt!cs z>8`DG8$Hy#tOQe(fd+y=V##PQ5E7ZFnUd`?@EZ-&6e){Hm1fFiFCugKFdz*YgGNhb zC6K1D$ICb@`8~?8XQup;Brr4`i9|G!bPXT&(K@5iNNe@9Uay7{YOy9Hu~BtMoQ_Py zY*>Kk4s(LU@gWk~WGnb8$xKlYCwq*8DA#8_B=&3{I)X+BtjI+;c3El``?QPg9El9N_o}L5j{>Fu%;&yh|U@T&<-H- zRbe;Cs|F!yy6g$$7p91df`H4y1wlxJ-ZfJ?qh9+LxU@g4ozoA_93{;^bekH`gJ?Z=Gx%x0OWz3}eO;!3-sP{Y= zd4+b~0~eSs8|;H@xw%DQ-pd6bCOQ`6khZ+sOr0?^Q?1v;W`KvsKwZvTV__vIrPt~W zYOPVNPj~9lnT!m^pjT@%7;VfWvNX&I4=b_%B#$DSG(io!ow0JF#D{C-p;)*VgJrQ^ ztQ+9uI44Q@v>DcooMfhiFz=~y1CP8dXfB3|yjO~_VUX>E2W_UZys(5Q>!?Jeff!LJ%|StLoclSr#UpoR{u@^j%WkzRelCyscliwpDbNu)6%@ zfcMHHM|a1)D+OBv8=D$h+x84!p;!!>lIqtR7FWErt=s!qzW#dk?faLyj$D_z4wfgT zZrrf+^2pDnMcps|o-*oq-aEI}FhA`*d%WCw=G>NpcZdnMI>xL`<}Z1hzPbL#7jIjg zCC!dmriLA_E{Zy$wT8y6ht-#Mrsj;hR?L1dV`9=#!#$z?WBa;^_rLY1uTC4@xa7jP z$0x3p?MgkcVejD-U)q-9mwwZg{V>Vi-fp`&zRPm5eOOjXfv#=l(g(?#F0P%TJhHzb zXL*@w#isW<)AWs}H>1{>zy9#W$H(40=N`JP;$Hr=A5F<^i(kC( z<<-~EYO|Dy9S`GnPQ6Ag`My1+`ShV1AA(Z{m8X6ds!Pwe%oUC*ZYf{0j+*dE+Oo>o zBlf&-I%)N$${l5CzwSEFe#boQd}rhC@`$pw^NsGi$^%Y+{MeOEN8rT~FIY=Of*8|^ zeu|B=#!MjylCW8_ozahOUdT=)RAZZ)J3PBrs5Wm`snQc3+}^rHDPK8-5BZVu$1gL6 zPDUSfs}+f;o!?S70<|PNe<*6-*KSv!);j4lYKYX)ez_e#B13NDu{w4g4jYsUIAw6T zKyiReCB7z59N;SwG89Y?Fg?KZ0F?tw4=_DIae(OorUxhvFg?KZ0EPjk2bdn9a)9Xp zrUxhv{xf=TG^j)_m_PkrJiaqPP;$qLa&kc#a0%KTy?Z$4w z;Q+G*X9=zjxM<=uz?UTE4*##)pkZ4J1^=xv7yTCiQ#%yB|Mo6djIW7bUbW};exz*6 LE41v+DPQ#`{J0w= literal 0 HcmV?d00001 diff --git a/assets/bossfights/test_boss.png b/assets/bossfights/test_boss.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b0bf9a988bc8935c85792ce0e0baa68e5e3b55 GIT binary patch literal 14562 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 literal 0 HcmV?d00001 diff --git a/assets/bossfights/test_floor.png b/assets/bossfights/test_floor.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f46d9fbe668c0e03496e9bfb5272fc6a58d117 GIT binary patch literal 10217 zcmeHNeN0nV6o2&t0mZ7pDa!QmB+j7iYYS!e*`h$fcA*SQg)*b?Xm8s$+P-JsgBJE7 zI^D9kkYUsbTbwb=;zayd+!o^(8pLIrL+3QQsL?>8$yBDqZGL3#-dE&f=$0k>XUYAe zx$oZJIp^Mc?m6fFa?^K<3Ku8DPm3oABEf1g+X-S!Jwc3`A3Fk$c=weg!p=d?;gp=V z0>;G$)U2DY1nNjYfH*-I7e)luRRtun5_q|wiRw9clp;B|i7M6GG&Ug@_&7^l2o%>9 zI$U*CE`ys|m=$k~Fwj5%NGur%_=6%7F;TKz27aSqnj&Qpsmeq-ZAD}*9|ELatygQP zta#EGa(fuNIloUC_Dqydk_3jP!{M+xoUZ0WURrA~7-)@-*6CDGLM7G)B{rf8inEZ3 zs0}j^T_H}8I6g=sn`|XtEtx0^;$)w35a9-_2gSbaLr2gEp|xraJy=}gJkJnE$S`ri z$4k8E4xc~@?(7Pr|YtU)_0+$VjHS-6-xxAkb6~n*+P*K)G z-ear*)(c8Gx8xgSZvZI(L9Yxwu_Z%jh5l-E#7l!5+>>s=o^t>*QHD%<&{Snlh5FBf zkymKr-Ee{FvcUn!nwwh`;ys)nVxoO<4r$HH&D0t)GgUfubOv~M4AkX3wPsd=QaX)J zuhJM)x^#y&oypKMsGGrPq8^c@VNSSNiTx*e6xpN^YS?Uyg%c${R4Wff!@U@+jP{~k zKPSgINy?|qurA~z6D5RrceM++qTQkV^aY%e@$6P4}paL}E#BupXB8w4Rz ztJZ4NnM0MrJ^&3qdwX=>;%Jn7PgZB7hppcz3k=Fus23fBRRER~y1$;lPJcxLL0E=D zu-+6;SlU1kiq#xEnPDeF5OW%<8$0Kkmn5ECnC^S@U1Hw8Eg8E!?O(TdRCbrL+WaKH z=gK2{Z`Zvm1_KaSoSO!`X8#m~eRlc>g*Yjze9~CoQc&;0$=98VHvXTq59dlMZNZNdH{dDEw&$s8i zS)Q_L^LyQCx|Z%U&XmG6^VCa3yD3dOyUvln;n2m$N8dQ-8o9OdUjEDQ^Sr+yY{%FZ8OARJNLQod>#JNc8el~wa% z_PlU9aqZ@+9p!1i?%LmZ$297EcgyaIu(GcE_1?S6{SIH;gw?Hw;l&XrSjt3#7~hV5 zicNFJPbUbHu$r?Sk&kX($W9OA>R3|JQAheZ{jC{##=K`Y!;cb|`xP?Om?85fe9~p{m4;l&yJ% K=G{3JYyJe?xfzN8 literal 0 HcmV?d00001 diff --git a/assets/bossfights/test_player.png b/assets/bossfights/test_player.png new file mode 100644 index 0000000000000000000000000000000000000000..32aafad9c2ac358c098b3a57207df67f38ad754c GIT binary patch literal 8850 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 literal 0 HcmV?d00001 diff --git a/assets/bossfights/test_thirds.png b/assets/bossfights/test_thirds.png new file mode 100644 index 0000000000000000000000000000000000000000..2b49ed3a324739b3e22db8d9e6013a95cda81d56 GIT binary patch literal 11529 zcmeHNe^66L9^VK>)I#uvUZq<4e0u7D$;%Hzo0wpcfN*0x4Yc6Vf+2Z({M`n*G>p06>}Pp$cLU}%}$EpDB6MXK23#mDW}76h+`AZNjEj+-N8;w9}+?E2qBlsi0S4W zW&IIz9=Xq)DW*A^EvA{t3EcCDN%+2wkiG|ZahsS285<1$+1zfwXBsS*RtAZfAoZRx z-F*O?UCxk%k!0yorgJZYm;kC<|9S&EFKVmUI*e&|O~w#E;Nc$}jOV4hqgmG376J z3e(~0Bx2g5Ha-xVTn~*fLIZ7q15^qQr=ZN#)b&o`Ph8^(GElDP#(jM5dM~l-Y8nW<`=lu|gtSp^=3c5v<{!u$Va0PucUz##b>f)an$AU$V2gc`17Cm7x+FsKD3AIXcl*T z!<212e|jZzQZy`nA!E)Xe@=L@WO+p6(obWz?k;(^AR&18n156ke!joqy-hB$r+@R< zx8h^j#j|3nk9c9?n8jplWC4h7<-ej`iP7@`z(A%xCELCC%2x{=&!o(IrLQHtx^An4 z6D*c2A|%WB)XA7Y;SDEer4it%B~@(AfW^RZ^;+hB5ydeN$KMdMoy-hnOFlb@U! z7lH4a_W953sVjGV7Xzx46)TndtpgvOO$AlkuX=*@8~AfO71{&_du#bB})4$JEyqtdWX<^mJfbGD|fcc0Jn&P7fMF1*LT1D zCIB^;@>%Z}dv{(G0mf0$(c~Q%7l(Kjl{#Rn~?GKK0r8gw*I4~49>tThbFZSuJ8L!58|F(4TA5NEcU5JU% z&c&Dt!D8JI!&kh5>U0r)ihjVztk8%16*y*w~ea*i^-Q6FrT2=2!mD%PzZCdS zVK_2@Z_W@eNDOF`@ESmofoI|WIAV5wI12{*h&=wk04Ug_42Lp53To(#ht7CEec*3i zS);R6^aTB#W_a_s?(817R~G2PLGNoXbp=biTXMuAuw_o*cG%Ke8~)VaL8S4SGBa(R K{=LTu< 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 literal 0 HcmV?d00001 diff --git a/boss/ui.cpp b/boss/ui.cpp index cb1954e..cdb9a4e 100644 --- a/boss/ui.cpp +++ b/boss/ui.cpp @@ -2,30 +2,58 @@ #include "constants.hpp" namespace boss { - UI::UI(shared_ptr world, Entity boss_id) - : $world(world), $boss_id(boss_id) + using namespace guecs; + + UI::UI(shared_ptr world, Entity boss_id) : + $world(world), + $boss_id(boss_id), + $boss_sprite(textures::get_sprite("test_boss")), + $player_sprite(textures::get_sprite("test_player")), + $floor_sprite(textures::get_sprite("test_floor")) { } void UI::init() { $gui.position(SCREEN_WIDTH-BOSS_VIEW_WIDTH,0, BOSS_VIEW_WIDTH, SCREEN_HEIGHT); + $gui.set($gui.MAIN, {$gui.$parser, THEME.DARK_MID}); + auto& background = $gui.get($gui.MAIN); + background.set_sprite("test_background", true); + $gui.layout( - "[a1|b1|c1|d1|e1|f1]" + "[a1|boss1|boss2|boss3|e1|f1]" "[a2|b2|c2|d2|e2|f2]" - "[a3|b3|c3|d3|e3|f3]" + "[floor2|b3|c3|d3|e3|f3]" "[a4|b4|c4|d4|e4|f4]" - "[a5|b5|c5|d5|e5|f5]" + "[floor1|player1|player2|player3|e5|f5]" "[a6|b6|c6|d6|e6|f6]" ); + + + position_sprite($boss_sprite, "boss2", 0.4, true); + position_sprite($player_sprite, "player1", 0.5, true); + position_sprite($floor_sprite, "floor2", 1.0, false); + $gui.init(); } + void UI::position_sprite(textures::SpriteTexture& st, const std::string& name, float scale, bool at_mid) { + auto& cell = $gui.cell_for(name); + float x = float(at_mid ? cell.mid_x : cell.x); + float y = float(at_mid ? cell.mid_y : cell.y); + + st.sprite->setPosition({x, y}); + st.sprite->setScale({scale, scale}); + } + void UI::render(sf::RenderWindow& window) { $gui.render(window); - $gui.debug_layout(window); + window.draw(*$floor_sprite.sprite); + window.draw(*$boss_sprite.sprite); + window.draw(*$player_sprite.sprite); + // $gui.debug_layout(window); } - bool UI::mouse(float x, float y, guecs::Modifiers mods) { + bool UI::mouse(float x, float y, Modifiers mods) { return $gui.mouse(x, y, mods); } diff --git a/boss/ui.hpp b/boss/ui.hpp index 7dff84e..c03d281 100644 --- a/boss/ui.hpp +++ b/boss/ui.hpp @@ -3,14 +3,19 @@ #include #include #include +#include "textures.hpp" namespace boss { using std::shared_ptr; using namespace DinkyECS; + using namespace textures; struct UI { shared_ptr $world = nullptr; Entity $boss_id = NONE; + SpriteTexture $boss_sprite; + SpriteTexture $player_sprite; + SpriteTexture $floor_sprite; guecs::UI $gui; UI(shared_ptr world, Entity boss_id); @@ -18,6 +23,7 @@ namespace boss { void init(); void render(sf::RenderWindow& window); bool mouse(float x, float y, guecs::Modifiers mods); + void position_sprite(SpriteTexture& st, const std::string& name, float scale, bool at_mid=false); bool boss_dead(); }; } diff --git a/components.hpp b/components.hpp index 1585645..b8eb454 100644 --- a/components.hpp +++ b/components.hpp @@ -78,7 +78,7 @@ namespace components { struct BossFight { std::string background; - std::optional stage; + std::optional floor; std::string weapon_sound; }; @@ -147,7 +147,7 @@ namespace components { using ComponentMap = std::unordered_map; ENROLL_COMPONENT(Tile, display, foreground, background); - ENROLL_COMPONENT(BossFight, background, stage, weapon_sound); + ENROLL_COMPONENT(BossFight, background, floor, weapon_sound); ENROLL_COMPONENT(Sprite, name, width, height, scale); ENROLL_COMPONENT(Curative, hp); ENROLL_COMPONENT(LightSource, strength, radius); diff --git a/tests/components.cpp b/tests/components.cpp index 3106c4f..32bbbc4 100644 --- a/tests/components.cpp +++ b/tests/components.cpp @@ -38,7 +38,7 @@ TEST_CASE("make sure json_mods works", "[components]") { if(comp_data["_type"] == "BossFight") { auto comp = components::convert(comp_data); // the boss fight for the rat king doesn't have a stage so false=optional - REQUIRE(comp.stage == std::nullopt); + REQUIRE(comp.floor != std::nullopt); } } @@ -51,11 +51,11 @@ TEST_CASE("make sure json_mods works", "[components]") { components::configure_entity(world, rat_king, config["RAT_KING"]["components"]); auto boss = world.get(rat_king); - REQUIRE(boss.stage == std::nullopt); + REQUIRE(boss.floor != std::nullopt); // now load the other one for the other way optional is used auto devils_fingers = world.entity(); components::configure_entity(world, devils_fingers, config["DEVILS_FINGERS"]["components"]); auto boss2 = world.get(devils_fingers); - REQUIRE(boss2.stage != std::nullopt); + REQUIRE(boss2.floor != std::nullopt); }