From 3a8494775099722a2e0d31a0a5965a888cccf69f Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 6 Oct 2025 14:26:00 +0100 Subject: [PATCH] feat: Basic level editing --- assets/barrel.png | Bin 0 -> 590 bytes assets/can.png | Bin 0 -> 168 bytes assets/candle.png | Bin 0 -> 176 bytes assets/clock.png | Bin 0 -> 584 bytes assets/house_int.png | Bin 0 -> 3814 bytes assets/log_pile.png | Bin 0 -> 519 bytes assets/nightstand.png | Bin 0 -> 244 bytes assets/pool_table.png | Bin 0 -> 846 bytes assets/rug0.png | Bin 0 -> 634 bytes assets/rug1.png | Bin 0 -> 1117 bytes assets/saloon_int.png | Bin 0 -> 7229 bytes assets/skull.png | Bin 0 -> 555 bytes assets/table.png | Bin 0 -> 1012 bytes code/first.c | 190 ++++++++++++++++++++++++++++++++++++++--- code/game/core.h | 20 +++++ code/game/impl/world.c | 22 ++++- code/game/map.h | 15 +--- code/game/world.h | 29 +++++-- 18 files changed, 242 insertions(+), 34 deletions(-) create mode 100644 assets/barrel.png create mode 100644 assets/can.png create mode 100644 assets/candle.png create mode 100644 assets/clock.png create mode 100644 assets/house_int.png create mode 100644 assets/log_pile.png create mode 100644 assets/nightstand.png create mode 100644 assets/pool_table.png create mode 100644 assets/rug0.png create mode 100644 assets/rug1.png create mode 100644 assets/saloon_int.png create mode 100644 assets/skull.png create mode 100644 assets/table.png diff --git a/assets/barrel.png b/assets/barrel.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c8fcbb617fc81ac1d4cac3889fc9315e8cd764 GIT binary patch literal 590 zcmV-U0Px%2uVaiR5*=&lTT~gKoG@$a$?v2f)b0RsSTl~xYQJkA<#=8_|$voCHJ24iTV|K zDZLj8!O%;J!So_X2q_pPg+-B#BimWE-5yp_WS4kOv$Ol&%)XhiSh15sp;u#B`_PwG z_PlgBITTt{^8hSVv;-^`OkCbYOC-5f@Ipm6c9}}Kl!7be5{_MFp&~>zzf@%opx1VE zlC>dh#-XAgwo-zA*kT+i8p2L1OE8;{{q?YN!Ka_k0C@NO;!#aD0XFJg-0LB2k;9+N zaO^Sw?_ba2X9WQK$&9H2SN>(A-Uat7RGSalM7_(IHw5nE%=ejMjh}#zn?7I8GaA$)4=D}FI!iJ`@j(NCqwWr$ zhlXUG)gq6h?hfH>{y;Da6kDNU&ju#mT7o?rJUL;iGF>>&ci86#Q)Th?P%#b-C@DGH!c*6`QV|cfZ}=tw(TN|zK$H6CnJye`-{8h#r(4x) zJ9?*NarwKxR>T*Z*93FTsq0&;u5+*L=(fnQRe+0I&2H6P|GLw(YF0YN3HUz(GF$eT cWx)Xd0K#bgfd$Z;JOBUy07*qoM6N<$f?C!LO#lD@ literal 0 HcmV?d00001 diff --git a/assets/can.png b/assets/can.png new file mode 100644 index 0000000000000000000000000000000000000000..b209036eea88ac74a900f8e8b7984bf4d9494490 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJx0U~c5>$3n-jKx9jP7LeL$-D$|l001;LpWx} z_IUFiP!M2EpPhApjcL|0@hJ*CtiHjFGY&8vcV)3P@#ZM5nLjbeD}B*cHx9>dmNoOG z8|D;?S4U*z+^bG}XrX^(UGc(IIj^Ha>qQ;bmWrISWN5QrYEok8_LCuyLurXvdd4!K OZ492SelF{r5}E)elQhc! literal 0 HcmV?d00001 diff --git a/assets/candle.png b/assets/candle.png new file mode 100644 index 0000000000000000000000000000000000000000..9b39fbcf125473f592c8b40442bde60ecbc99844 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJx0U~c5>$3n-jKx9jP7LeL$-D$|vOHZJLpWx} z_ATUXa1dZ&cgkS!Y+`kE&0pCj6qm5R{klklYx02@<{8cm^VPx%0!c(cR5*=|l)Z}EKoo^PX)IS3SO_(NC2BID7f2Jl7(zlIZJHE$05@4Ssa&RV zxvLuzCKZF#$AYa>`v+kmi-G2>y-t`)?J)_bTE*W&ZJNPnuWO`Slc`iBJL# zNz|W}A#JnTa%hVeAk7CzeP_}AWzfrAluAbavxd#C>>cc2CS7LnQ}wgWYT}@worwP*l literal 0 HcmV?d00001 diff --git a/assets/house_int.png b/assets/house_int.png new file mode 100644 index 0000000000000000000000000000000000000000..fde43e2db241522972fa85d76efb2d0ff58e3626 GIT binary patch literal 3814 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 JPDHLkV1gpf@PhyV literal 0 HcmV?d00001 diff --git a/assets/nightstand.png b/assets/nightstand.png new file mode 100644 index 0000000000000000000000000000000000000000..059036120da094b76466dfc45509cb5a2b5733bc GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|)_J-(hFJ6_ zmrQv2_q+pRLSjNf!i33_6udt#PS=;1p|NppV`F0t^OV*~4dVyzZtI7XF!ng}B{-T- z3_0*(t(H%u)sJ6~#Z`YPCLTC@@E8!gg)}*ZbN90*Dk`#>dJ2lTp6H70DV5l;GWFn= z=0?W5(ed;5CRBWR!x|=@XxcElnRj(=^|`o%`3KfM&o_u^I9)a)N^D14`FjZv;IsL6 nrsL|`fCmbvfB)B>)X1=6p2>-2J~qNYmos>}`njxgN@xNAr~F`2 literal 0 HcmV?d00001 diff --git a/assets/pool_table.png b/assets/pool_table.png new file mode 100644 index 0000000000000000000000000000000000000000..3da681b73b90e7c312934c3a4b2dd8ee716ac742 GIT binary patch literal 846 zcmV-U1F`&xP)Px&2uVaiR9J=WnNM#LQ5400Kn>tXJ4tPs2(i^Rrim%l=*p(6CXK6p0@u3LPomqp z?kDKdq#GM{k{U=OF`(269iSxB)+s|mr!MFqQ2xv?Oa~eJ)T#rm#2nhAxqTnYKoCYA9FQBO9zBg{kbRG$}GJ z`7Db%K<7rlOCl{(QL6wo!*db`=n(K)=G;@x$fXs4OU~Pb?#!Zm+po`YnCiP64y#ETw6(j?OdB0_{5SeHu(`3ro0spp&RPAU@nl!A%x%kP?Bfy9 z4?pctH1ow`WHOnqa}-TODO>+5GL2!g;{xi z*YdhZKE>w7j-9P7!`6vfK_s8Tb8Cw8Uq#}jJnBp?GhcanVOSIGl;SQN0+2ym zDS${WlSPs%mP8mmoov29^!$v)M{`Z%iO*@4JvZxfthQ8S$;*kNkt?-N59{^l>XcCL z_-z+emr;*4hOPlg?!UkD@cs?x@lBVyLTAQ%h#4TISP-z+Sw@oh*^)n%2xc?HB|Meldv4R z9>4u|r<3TU*-~5@VK7KxgGQ$VG99|3V3NxZO6{V~l+jT!X`r3ip0}>C&|z(kpz*Wk YZ}%K%m#ka|$p8QV07*qoM6N<$g1XX`1poj5 literal 0 HcmV?d00001 diff --git a/assets/rug0.png b/assets/rug0.png new file mode 100644 index 0000000000000000000000000000000000000000..eac73024b2fe88392f6e1aa4a0cdc27951f80536 GIT binary patch literal 634 zcmV-=0)_pFP)Px%G)Y83RA_Us^4^VaPnl3eZ{jePyVz-Ka3*b1P^LU^C#0e0YVw#u5G%sVfo5gBKiR<^e0D$#o z3ji2TW>KyoN+ZQIFZ;bNTAen&K0X29@O{16MiF}vx&am`X?5D@_qvFY%EA6gPE~eN z!p1WJ@(t{cML+5)+_Xd;HYwFD`q zc{vyjkNRPiKnV-RkLcBWQH$8K0;p6SjD~=ti%Lw@age*K`2sjIl}|oVH#fpj0OKn7 z+*I~H$u@0NUG#3b$Nj_I(RW|5IKf@7%F0EELBn*hIv01#Jpdd;GPW49Jzsa7E2;qp zo_!JIp3YG&bB)J+*Hvs~CErvv^+hSjROTAnHxI1qXIc?s83%P87WZWBG}fxyjGpNzkc}4jk;Bg?hd6&q(UcF z7t^Qjve*okRP`AF`5(23e0hBX0Nh+(S;ewT@EGY$shs%?I4&-#GMh++Nvtg{Q`L8Q zpbEaj@LxzLb-7~W2O}nl=|z#mf`MuL5|Bw^QO`8~HjPQ*##@oZRtnSj%`qm4?M|lg z8`w+|k0caHJY-@T|Jaa8;z2NDayN#HOz<6s@nn{*H(RZvF<;h5=JlKC{M8Fp--e$l U*)3%F?EnA(07*qoM6N<$f-lh?Px(7fD1xR9J=GS8d$I{I@jb;ze`9V5~NY=F^x2P63lZaVp9tin56?7^^-Kz}sob#VZWPNxo5N8}S^{fJw;nswKK3_i;|Wv{az@ z8gfP6*Y-!q%T_HvPLeLW^+|8oVVO!=2%{}oczEnZGr+bNOg0g z`WpQH;uf==Gt-soKv5q7oA-Wc{Wg!7M3xym2;4i-;s9AT z(&mst=3E;u36QCmi9rG5sSR08^6%$TmW>caOZf5g8UPSQOUSYz+WxayS&sqNnZPx8 zCQnJ~Ymo0h++)?;tH~&;KfpuA|9VLNF=?(?-Pv<5OzDbva6fXz&!6UzWy7iX*v{Nz zRq^PGTJYd06@)`t7dRxk4<17R_fav+hKQo2+VEb-lj|kjW6BlHI*B5e6hP>ci2A9O z08pPfSK=kfBE8H@onz3FV7kk`eo3qmaT2S!E@-;P>h3U!rzAg#1AP15)9$dngQG@m zN(D zN(m`LuSb$G#wUAxB!xpXikK~iO%!~rg^PL+aEEyc$!uTC{tCf~ZEwwIRLs)S1jrO%z5`C; zMmBQs;%_XRct&qNb!)CDfg=Hz#Vm@lsm6GSqX literal 0 HcmV?d00001 diff --git a/assets/saloon_int.png b/assets/saloon_int.png new file mode 100644 index 0000000000000000000000000000000000000000..70891a66880b81d628d8264865e816093b046c17 GIT binary patch literal 7229 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 literal 0 HcmV?d00001 diff --git a/assets/skull.png b/assets/skull.png new file mode 100644 index 0000000000000000000000000000000000000000..329c693bcc8179eba22ecde3912a8978392c943e GIT binary patch literal 555 zcmV+`0@VG9P)Px$bkugXcVHC%ISJE3|hae=AgPR8;ri6SBlG)^zNJ1y4Ope~>WI(rW z2HGK$PzV%?#Vm=LIw|DzsG$TdTRH_4ibK7@dNhL!~xA&fZ*}R;}kDVT^p>Eo? z-Ss^aLX-e@Rv$a+%xPdImGt8@5TG^GO#s`ry8ttPJUC?UOf-zZ;L89!0Ck*y)8XcsBgby`VMJP3Qa*t)XrP tFL*XQION48geWy?Ss9EkJ|GyMqCc#q?haje7V-c9002ovPDHLkV1mq)1YH0C literal 0 HcmV?d00001 diff --git a/assets/table.png b/assets/table.png new file mode 100644 index 0000000000000000000000000000000000000000..466464c52563f7ada08b6f0c2a8a5850bc75e320 GIT binary patch literal 1012 zcmV00001b5ch_0Itp) z=>Px&u1Q2eR9Js_zSlTgTdcRX)r-t5>J;RBGYqBq~Q*SEXTu-+Wd%czOax6e^$TQBKr z{lCoeqw9S)pz~r*PRyo_YxD5LxNZ^(h@h;$%Q64}6sg1{6ev=^}{%Pkl-$<0Ft?HoqeW@AKfk&fArLjueGKTEDq^}UO zDVA}J$L+SYfEkH$Cx+6euN_sB&}{HBjv?JHP5c_z?iJyze_8VV>8f0n87NP(q`(xFwOFr1a@C+UqlDuNOV z5xzUrvFhry4@KwXA8m-2Mxh~TY7BH^Lmek=_af4iDc(e1(pStCqeDZr+ofRf9@&`Y z6|5SSS>Dhmm>zYoHTJso4ZDiNZATD4!);pC5xs!Y-%dH7Q+!z*oKw=f z%Yy(avXpVGdAO*CHheB8dI1Hrn?%s}92`=wCJAX$w?TNM4Aw|i(c1L*MG+c;fbJQU zz&F^Y#j4M}G~8x0(vc)2t7xqor#A?$2REhUjncWO+9%RC|C*gLWma2X+d>kkB5EW` z;Dq`4szcZGcCF^7S1mSz1Sg^#oV4xT(2%5gG+oJYbSBDSN^JnR`t=h4u+KBAo$+)A z0Qmjquko1hA;-~+C_yb;uKlMDs-3fF^q-Fz{d*7xY+C;CJ*Sw-s~ z-@ifxW#dUh7X@-u7j@lSUhozoge(Kx+&%P)u2)2pRkS`oJB0{J$TB!|D3(VswOX6r zEE1^ul4Sr9lsG>-ZLJA51Zu0~3RwpA0YBashcSz$h-BNQT;J|4DcZGNb}vtCXmw|@ z<9$*8Wx2ih5V?g2oiYFbvOI6x#}gYUy)KcpYPO2nQ5xAaM0yiJ2^k8&(CJ*??k*D# z`wEOry*i{IQFyf3>H1^MAZM*QHq;sEBE3F8#q}od39sV$ i5kI;PwEx literal 0 HcmV?d00001 diff --git a/code/first.c b/code/first.c index d9fc917..2c67567 100644 --- a/code/first.c +++ b/code/first.c @@ -95,9 +95,10 @@ int main(int argc, char **argv) camera->farp = 1000.0f; game->draw.camera = camera; - World *world = LoadWorld(arena); + World *world = M_ArenaPush(arena, World);//LoadWorld(arena); game->world = world; world->arena = arena; + world->navMesh = &TestNavMesh; world->random = Random_Seed(29237489723847); world->npcCount = 2; for(U32 i = 0; i < world->npcCount; i++) { @@ -134,7 +135,85 @@ int main(int argc, char **argv) world->player.bulletsLoaded = PLAYER_BULLET_COUNT; world->player.reloadTimer = 0; world->player.currentArea = 0; + for(int i =0; i< 4200; i++) { + world->map[i] = map[i]; + } + + world->tileTypes[0].rotation=0; + world->tileTypes[0].collision=false; + world->tileTypes[0].tile=D_ImageHandle(&game->draw, S("tile_dirt_0")); + world->tileTypes[1].rotation=0, + world->tileTypes[1].collision=false, + world->tileTypes[1].tile=D_ImageHandle(&game->draw, S("path_middle")); + world->tileTypes[2].rotation=0; + world->tileTypes[2].collision=false; + world->tileTypes[2].tile=D_ImageHandle(&game->draw, S("path_middle_edge")); + world->tileTypes[3].rotation=PI_F32/2; + world->tileTypes[3].collision=false; + world->tileTypes[3].tile=D_ImageHandle(&game->draw, S("path_middle_edge")); + world->tileTypes[4].rotation=PI_F32; + world->tileTypes[4].collision=false; + world->tileTypes[4].tile=D_ImageHandle(&game->draw, S("path_middle_edge")); + world->tileTypes[5].rotation=-PI_F32/2; + world->tileTypes[5].collision=false; + world->tileTypes[5].tile=D_ImageHandle(&game->draw, S("path_middle_edge")); + world->tileTypes[6].rotation=0; + world->tileTypes[6].collision=false; + world->tileTypes[6].tile=D_ImageHandle(&game->draw, S("path_middle")); + world->tileTypes[7].rotation=PI_F32/2; + world->tileTypes[7].collision=false; + world->tileTypes[7].tile=D_ImageHandle(&game->draw, S("path_middle")); + world->tileTypes[8].rotation=-PI_F32; + world->tileTypes[8].collision=false; + world->tileTypes[8].tile=D_ImageHandle(&game->draw, S("path_middle")); + world->tileTypes[9].rotation=-PI_F32/2; + world->tileTypes[9].collision=false; + world->tileTypes[9].tile=D_ImageHandle(&game->draw, S("path_middle")); + world->tileTypes[10].rotation=0; + world->tileTypes[10].collision=false; + world->tileTypes[10].tile=D_ImageHandle(&game->draw, S("path_corner")); + world->tileTypes[11].rotation=PI_F32/2; + world->tileTypes[11].collision=false; + world->tileTypes[11].tile=D_ImageHandle(&game->draw, S("path_corner")); + world->tileTypes[12].rotation=-PI_F32/2; + world->tileTypes[12].collision=false; + world->tileTypes[12].tile=D_ImageHandle(&game->draw, S("path_corner")); + world->tileTypes[13].rotation=PI_F32; + world->tileTypes[13].collision=false; + world->tileTypes[13].tile=D_ImageHandle(&game->draw, S("path_corner")); + world->tileTypes[14].rotation=0; + world->tileTypes[14].collision=false; + world->tileTypes[14].tile=D_ImageHandle(&game->draw, S("tile_dirt_1")); + + world->propTypes[0].assetHandle=D_ImageHandle(&game->draw, S("rug0")); + world->propTypes[0].scale=1; + world->propTypes[1].assetHandle=D_ImageHandle(&game->draw, S("rug1")); + world->propTypes[1].scale=1; + world->propTypes[2].assetHandle=D_ImageHandle(&game->draw, S("skull")); + world->propTypes[2].scale=1; + world->propTypes[3].assetHandle=D_ImageHandle(&game->draw, S("table")); + world->propTypes[3].scale=1; + world->propTypes[4].assetHandle=D_ImageHandle(&game->draw, S("barrel")); + world->propTypes[4].scale=1; + world->propTypes[5].assetHandle=D_ImageHandle(&game->draw, S("can")); + world->propTypes[5].scale=1; + world->propTypes[6].assetHandle=D_ImageHandle(&game->draw, S("candle")); + world->propTypes[6].scale=1; + world->propTypes[7].assetHandle=D_ImageHandle(&game->draw, S("clock")); + world->propTypes[7].scale=1; + world->propTypes[8].assetHandle=D_ImageHandle(&game->draw, S("log_pile")); + world->propTypes[8].scale=1; + world->propTypes[9].assetHandle=D_ImageHandle(&game->draw, S("nightstand")); + world->propTypes[9].scale=1; + world->propTypes[10].assetHandle=D_ImageHandle(&game->draw, S("pool_table")); + world->propTypes[10].scale=1; + world->propTypes[11].assetHandle=D_ImageHandle(&game->draw, S("saloon_ext")); + world->propTypes[11].scale=6.875f; + world->propTypes[12].assetHandle=D_ImageHandle(&game->draw, S("saloon_int")); + world->propTypes[12].scale=6.875f; } + game->editor.enabled = true; + game->editor.mode = G_EDITOR_MODE_TILE; D_Animation animation; @@ -164,13 +243,84 @@ int main(int argc, char **argv) V2F((F32) width, (F32) height) )); game->world->mouseProjected = V2F(projection.x, projection.y); - ProcessEvents(&e, game->world); + if(e.type==SDL_EVENT_MOUSE_MOTION) { + game->editor.cursor = V2F(projection.x, projection.y); + } + if (!game->editor.enabled) { + ProcessEvents(&e, game->world); + } else { + if(e.type==SDL_EVENT_MOUSE_BUTTON_DOWN && e.button.button == SDL_BUTTON_LEFT) { + switch(game->editor.mode){ + case G_EDITOR_MODE_TILE: { + F32 tilex = (S32)(game->editor.cursor.x+TILE_SIZE/2); + F32 tiley = (S32)(game->editor.cursor.y+TILE_SIZE/2); + game->world->map[(S32)tilex + (S32)tiley * 96] = game->editor.currentAsset; + break; + } + case G_EDITOR_MODE_PROP: { + game->world->props[game->world->propCount].propType = game->editor.currentAsset; + game->world->props[game->world->propCount].area = game->editor.currentLevel; + game->world->props[game->world->propCount].pos = game->editor.cursor; + game->world->propCount++; + break; + } + } + } + } + if (e.type == SDL_EVENT_KEY_DOWN) { + switch(e.key.key) { + case SDLK_F10: { + game->editor.enabled = !game->editor.enabled; + break; + } + case SDLK_RIGHT: { + game->editor.currentAsset = Min(game->editor.currentAsset+1, 64); + break; + } + case SDLK_LEFT: { + game->editor.currentAsset = Max(game->editor.currentAsset-1, 0); + break; + } + case SDLK_A: { + game->camera.p.x -= 5; + break; + } + case SDLK_D: { + game->camera.p.x += 5; + break; + } + case SDLK_W: { + game->camera.p.y -= 5; + break; + } + case SDLK_S: { + game->camera.p.y += 5; + break; + } + case SDLK_UP: { + game->editor.currentLevel++; + game->world->player.currentArea++; + break; + } + case SDLK_DOWN: { + game->editor.currentLevel--; + game->world->player.currentArea--; + break; + } + case SDLK_SPACE: { + game->editor.mode = (game->editor.mode + 1) % 4; + break; + } + } + } } - UpdateWorld(1.0f / 60.0f, game->world); - D_AnimationUpdate(&animation, 1.0f / 250.0f); - game->camera.p.x = game->world->player.pos.x; - game->camera.p.y = game->world->player.pos.y; + if(!game->editor.enabled) { + UpdateWorld(1.0f / 60.0f, game->world); + game->camera.p.x = game->world->player.pos.x; + game->camera.p.y = game->world->player.pos.y; + } + D_AnimationUpdate(&animation, 1.0f / 250.0f); int w, h; SDL_GetWindowSizeInPixels(window, &w, &h); @@ -208,14 +358,34 @@ int main(int argc, char **argv) D_Begin(&game->draw, frame, D_MAX_RECTS); - //RenderWorld(game->world, &game->draw); -// D_Rect(&game->draw, 0.0f, 0.0f, .texture = D_ImageHandle(&game->draw, S("saloon_ext")), .scale = 4.0f); -// D_Rect(&game->draw, -8.0f, 0.0f, .texture = 2, .scale = 2.0f); -// D_Rect(&game->draw, 6.0f, 0.0f, .texture = 3); + RenderWorld(game->world, &game->draw); R2f aframe = D_AnimationFrame(&animation); D_Rect(&game->draw, 0, 0, .texture = animation.id, .uv = aframe, .flags = D_RECT_UV_ASPECT); + if(game->editor.enabled) { + G_Editor editor = game->editor; + F32 tilex = floor(editor.cursor.x+TILE_SIZE/2); + F32 tiley = floor(editor.cursor.y+TILE_SIZE/2); + switch(game->editor.mode) { + case G_EDITOR_MODE_TILE: { + World_Tile asset = game->world->tileTypes[editor.currentAsset]; + D_Rect(&game->draw, tilex, tiley, .texture=asset.tile, .angle=asset.rotation); + break; + } + case G_EDITOR_MODE_PROP: { + World_PropType prop = game->world->propTypes[editor.currentAsset]; + D_Rect(&game->draw, editor.cursor.x, editor.cursor.y, .texture=prop.assetHandle, .scale=prop.scale); + break; + } + case G_EDITOR_MODE_HITBOX: { + break; + } + case G_EDITOR_MODE_POI: { + break; + } + } + } D_End(&game->draw, frame); vk.CmdEndRendering(cmd); diff --git a/code/game/core.h b/code/game/core.h index 163c71a..a589c54 100644 --- a/code/game/core.h +++ b/code/game/core.h @@ -13,6 +13,25 @@ struct G_Camera { Mat4x4FInv proj; }; +#define TILE_SIZE 1.0 + +typedef enum G_EDITOR_MODE G_EDITOR_MODE; +enum G_EDITOR_MODE { + G_EDITOR_MODE_TILE, + G_EDITOR_MODE_PROP, + G_EDITOR_MODE_HITBOX, + G_EDITOR_MODE_POI, +}; + +typedef struct G_Editor G_Editor; +struct G_Editor { + bool enabled; + U32 currentLevel; + S32 currentAsset; + G_EDITOR_MODE mode; + V2f cursor; +}; + typedef struct G_State G_State; struct G_State { M_Arena *arena; @@ -20,6 +39,7 @@ struct G_State { D_Context draw; G_Camera camera; + G_Editor editor; World *world; }; diff --git a/code/game/impl/world.c b/code/game/impl/world.c index f47525a..0385f92 100644 --- a/code/game/impl/world.c +++ b/code/game/impl/world.c @@ -37,10 +37,24 @@ void ProcessEvents(SDL_Event *event, World *world) } void RenderWorld(World *world, D_Context *draw) { - World_Tile tileTypes[] = {dirt, middlePath, middlePathEdgeTop, middlePathEdgeRight, middlePathEdgeBottom, middlePathEdgeLeft, middlePathCornerTopLeft, middlePathCornerTopRight, middlePathCornerBottomRight, middlePathCornerTurnBottomLeft}; - for (int i = 0; i < 4800; i++) - { - D_Rect(draw, (F32) (i % 96), (F32) (i / 96), .texture = tileTypes[map[i]].tile, .angle = (F32) tileTypes[map[i]].rotation); + for (int i = 0; i < 4800; i++) { + D_Rect( + draw, + (F32) (i % 96), (F32) (i / 96), + .texture = world->tileTypes[world->map[i]].tile, + .angle = (F32) world->tileTypes[world->map[i]].rotation, + ); + } + for (int i = 0; i < world->propCount; i++) { + if(world->props[i].area == world->player.currentArea) { + D_Rect( + draw, + world->props[i].pos.x, + world->props[i].pos.y, + .texture = world->propTypes[world->props[i].propType].assetHandle, + .scale = world->propTypes[world->props[i].propType].scale, + ); + } } for(U32 i = 0; i < world->npcCount; i++) { NPC npc = world->npcs[i]; diff --git a/code/game/map.h b/code/game/map.h index 56efae5..84bd2ee 100644 --- a/code/game/map.h +++ b/code/game/map.h @@ -1,17 +1,6 @@ #include "world.h" - -World_Tile dirt = {.rotation=0,.collision=false,.tile=16};//0 -World_Tile middlePath = {.rotation=0,.collision=false,.tile=6};//1 -World_Tile middlePathEdgeTop = {.rotation=0,.collision=false,.tile=7};//2 -World_Tile middlePathEdgeRight = {.rotation=PI_F32/2,.collision=false,.tile=7};//3 -World_Tile middlePathEdgeBottom = {.rotation=PI_F32,.collision=false,.tile=7};//4 -World_Tile middlePathEdgeLeft = {.rotation=-PI_F32/2,.collision=false,.tile=7};//5 -World_Tile middlePathCornerTopLeft = {.rotation=0,.collision=false,.tile=5};//6 -World_Tile middlePathCornerTopRight = {.rotation=PI_F32/2,.collision=false,.tile=5};//7 -World_Tile middlePathCornerBottomRight = {.rotation=-PI_F32,.collision=false,.tile=5};//8 -World_Tile middlePathCornerTurnBottomLeft = {.rotation=-PI_F32/2,.collision=false,.tile=5};//9 -int map[] = { +U32 map[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -62,4 +51,4 @@ int map[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; \ No newline at end of file +}; diff --git a/code/game/world.h b/code/game/world.h index 7720a01..9877bd5 100644 --- a/code/game/world.h +++ b/code/game/world.h @@ -9,20 +9,29 @@ enum World_Area { WORLD_AREA_OUTSIDE = (1 << 0), WORLD_AREA_SALOON = (1 << 1), - WORLD_PATH_MIDDLE_EDGE = (1 << 2), - WORLD_PATH_MIDDLE = (1 << 3), - WORLD_PATH_CORNER = (1 << 4), - WORLD_PATH_CORNER_EDGE = (1 << 5), }; typedef struct World_Tile World_Tile; -struct World_Tile -{ - World_Area tile; +struct World_Tile { + U32 tile; double rotation; bool collision; }; +typedef struct World_PropType World_PropType; +struct World_PropType { + U32 assetHandle; + F32 scale; +}; + +typedef struct World_Prop World_Prop; +struct World_Prop +{ + U32 propType; + World_Area area; + V2f pos; +}; + typedef struct World World; #include "player.h" #include "npc.h" @@ -35,6 +44,12 @@ struct World { NavMesh *navMesh; Random random; V2f mouseProjected; + World_Tile tileTypes[64]; + U32 map[4800]; + + World_PropType propTypes[64]; + U32 propCount; + World_Prop props[256]; //// Player Player player;