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/game_voxels.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'game/shared/game_voxels.cc') 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"); -- cgit