From a4342c9aa087b5b8d99f2801b8de9bd0b2af2479 Mon Sep 17 00:00:00 2001 From: popertots Date: Sun, 29 Dec 2024 19:03:26 +0000 Subject: [PATCH] start con_text --- assets/natural walls/rock/example.png | Bin 0 -> 1680 bytes assets/natural walls/rock/template.png | Bin 0 -> 1231 bytes assets/natural walls/rock/tube.png | Bin 0 -> 720 bytes src/game.rs | 6 +-- src/tile.rs | 65 +++++++++++++++++++++++-- src/tiles.rs | 10 ++-- 6 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 assets/natural walls/rock/example.png create mode 100644 assets/natural walls/rock/template.png create mode 100644 assets/natural walls/rock/tube.png diff --git a/assets/natural walls/rock/example.png b/assets/natural walls/rock/example.png new file mode 100644 index 0000000000000000000000000000000000000000..33c80b03838688eee48ddb205130f7c49485fe7f GIT binary patch literal 1680 zcmV;B250004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ>7vmK|6?8$WWc^qEZ}d6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfc5qU3krMxx6k5c3aNLh~_a1le0HIM~n$;5rG~G7S z$%L5At%`wH1QEs%VhGF3GUg;Hg|6f49zMR_MR`{DbAOHjHE%J%Clbe*VcNtS#Ia4= z;Ji;9VkKE6J|~_u>4LKlt6PRhXXgl7b1K_r-BO#(}^t(5ySo_p#$NPXPZjaHY5X)dn#8NqW7l zMUH^MZQ$a%ttorJV2dnk#|lr-;m>bi^28Zj2en(R-g#LLfyz zx+w(kt+l&LAd`4Gfcg*ur7y;a_{NwRV@7=l!CHHS1i%K6{Zyy>S)>+ol;+~cB>{^ zg-|%PX)Zk{wQj(-8v?09j4>b$fM+(nyAgv48e=Y(OKFZ&6g}|Fzj56tdjt2citBdz zg&AYqU4>$d8TDwIi@%AYxQ6^Q15kpQ^ zrZjC8&vr%|tq)`b!BfVVX_~M;;GDZ&ukd~- zeP1q@loA%h!3c+8fceep1Nb0NhV_B$ys>yb(X4(R3g78?DC|}_xIR#IjWBw{6!$UUnr%dwSIYd zL4IRD59Hrv|Bq7Y@$nIWG)He#QG4=xS-;R7lxNV0%Y0@WM{w2s2~UaNfP3$+*XuM* zDJ4OjSXWI7)U?t6vnHjX`1od=$eTTAeITO-dy-1b{_L`|vq)mZvi_evqL>mizG8k4 z=36q1Dv}^y@5fIm31W+GC@76qJ#yeiw=y_NB+%&p!ITsFd8!g$%-84ep&BwmQ7pHLsbHbN8*hI+~^T2JV~hjhP+kC~$UYEf1n*a}~K aS@s8U2u?4+T6Mnw00000004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ>7vmK|6?8$WWc^qEZ}d6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfc5qU3krMxx6k5c3aNLh~_a1le0HIM~n$;5rG~G7S z$%L5At%`wH1QEs%VhGF3GUg;Hg|6f49zMR_MR`{DbAOHjHE%J%Clbe*VcNtS#Ia4= z;Ji;9VkKE6J|~_u>4LKlt6PRhXXgl7b1K_r-BO#(}^t(5ySo_p#$NPXPZjaHY5X)dn#8NqW7l zMUH^MZQ$a%ttorJpMj?NXl^3MT=U3vzeT)Ghd zN^x{^um^l+rb#eDeDakDAKOZMlAaK{UxH6AQGxeGrlFg^&;pCCwRF*1f0yM_-s=n= z0Pwf(4F=?sDj%Z0c)DeixpejXp=BrU<{pXED(BNKrvbT091_cjsZQRKOSykpme-ja zQ;8r(m&%_HpVD(6Hiic0yKxB0Bf5B5mRqpaZQBAOnPj}@H@`5XrQ5dM@AnsRZqC=^ zJ=RuleCUB5e4RGu9008AiUU=8gXWJ;4;1rtVcCvLf?N-T`lJV6*9yy|-pJ?^(J5BX z*UKbwz>cN7x*=befNMC*)w!8OpS0)eEIvP$jVGfAdh`2&Oz@w$5QPyMnXE|Cc{1-B zs(86R>GfAfrJGxoV};K?__vm?msX*SK9Qa+ZhI$~MbGQ`e91f20Z1c+QEu+YX==}KXF)UuszqueJ zYlZgyL7^YC{9A%gE?s#4pw$m*{;jPNFrSY-}k`R z{1GPQ-@$>}9M5L;;S5J7>k+?ig_r0P(S3z{hiR_}imwzhG#hQB6n%O=pXQg_&HQ*9 t1`Gp+0mFb{z%XDKFbo(530x$iEP)EX>4Tx04R}tkv&MmKpe$iQ>7vmK|6?8$WWc^qEZ}d6^c+H)C#RSm|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfc5qU3krMxx6k5c3aNLh~_a1le0HIM~n$;5rG~G7S z$%L5At%`wH1QEs%VhGF3GUg;Hg|6f49zMR_MR`{DbAOHjHE%J%Clbe*VcNtS#Ia4= z;Ji;9VkKE6J|~_u>4LKlt6PRhXXgl7b1K_r-BO#(}^t(5ySo_p#$NPXPZjaHY5X)dn#8NqW7l zMUH^MZQ$a%ttorJeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{005{-L_t(I%dL}J4g(;!g3+?lS-el!|o)J~h4 z5D;(V^1|KgC_pu{ZUfyOF->17B>p*d4{zM4o@9Y} z8zQm=#<$xCJF3yY!BM}F$mWVw9*>AT@*OFz@((zk7HeO`9}2gggB_dL`@r-MgA|wN zQwozW%ypmh_+i|_X&Y4)pl?^sdFr#fQ%afcO}_x!lp0~8oR$v&0000) { // Spawn appropriate fixture based on floor type above match *above_floor_type { "dirt" => { - commands.spawn(FixtureTilePrefab::dirt(fixture_position, asset_server)); + commands.spawn(FixtureTilePrefab::dirt_wall(fixture_position, asset_server)); } "rock" => { - commands.spawn(FixtureTilePrefab::rock(fixture_position, asset_server)); + commands.spawn(FixtureTilePrefab::rock_wall(fixture_position, asset_server)); } "bedrock" => { - commands.spawn(FixtureTilePrefab::bedrock(fixture_position, asset_server)); + commands.spawn(FixtureTilePrefab::bedrock_wall(fixture_position, asset_server)); } _ => {} } diff --git a/src/tile.rs b/src/tile.rs index f676d41..6ae9f22 100644 --- a/src/tile.rs +++ b/src/tile.rs @@ -44,6 +44,11 @@ impl Default for FixtureTile { } } +#[derive(Component, Clone)] +pub struct ConnectedTexture { + +} + #[derive(Resource, Default)] pub struct CameraMoved(pub bool); @@ -77,10 +82,9 @@ pub fn tile_sprite_generate_occlusion_map( )>, ) { // Create the tile map using floor query - let tile_map: HashMap<(i32, i32, i32), (bool, u32)> = { + let floor_tile_map: HashMap<(i32, i32, i32), (bool, u32)> = { let mut map = HashMap::new(); - // Add floor tiles query_set.p0().iter().for_each(|(transform, tile)| { map.insert( ( @@ -88,7 +92,23 @@ pub fn tile_sprite_generate_occlusion_map( transform.translation.y as i32, transform.translation.z as i32, ), - (tile.opaque, tile.id), // false indicates floor + (tile.opaque, tile.id), + ); + }); + map + }; + // Create the tile map using fixture query + let fixture_tile_map: HashMap<(i32, i32, i32), (bool, u32)> = { + let mut map = HashMap::new(); + + query_set.p1().iter().for_each(|(transform, tile)| { + map.insert( + ( + transform.translation.x as i32, + transform.translation.y as i32, + transform.translation.z as i32, + ), + (tile.solid, tile.id), ); }); map @@ -168,7 +188,7 @@ pub fn tile_sprite_generate_occlusion_map( transform.translation.y as i32, transform.translation.z as i32, ); - tile.visible_range = calculate_visibility(pos, &tile_map); + tile.visible_range = calculate_visibility(pos, &floor_tile_map); }); // Update fixture tiles @@ -181,7 +201,7 @@ pub fn tile_sprite_generate_occlusion_map( transform.translation.y as i32, transform.translation.z as i32 - 1, ); - fixture.visible_range = calculate_visibility(pos, &tile_map); + fixture.visible_range = calculate_visibility(pos, &fixture_tile_map); }); } @@ -222,6 +242,41 @@ pub fn update_tile_visibility( }); } +fn calculate_connected_texture(floor_tiles: &HashMap<(i32, i32, i32), (bool, u32)>) -> Vec { + let mut textures = vec![]; + + for ((x, y, z), (is_floor, tile_id)) in floor_tiles.iter() { + let mut is_wall = false; + + for x_offset in -1..=1 { + for y_offset in -1..=1 { + for z_offset in 0..=1 { + if x_offset == 0 && y_offset == 0 && z_offset == 0 { + continue; + } + + let neighbor_pos = (x + x_offset, y + y_offset, z + z_offset); + + if let Some((_, neighbor_id)) = floor_tiles.get(&neighbor_pos) { + if *neighbor_id > 0 { // assuming wall IDs are greater than 0 + is_wall = true; + break; + } + } + } + } + } + + match (is_floor, is_wall) { + (true, false) => textures.push("floor".to_string()), // or some other floor texture + (false, true) => textures.push("wall".to_string()), // or some other wall texture + _ => panic!("Unexpected tile state"), + } + } + + textures +} + pub fn tile_item_sprite_update( time: Res