From 01e1349ea1bdb3f47872d0126fa53a1d123270fa Mon Sep 17 00:00:00 2001 From: StephenAdamson Date: Fri, 13 Dec 2024 00:19:21 +0000 Subject: [PATCH] initial z axis tiles pass --- assets/dirt.png | Bin 0 -> 4671 bytes assets/sky.png | Bin 0 -> 4355 bytes src/camera.rs | 1 + src/game.rs | 144 ++++++++++++++++++++++++++---------------------- src/main.rs | 2 +- src/tile.rs | 31 +---------- src/tiles.rs | 9 +++ 7 files changed, 91 insertions(+), 96 deletions(-) create mode 100644 assets/dirt.png create mode 100644 assets/sky.png create mode 100644 src/tiles.rs diff --git a/assets/dirt.png b/assets/dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..76760e930e2139ed04457c40cfdfbe1899b49c73 GIT binary patch literal 4671 zcmeHKdsGuw8cz@qI4GciN_~u>qApA_lT1i55|JiIsD`GPRV;0HCo==gN**Qy39MD* zA)>8SP}ypwTD6K>5#KCSiy*>oEh=4iRYXK7h>mCL+RQ%HWIEnSag{}U?&khx#qK?4)*Yz!i#hjw@#zbZ?%TEo zeaQyAXIoZzv&iSie=8d%XdY~39{DU=UoL4XIoCKN5k9^LmbC2uFlM(UP7#>5=&Sfc zQ_JSRxBd2^u`Nl*NZq~clIn(-(44Uc#^ha(K5}^D^S#*hs~^oF{Z)k)ng1={lFra5 z{@L%xN%6X#zyH*9C;$25uRGlXyVCbt&;F3X8Yx;L-PWbhW$1yJFjVB%EePZHbtg1t>0B4_bPK6xgzk-qlJx?c!gK? zb)VITbBexPyYcA<@hN^cC)F#z={g~@xANbrYSh~x{@yJ#wIKGO?)`wA10EN=gV$x9 zp0C`Nc(&HItfjWTt7`nYpUa-vyhEoI@n>(4pJHnT*PxP?BW&Zd(|!v#`QNbJn3*Hg z^faVhz9nl6$agE5fc|_r2PwH}U;Tca`U2V&ADd3xe*I`|kW8xK6#fv1sxOwEl~!#q-O8#w!BPXLADB`e~|AG+P;a@Ua1jVIb4 zwV!%%@_FJ94_kc>wOgx`SL||t`b=j)9VTe!4`c?ojlv1!rsztOG6`jIpGOhH2%s4%nxr9_ug2>rk5e^&>7-^P(9L7|W z4RX z%}UbI>9mOr9!x=z1OApYYpOFHiWJeQv=KmUpjUKAmoc$g-GB!tK{8{sIK6<_Ly#t>rqz;aXqoM$nf+plLL@tGsFpP#ViXdQx*g(LDfuzI+ zOo5;Zxs!?_@wsNJkpRQV7>Q(BWHBW>8#ux7C|#^lAQtxa>a^%m2{s8hfH}aJD6`%6 z3an?0^a7UP^h9M643S7s1d|{LCPrU@7SdK5s6~zyMT8Q}*}@GB4$=YA5?rMM0;e5h zgR87G!J4glvpH2M;6i{n&w*wwm{1hK5^92_0VyKJa8wK~J*vQ^D2_=&5d=pD;ms72 zl<~jN-1LDWdIw#@*g*doPE+rkT0k%D{p$TpWt@`M%u{zz)a`j!K?kV<&=Rmb+nIjM{nN;&rR4R)9B8i)OKn#}fu~H{Y>4G94I4 zva#Cek$1ek$4bJ8@HB5=n!rXUuqv~W+mrL08%3Ie>L|VZ zJ7rOnH4*hzO@X?n7ll5FIPr2{(WMt}R&EbTeA_k3_k3$)=p>!`=+l$6w*w}-OQdh? z(#hEC-K)-x5oMt||Hkuf8+eZo)*7nErsTnw z@SI}8lb5|({j%L>UX9=1dNy2-E3cuET#q2fwYFBt;pQOYaxW|HGgB}_?NSy99jj}a zIhkKXjH4T^*Z56>@y$`I*z&gfJ04|O^-cgDTFAI?YviTbVPC8 Zia#FrMyoYp72Np8M#rhk-uiv^e*pE6$*}+c literal 0 HcmV?d00001 diff --git a/assets/sky.png b/assets/sky.png new file mode 100644 index 0000000000000000000000000000000000000000..84f5256643cfd4fedbe1635af5e0682bfbdca66a GIT binary patch literal 4355 zcmeHKYj6|S6_&x+VB;4yFV}=c4lgGw?P^!At%WNj8Ov10FKj0`gw^g{d5fi$rIoaX z29rQSsbj!-4jGcRsZB9W2$OLbf)lU}E7TXF7B z+fJ0^WxoDm=9}WY_AB3tR~HMX20NM`+10)H!sR?Eo33oJ{N{<0Ly!9^*KkMHd|2J; zFEY=Xl2f+yuc?)b(C(}6CVs&k`hCguM9cQ(ou$t$TDveI#?k)Am%dn?DfQ1ed?88G zDZX?$M=C7X9Jpm|Itw=SU+MXC%73mt{#DWpcerJ8V;fMZVxHw~wqmEvHsUq(bL)WhlSqX%>1 z)~2=0{U}R4gBUCiNj{k+VPlo8_0lv$tk> z-urCb>l^<)JFc;(@RfhI=Qp32QCeWz`h48}eO=3+4>x6`&!tvLce8ioxiq`0S7U)k zf15n>g}=q$-_rM?er4Hto%wKbe!-J*CHW@w;V*Zrq;sWkcM7_5;T*P2%#L zLioLFY1juz)zuMweahk9nEW@y)4Q@xuUfg}<;{19dwVCP9+?vNdGFEC*}8kGzwfI& zW9;l&fUVv8uh7m&%GbAV^u1Pef0OF&zCiCLYkwk4&oB?uu*&swiV?gTnibqYBYFKW zKUJ#SJjqWp>w$>4frs~5)B_#I)CkX7)RlS{=JMM>4PUS!0LnHLl`|XGGiFwuw=5x7 zq9A}5h%_R3YkfgVvZxhY3by58tr}58#Pt?+m8%%B2?2nR8d8Iy4v7!z)XNf(+yKi_ zrS|+`2-vfzYedmcX|<6^L=z!2LcpWN&1SO}(`j`&6iT4MdY?#3s4ti;LkwZqL68aX zevub^h>S_Qg^*}btKmE{VxQOVa*e|Kg2OC8KC}|;*WwyX>-B1*HG-le3_*qs`az9g zIo!?KQVn&T;$xOv;dB*`YRD9Lc&}g4 zf@F`86nX9eSz~OIXB2m$4T0*TxMQS8d{=~_l*>ig1tuh$=d@eY^7<4jFg!~sO^haR zj3mvdiN=j6Y2XZ~38Pum$hqA>N9%P)l8J(H`hp_uV}J|=!8JU@G3jtOVdfZ=(cv^o z>PdjoX3T(M1mUI)X1!UD8KNLo1$da1bZxX%G87A;Sej%A(r84@dIDNw0yJs{j2<=U z^k&>-1{_Hc3KYvw`9i=;!*KFm+5@zHpGTRH38$>ZPK#Qn!5)kh*U};f72qD=eXI}( zKA0-!y`W5_Wj=8uK|-rd1ZmRgjru743J?gwT$E99Ohb^0x*Qk^x&x`D)=za!zhfP^yDKLY(&WmEYH>d zFKK!EAh|<9FW`f4{d#3+Xit@ax}n}sx0Y8n6M`t)f})ur7lL#cu!@}!YiNq8p?w|z z>&I}yj*Rm^kPLb~$FjfxP$Nd*C`rRGni%Wh3^U+3?H-FB6gV+L2Y}TBd4ycS z1XZ{~mJEk#=~($l4UppiDMN7`d`2l#YlofH$`xb8+g$DU_{dcRqDl7exEL6h@I-d~-{?wsaG3%= zcmj&RtJ2#|{l9?MtT^||6?WyqrTWI!(EwZ1`~{B%RVq!k{KiPFd0{vhFFIY0_-oUr zXG}KaKk=5VFjsU`i8jG2pUG9qK@qS>gcoZN`Jh<&bn) { fn setup_tilemap(commands: &mut Commands, asset_server: &Res) { for x in 0..25 { for y in 0..25 { - let position = Vec3::new( - x as f32 * 16. * PIXEL_RATIO, - y as f32 * 16. * PIXEL_RATIO, - -0.5, - ); + for z in 0..4 { + let position = Vec3::new( + x as f32 * 16. * PIXEL_RATIO, + y as f32 * 16. * PIXEL_RATIO, + -z as f32, + ); + let mut noitem: bool = false; - let texture = if random::() < 0.5 { - asset_server.load("grass.png") - } else { - asset_server.load("rock.png") - }; + let texture: Handle; + if random::() < 0.4 { + texture = asset_server.load("grass.png"); + } else if random::() < 0.2 { + texture = asset_server.load("dirt.png"); + } else if random::() < 0.1 { + texture = asset_server.load("rock.png"); + } else { + texture = asset_server.load("sky.png"); + noitem = true; + }; - let mut items: Vec = vec![]; + let mut items: Vec = vec![]; - if random::() < 0.1 { - items.push(ItemBundle { - transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), - sprite: Sprite { - image: asset_server.load("beer.png"), - ..Default::default() - }, - item: Item::new(), - visibility: Visibility::Visible, - }); + if !noitem { + if random::() < 0.1 { + items.push(ItemBundle { + transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), + sprite: Sprite { + image: asset_server.load("beer.png"), + ..Default::default() + }, + item: Item::new(), + visibility: Visibility::Visible, + }); + } + if random::() < 0.1 { + items.push(ItemBundle { + transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), + sprite: Sprite { + image: asset_server.load("chalice.png"), + ..Default::default() + }, + item: Item::new(), + visibility: Visibility::Visible, + }); + } + if random::() < 0.1 { + items.push(ItemBundle { + transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), + sprite: Sprite { + image: asset_server.load("fish.png"), + ..Default::default() + }, + item: Item::new(), + visibility: Visibility::Visible, + }); + } + } + + let tile_entity = commands + .spawn(( + Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)), + Sprite { + image: texture, + ..Default::default() + }, + FloorTile { + walkable: random::() < 0.7, + astar_weight: random::() % 10 + 1, + }, + Tile { position: position }, + TileState { + timer: Timer::from_seconds(1., TimerMode::Repeating), + }, + )) + .id(); + + let mut child_entities = Vec::new(); + for item in items { + child_entities.push(commands.spawn(item).id()); + } + commands.entity(tile_entity).add_children(&child_entities); } - if random::() < 0.1 { - items.push(ItemBundle { - transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), - sprite: Sprite { - image: asset_server.load("chalice.png"), - ..Default::default() - }, - item: Item::new(), - visibility: Visibility::Visible, - }); - } - if random::() < 0.1 { - items.push(ItemBundle { - transform: Transform::from_translation(Vec3::new(0., 0., 0.1)), - sprite: Sprite { - image: asset_server.load("fish.png"), - ..Default::default() - }, - item: Item::new(), - visibility: Visibility::Visible, - }); - } - - - let tile_entity = commands - .spawn(( - Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)), - Sprite { - image: texture, - ..Default::default() - }, - FloorTile { - walkable: random::() < 0.7, - astar_weight: random::() % 10 + 1, - }, - Tile { position: position }, - TileState { timer: Timer::from_seconds(0.5, TimerMode::Repeating) } - )) - .id(); - - let mut child_entities = Vec::new(); - for item in items { - child_entities.push(commands.spawn(item).id()); - } - commands.entity(tile_entity).add_children(&child_entities); } } } diff --git a/src/main.rs b/src/main.rs index 9a5f113..63e28ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,7 @@ fn main() { .add_systems(FixedUpdate, ( camera::camera_movement, citizen::citizen_movement, - tile::tile_update, + tile::tile_sprite_update, )) .run(); } \ No newline at end of file diff --git a/src/tile.rs b/src/tile.rs index 1fd0e99..d510f52 100644 --- a/src/tile.rs +++ b/src/tile.rs @@ -60,49 +60,23 @@ pub struct DoorTile { pub locked: bool, } -pub fn spawn_tile( - commands: &mut Commands, - position: Vec3, - floor_tile: FloorTile, - // fixture: Option, - items: Vec, -) { - let tile_entity = commands.spawn((Tile { position }, floor_tile)).id(); - - // if let Some(fixture) = fixture { - // commands.entity(tile_entity).add_children(&[ - // commands - // .spawn((fixture,)) - // .id(), - // ]); - // } - - let mut child_entities = Vec::new(); - for item in items { - child_entities.push(commands.spawn(item).id()); - } - commands.entity(tile_entity).add_children(&child_entities); -} - -pub fn tile_update( +pub fn tile_sprite_update( time: Res