From 44673b5030478d87aa800dc6aa18dede6d65a234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Wed, 11 Aug 2021 12:22:46 +0200 Subject: [PATCH] demo: ice rink test --- art/ice_rink.dem | Bin 0 -> 73069 bytes art/vehicle_unset.dem | Bin 0 -> 14309 bytes code/game/src/debug_replay.c | 6 ++++++ code/game/src/debug_ui.c | 3 ++- code/game/src/debug_ui_actions.c | 18 ++++++++++++++++++ code/game/src/debug_ui_helpers.c | 2 ++ code/game/src/debug_ui_widgets.c | 7 +++++++ code/game/src/world/worldgen/worldgen_test.c | 5 +++++ code/modules/modules/systems.c | 2 +- code/modules/source/system_onfoot.c | 7 +++++-- code/modules/source/system_vehicle.c | 5 +++-- 11 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 art/ice_rink.dem create mode 100644 art/vehicle_unset.dem create mode 100644 code/game/src/debug_ui_helpers.c diff --git a/art/ice_rink.dem b/art/ice_rink.dem new file mode 100644 index 0000000000000000000000000000000000000000..b8adceb054469d78a424c50a711552d14a17a8f7 GIT binary patch literal 73069 zcmd_zORgMQ6@_8r1}}*>NL2-h1`jcdk{B4OnbDy`hY>ImS~!)?4C&nX%Fn6%g37Gt*I~}D==mj; zLS53z9DA(zd}fu>feA{QJyzVC6{mS0r`co0X=bzHw4aUMC7x5*+|I00*u3e7vAuqK z9=Csd!}GcQ7w_{V|31^aPf^^cpVy@~vz6BpQ=82MMVTd-P4koDH@vFcTT$Go)7*j6 z?6G13D^4?;)9kTgg4z4jX=d}LrnaZdDW1aSJFDz-Jo#?#^>42fX1o0t@AFz>HY-2n zlfqqFIX1oV-~MTj6;oSrTDjt#W`d&lI`~OA9}{>^x#FE>0yk>KX;uoG)2x`fD4tUk zU-2caG-{6(_g1LwF~P2T!34WHn7cwQuWasmZqDU#=sBe~pMtLgdrUB^n81n&+^CgZ zX=NX?ohje_Ls!+il#*u8*{1IzC>|4>o%WT$bF4Vc1WvQ3%(2Ic2~6!YD<#crWscL# zW{;I!Y3`t~J)ZX6x36BE-#>@4rX9-4b}05(DQUYrrY?%9t&}39Rgz z;|{Et+8*!Yv|UPJ+qJ3Lthl#AUFO(h0#iH99xEly)J|J}UvfNM%vO~3Q-ouV*}P97 znDv;t%yF8P=g*mCEBh3Wsmt}|G_%=L6jM9RY*w6RW&K*sBX_+CteC)_!dB)KPhs2$` zC{8O%p|+W~ohJrR?K0E4$`=eSIXJJQIIJ zWf!$id)Lxt&5?JcYm>Z(7)#W@Y_;*bjU6WNH)Gy z&M9fd;|{ENj@v0|p5wHlJb#V}{Qk`zD{jZ0qWC%}Y0sxF1ol{QJ8pC~%>DcY-(z!l~eE>r&*cp&1_c8R(f-q39LBHY$eSeD}~J-&+(>Cvod?V zd5-t7;KNI5q+5262aqZld7t{|ZFR1UH7rosT&vDwU zQaYF=a0g~HK}oa6a|)Z&3W3vhDW)Mm5CiqlMOkLMJ{bBglfD}eX+iQcqO+cW!4 z)pN=|Zq##jc}!3?^(lCtU5Ym?1Wt1Y_E<5S&!>1yV8wH+nA*zh)5UYVsXc|w?N}*n zCCwfyh0VQrjujIW&x`NPyT6*v&hb@cr954n=60;OgTm&tLS54Au~OP`niY3okCl?< zO`ornO-=2z;_N(!WirL(O39LA6md$g_W&(SxIL%5qg>}=*4RHO8a!orF zd)9ppj}@n_n|?}Z-p7hJwa1Fn+*>(Q&naw9D{O_p?N}*nPP5{6it>0nmpdLmne?u# z)Q4wfJCv2+5yf+?%+6U)`=B;~m032YnP8XVcb(-5Db$`bd!~iWCugP1ncdWB?s|3~ zr&%ezIc@!0aUOXdIISq9YtQkSmfq|!fjxz-%rSw}ic;p-QxsE|G<(W5TGH(Cre9p`$RIe39NV@E3;{SA7TP4W}EG8{ky%6R~ZwS`uU36DQtdSn4MG73Y*Wg zq`A@AG|!n;doZ$EbcTKw}*I#P~xBvgu ztCj6gO4>^ONSf!Y?~#tQ^|k&`ypP%3j@g`Mj}@nx%^uIOGCQZF*<|#56t-oH0CYasSX>P}j&MNNU@j1uO%w9c@ zC~F5F%VV}e;4~|1*N<%Kv{}U+STRA_)E*NQWxX38IfeBZ@`%T5rMJ>f@f5bNmUo>; zJN|n(X4y<_rJRq`ic&hT#{{#RI<2r3k2m#wTIQ5Z{d6g5_PB$hlsWcT@hQxDN(W|h zTJd<(**Ru2ffcjODkiXE0(W4K=U6FoOyFmT=M=W$F@Y6tS`^Q*;yK0Rw4xM(;xU`k ztoYjToT8Y(Y4%ttX|o>R_3ql9!sa>d&5F~^RumIB&7PuoQ>WQesO_<0HhZkhrg=_L z%3b2~@uv0^>N2NzN;{rYHZ2|#Sn(Wt%9%RN1kYDysY`F}z-*pl&+HthSuvaUDQWiX zQoN~^&y%g3oIRx-r@2vkOi+|Er+CaZ`#R@2ruHfPnO{MF@plh=d;6&XPP1Zady3*Y zr5&f4?fITv1f_#dnQe9-UvIM=IL!p!bXGB&l|tY&EB?f$5ZGe^D`vB&5ZF@`v-wK2 zVgk=8o>>C3`Ap0E15=yeapm%+;QF0PEA^qQ1c$Po!lAq%xc@vME9;yK*ZFr*9m-1Z zValh>_Tt*Pw=>(@Y})Mklr*2|dc}X(wNu#a@hR9-l;_X+JPAzg>&@rmG<&Q#t+08H z6%*KFHm6zf94mgp+Eacai_>QJ`R4L+{N~r~&u|>iw-?_t_rPn3sjYY)pLR*JrzmFg zK2{3BmzL&6{Tgh~Y&$-m**Q-0rdFKheRe5k^FD>mbNnQ?rw|m6JD6p2nhD&S@6*yj z@tE41S}}n=R-87g%o3DFy-#5)9uruZ-PCi+KK58Kfj70sbDU<6m6B#^D<-hwv|WnX ztQ5A{G!vB5Hk;F|lr($1X;D0-85&MaG@Hi4Bg#~#mdqgFg; z*5fpvw%M$B&a5&^Fq>93Ed<45Hm6zfy*8_Orv3|mm-FI# z_wS$NuRk5{`1HRJJl|siD{k~_Hu^&gF|`%5 z*<-fid45{ypls?n{sV@wa0Tz z?W@-w&nb%cvEn(VcAAyhwAnfCz={cqGTV-+t$bji^I@C1ouarm@8da6v&V{iD{P)Ko8~#Yl-W}-b(vEA*ki?;7R8&Mr(M2kTG)L5oX@$u5?e8~ z*$RQv%x2|FOZzIrn6Vb8QbOWl0LtGu8KWHIos!B5O~fmY7AsG4<@6*|gpJ{0}GKjSBz( literal 0 HcmV?d00001 diff --git a/art/vehicle_unset.dem b/art/vehicle_unset.dem new file mode 100644 index 0000000000000000000000000000000000000000..1c36fb1eab48a09e7fa01d77fd8f67e8d82ef9c5 GIT binary patch literal 14309 zcmd7XL2gq)5QO323y_2$Wy6+hAaSrLH)E3x8%~hJL{DSO2>0iai_SP~B2iS;-#znQ zobc!8x8F~@*WLG*#~b`PRqpry@>IDClv{eNtRnC{W=j z%^pvh5V*&Rd(7sv#N#w83AH^*k3GFRaN1G%w0|lNUyjP*Z~pyy`nL3ToMz?v+xfB| z`E*iKCyMvx9VAN9;~jkFb`m!4&D4qF9#bbCv-S2k%>-7QW~KN0se7y>=i@ZrYd;H4 zvtnwWPp`*pR#vfjQnOhxwLKGQAcy;Hr(hf+}wrD7XO#WqWGj}`Zr z&5CzmPr_!8dy+{LPeR~%dKJ&(9(z2g755|_r&&pQ?6K1OEO?&ee4JLzv%THUeXgp~ zhR11%Qf)NvF}0Om>ZGSS?XiR2v})4lA6t`^ieTn(TJ^htk(Tr%9lynxw7r^zOjaiQ;=;rTVU!-;jjb z9#i`i>~W8kRcW3lVN257(nA#ilJoZ@WP3yha$#(oKcv9a36IgMNJ*H0B5(2aN zOcOTuSn0jJ?(yDC;5479J?=4^)2ukn1XkQ*#dpU&zKQlEO0}Kw87Wb!9gH+974_^> znmwkr$BL<~I4xnTo~(SMrnZvI<4Jpa%x1*|iQ-8U0(-2O!1FlG9xF~u*xZvSCh(JG JPeSlNo;RtQxt{<4 literal 0 HcmV?d00001 diff --git a/code/game/src/debug_replay.c b/code/game/src/debug_replay.c index fac3593..88a7950 100644 --- a/code/game/src/debug_replay.c +++ b/code/game/src/debug_replay.c @@ -9,6 +9,7 @@ typedef enum { // NOTE(zaklaus): Special actions RPKIND_SPAWN_CAR, + RPKIND_PLACE_ICE_RINK, } replay_kind; typedef struct { @@ -146,6 +147,8 @@ void debug_replay_run(void) { camera_set_follow(mime); } +void ActPlaceIceRink(); + void debug_replay_update(void) { if (!is_playing) return; if (playback_time >= zpl_time_rel_ms()) return; @@ -170,6 +173,9 @@ void debug_replay_update(void) { zpl_array_append(temp_actors, e); }break; + case RPKIND_PLACE_ICE_RINK: { + ActPlaceIceRink(); + }break; default: { ZPL_PANIC("unreachable"); }break; diff --git a/code/game/src/debug_ui.c b/code/game/src/debug_ui.c index 2082e75..5f84cca 100644 --- a/code/game/src/debug_ui.c +++ b/code/game/src/debug_ui.c @@ -98,7 +98,7 @@ static debug_item items[] = { .list = { .items = (debug_item[]) { { .kind = DITEM_TEXT, .name = "delta time", .proc = DrawDeltaTime }, - { .kind = DITEM_TEXT, .name = "random literal", .text = "hello", .proc = DrawLiteral }, + { .kind = DITEM_TEXT, .name = "pos", .proc = DrawCameraPos }, { .kind = DITEM_TEXT, .name = "zoom", .proc = DrawZoom }, { .kind = DITEM_SLIDER, .name = "slider", .slider = { .min = 0.0f, .max = 1.0f, .val = 0.5f } }, { .kind = DITEM_END }, @@ -111,6 +111,7 @@ static debug_item items[] = { .list = { .items = (debug_item[]) { { .kind = DITEM_BUTTON, .name = "spawn car", .on_click = ActSpawnCar }, + { .kind = DITEM_BUTTON, .name = "place ice rink", .on_click = ActPlaceIceRink }, { .kind = DITEM_LIST, .name = "demo npcs", diff --git a/code/game/src/debug_ui_actions.c b/code/game/src/debug_ui_actions.c index dd41767..94277c9 100644 --- a/code/game/src/debug_ui_actions.c +++ b/code/game/src/debug_ui_actions.c @@ -1,4 +1,5 @@ #include "debug_ui.h" +#include "world/blocks.h" static inline void ActExitGame(void) { @@ -17,6 +18,23 @@ ActSpawnCar(void) { debug_replay_special_action(RPKIND_SPAWN_CAR); } +static inline void +ActPlaceIceRink(void) { + ecs_entity_t plr = camera_get().ent_id; + uint8_t watr_id = blocks_find(BLOCK_BIOME_DEV, BLOCK_KIND_WATER); + Position const *p = ecs_get(world_ecs(), plr, Position); + float const bs = WORLD_BLOCK_SIZE; + + for (int y = 0; y < 100; y++) { + for (int x = 0; x < 100; x++) { + world_block_lookup l = world_block_from_realpos((p->x - (x*bs)/2.0f), p->y - (y*bs)/2.0f); + world_chunk_replace_block(world_ecs(), l.chunk_id, l.id, watr_id); + } + } + + debug_replay_special_action(RPKIND_PLACE_ICE_RINK); +} + // NOTE(zaklaus): Replay system static inline uint8_t diff --git a/code/game/src/debug_ui_helpers.c b/code/game/src/debug_ui_helpers.c new file mode 100644 index 0000000..5964c6a --- /dev/null +++ b/code/game/src/debug_ui_helpers.c @@ -0,0 +1,2 @@ +#include "world/blocks.h" +#include "world/world.h" diff --git a/code/game/src/debug_ui_widgets.c b/code/game/src/debug_ui_widgets.c index 85c86fd..8c4be0b 100644 --- a/code/game/src/debug_ui_widgets.c +++ b/code/game/src/debug_ui_widgets.c @@ -26,6 +26,13 @@ DrawFormattedText(float xpos, float ypos, char const *text) { //~ NOTE(zaklaus): widgets +static inline debug_draw_result +DrawCameraPos(debug_item *it, float xpos, float ypos) { + (void)it; + camera cam = camera_get(); + return DrawFormattedText(xpos, ypos, TextFormat("%d %d", (int)(cam.x/WORLD_BLOCK_SIZE), (int)(cam.y/WORLD_BLOCK_SIZE))); +} + static inline debug_draw_result DrawUnmeasuredTime(debug_item *it, float xpos, float ypos) { (void)it; diff --git a/code/game/src/world/worldgen/worldgen_test.c b/code/game/src/world/worldgen/worldgen_test.c index d7e8167..85dbf68 100644 --- a/code/game/src/world/worldgen/worldgen_test.c +++ b/code/game/src/world/worldgen/worldgen_test.c @@ -152,6 +152,11 @@ int32_t worldgen_test(world_data *wld) { } #endif + // ice rink +#if 0 + world_fill_rect_anchor(watr_id, 450, 125, 10, 10, 0.0f, 0.0f, NULL); +#endif + // lava #if 1 for (int i=0; icount; i++) { + world_block_lookup lookup = world_block_from_realpos(p[i].x, p[i].y); + float drag = blocks_get_drag(lookup.block_id); double speed = PLR_MOVE_SPEED * (in[i].sprint ? PLR_MOVE_SPEED_MULT : 1.0); if (zpl_abs(v[i].x) < speed && in[i].x) - v[i].x = in[i].x*speed; + v[i].x += in[i].x*speed*drag; if (zpl_abs(v[i].y) < speed && in[i].y) - v[i].y = in[i].y*speed; + v[i].y += in[i].y*speed*drag; } } diff --git a/code/modules/source/system_vehicle.c b/code/modules/source/system_vehicle.c index 32bb610..437a037 100644 --- a/code/modules/source/system_vehicle.c +++ b/code/modules/source/system_vehicle.c @@ -100,8 +100,9 @@ void VehicleHandling(ecs_iter_t *it) { // NOTE(zaklaus): Handle driver input if (j == 0) { Input const* in = ecs_get(it->world, pe, Input); + world_block_lookup lookup = world_block_from_realpos(p[i].x, p[i].y); - car->force += zpl_lerp(0.0f, in->y * VEHICLE_FORCE, VEHICLE_ACCEL); + car->force += zpl_lerp(0.0f, in->y * VEHICLE_FORCE, VEHICLE_ACCEL) * blocks_get_drag(lookup.block_id); car->steer += in->x * -VEHICLE_STEER; car->steer = zpl_clamp(car->steer, -40.0f, 40.0f); } @@ -130,7 +131,7 @@ void ClearVehicle(ecs_iter_t *it) { for (int i = 0; i < it->count; i++) { for (int k = 0; k < 4; k++) { - if (veh[i].seats[k] != 0) { + if (world_entity_valid(veh[i].seats[k])) { ecs_remove(it->world, veh[i].seats[k], IsInVehicle); } }