From f210a86c1406ccc6dfd6f14181dd7a1274ee0de4 Mon Sep 17 00:00:00 2001 From: untodesu Date: Fri, 12 Sep 2025 15:09:01 +0500 Subject: Random ticking? In my game?! Hell yeah! --- game/shared/entity/grounded.hh | 6 +----- game/shared/game.hh | 4 ---- game/shared/game_items.hh | 4 ---- game/shared/game_voxels.cc | 13 ++++++++++++- game/shared/game_voxels.hh | 4 ---- game/shared/world/chunk_aabb.hh | 4 ---- game/shared/world/ray_dda.hh | 4 ---- 7 files changed, 13 insertions(+), 26 deletions(-) (limited to 'game/shared') diff --git a/game/shared/entity/grounded.hh b/game/shared/entity/grounded.hh index 940cebe..34a0f9e 100644 --- a/game/shared/entity/grounded.hh +++ b/game/shared/entity/grounded.hh @@ -1,8 +1,6 @@ -#ifndef SHARED_ENTITY_GROUNDED -#define SHARED_ENTITY_GROUNDED 1 #pragma once -#include "shared/world/voxel_registry.hh" +#include "shared/world/voxel.hh" namespace entity { @@ -12,5 +10,3 @@ struct Grounded final { world::VoxelMaterial surface; }; } // namespace entity - -#endif // SHARED_ENTITY_GROUNDED diff --git a/game/shared/game.hh b/game/shared/game.hh index 21286e8..0dfbadb 100644 --- a/game/shared/game.hh +++ b/game/shared/game.hh @@ -1,5 +1,3 @@ -#ifndef SHARED_GAME -#define SHARED_GAME 1 #pragma once namespace shared_game @@ -7,5 +5,3 @@ namespace shared_game void init(int argc, char** argv); void shutdown(void); } // namespace shared_game - -#endif // SHARED_GAME diff --git a/game/shared/game_items.hh b/game/shared/game_items.hh index 88952fc..6f8eac9 100644 --- a/game/shared/game_items.hh +++ b/game/shared/game_items.hh @@ -1,5 +1,3 @@ -#ifndef SHARED_GAME_ITEMS -#define SHARED_GAME_ITEMS 1 #pragma once namespace world @@ -24,5 +22,3 @@ namespace game_items { void populate(void); } // namespace game_items - -#endif // SHARED_GAME_ITEMS diff --git a/game/shared/game_voxels.cc b/game/shared/game_voxels.cc index f262c23..51cf873 100644 --- a/game/shared/game_voxels.cc +++ b/game/shared/game_voxels.cc @@ -54,11 +54,21 @@ static void dirt_tick(world::Dimension* dimension, const voxel_pos& vpos) } if(grass_found && air_above) { - // Replace itself with the grass voxel dimension->set_voxel(game_voxels::grass, vpos); } } +static void grass_tick(world::Dimension* dimension, const voxel_pos& vpos) +{ + auto above_vpos = vpos + voxel_pos(0, 1, 0); + auto above_voxel = dimension->get_voxel(above_vpos); + + if(above_voxel && !above_voxel->is_surface_material()) { + // Decay into dirt if something is blocking airflow + dimension->set_voxel(game_voxels::dirt, vpos); + } +} + void game_voxels::populate(void) { auto stone_builder = world::VoxelBuilder("stone"); @@ -92,6 +102,7 @@ void game_voxels::populate(void) grass_builder.add_face_texture(world::VFACE_TOP, "textures/voxel/grass_01.png"); grass_builder.add_face_texture(world::VFACE_TOP, "textures/voxel/grass_02.png"); grass_builder.set_surface_material(world::VMAT_GRASS); + grass_builder.set_on_tick(&grass_tick); grass = world::voxel_registry::register_voxel(grass_builder); auto vtest_builder = world::VoxelBuilder("vtest"); diff --git a/game/shared/game_voxels.hh b/game/shared/game_voxels.hh index 68e599e..2211619 100644 --- a/game/shared/game_voxels.hh +++ b/game/shared/game_voxels.hh @@ -1,5 +1,3 @@ -#ifndef SHARED_GAME_VOXELS -#define SHARED_GAME_VOXELS 1 #pragma once namespace world @@ -26,5 +24,3 @@ namespace game_voxels { void populate(void); } // namespace game_voxels - -#endif // SHARED_GAME_VOXELS diff --git a/game/shared/world/chunk_aabb.hh b/game/shared/world/chunk_aabb.hh index 3a2d26f..d926b55 100644 --- a/game/shared/world/chunk_aabb.hh +++ b/game/shared/world/chunk_aabb.hh @@ -1,5 +1,3 @@ -#ifndef SHARED_CHUNK_AABB -#define SHARED_CHUNK_AABB 1 #pragma once #include "core/math/aabb.hh" @@ -10,5 +8,3 @@ namespace world { using ChunkAABB = math::AABB; } // namespace world - -#endif // SHARED_CHUNK_AABB diff --git a/game/shared/world/ray_dda.hh b/game/shared/world/ray_dda.hh index 3071be2..110e3d4 100644 --- a/game/shared/world/ray_dda.hh +++ b/game/shared/world/ray_dda.hh @@ -1,5 +1,3 @@ -#ifndef SHARED_RAY_DDA -#define SHARED_RAY_DDA 1 #pragma once #include "shared/types.hh" @@ -38,5 +36,3 @@ public: voxel_pos vpos; }; } // namespace world - -#endif // SHARED_RAY_DDA -- cgit