summaryrefslogtreecommitdiffstats
path: root/game/server/overworld.cc
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-03-22 15:08:17 +0500
committeruntodesu <kirill@untode.su>2025-03-22 15:08:17 +0500
commite34a973f647bc6b7814ad1f3e837689f8478b84a (patch)
tree7c8cb1702c16eb68e7acf942d46633a3833bba00 /game/server/overworld.cc
parentd8f0fcb101c21b3c4d746d20da6e56e7591006e4 (diff)
downloadvoxelius-e34a973f647bc6b7814ad1f3e837689f8478b84a.tar.bz2
voxelius-e34a973f647bc6b7814ad1f3e837689f8478b84a.zip
A bunch of pre-release fixes
- Updated localization for protocol messages - Added item registry check into server-side - Slightly improved how features are stored
Diffstat (limited to 'game/server/overworld.cc')
-rw-r--r--game/server/overworld.cc67
1 files changed, 36 insertions, 31 deletions
diff --git a/game/server/overworld.cc b/game/server/overworld.cc
index 78747fc..608fd01 100644
--- a/game/server/overworld.cc
+++ b/game/server/overworld.cc
@@ -1,6 +1,8 @@
#include "server/pch.hh"
#include "server/overworld.hh"
+#include "core/vectors.hh"
+
#include "shared/coord.hh"
#include "shared/game_voxels.hh"
#include "shared/voxel_storage.hh"
@@ -11,9 +13,12 @@ static void compute_tree_feature(unsigned int height, Feature &feature, voxel_id
// Ensure the tree height is too small
height = cxpr::max<unsigned int>(height, 4U);
+ // Put down a single piece of dirt
+ feature.push_back({ voxel_pos(0, -1, 0), game_voxels::dirt, true });
+
// Generate tree stem
for(unsigned int i = 0; i < height; ++i) {
- feature.push_back({ voxel_pos(0, i, 0), log_voxel });
+ feature.push_back({ voxel_pos(0, i, 0), log_voxel, true });
}
auto leaves_start = height - 3U;
@@ -23,43 +28,43 @@ static void compute_tree_feature(unsigned int height, Feature &feature, voxel_id
// Generate the thin 3x3 layer of leaves that
// starts from leaves_start and ends at leaves_thin_end
for(unsigned int i = leaves_start; i <= leaves_thin_end; ++i) {
- feature.push_back({ local_pos(-1, i, -1), leaves_voxel });
- feature.push_back({ local_pos(-1, i, +0), leaves_voxel });
- feature.push_back({ local_pos(-1, i, +1), leaves_voxel });
- feature.push_back({ local_pos(+0, i, -1), leaves_voxel });
- feature.push_back({ local_pos(+0, i, +1), leaves_voxel });
- feature.push_back({ local_pos(+1, i, -1), leaves_voxel });
- feature.push_back({ local_pos(+1, i, +0), leaves_voxel });
- feature.push_back({ local_pos(+1, i, +1), leaves_voxel });
+ feature.push_back({ local_pos(-1, i, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(-1, i, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(-1, i, +1), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, i, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, i, +1), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, i, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, i, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, i, +1), leaves_voxel, false });
}
// Generate the tree cap; a 3x3 patch of leaves
// that is slapped right on top of the thin 3x3 layer
- feature.push_back({ local_pos(-1, height, +0), leaves_voxel });
- feature.push_back({ local_pos(+0, height, -1), leaves_voxel });
- feature.push_back({ local_pos(+0, height, +0), leaves_voxel });
- feature.push_back({ local_pos(+0, height, +1), leaves_voxel });
- feature.push_back({ local_pos(+1, height, +0), leaves_voxel });
+ feature.push_back({ local_pos(-1, height, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, height, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, height, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, height, +1), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, height, +0), leaves_voxel, false });
// Generate the thin 5x5 layer of leaves that
// starts from leaves_start and ends at leaves_thin_end
for(unsigned int i = leaves_start; i <= leaves_thick_end; ++i) {
- feature.push_back({ local_pos(-1, i, -2), leaves_voxel });
- feature.push_back({ local_pos(-1, i, +2), leaves_voxel });
- feature.push_back({ local_pos(-2, i, -1), leaves_voxel });
- feature.push_back({ local_pos(-2, i, -2), leaves_voxel });
- feature.push_back({ local_pos(-2, i, +0), leaves_voxel });
- feature.push_back({ local_pos(-2, i, +1), leaves_voxel });
- feature.push_back({ local_pos(-2, i, +2), leaves_voxel });
- feature.push_back({ local_pos(+0, i, -2), leaves_voxel });
- feature.push_back({ local_pos(+0, i, +2), leaves_voxel });
- feature.push_back({ local_pos(+1, i, -2), leaves_voxel });
- feature.push_back({ local_pos(+1, i, +2), leaves_voxel });
- feature.push_back({ local_pos(+2, i, -1), leaves_voxel });
- feature.push_back({ local_pos(+2, i, -2), leaves_voxel });
- feature.push_back({ local_pos(+2, i, +0), leaves_voxel });
- feature.push_back({ local_pos(+2, i, +1), leaves_voxel });
- feature.push_back({ local_pos(+2, i, +2), leaves_voxel });
+ feature.push_back({ local_pos(-1, i, -2), leaves_voxel, false });
+ feature.push_back({ local_pos(-1, i, +2), leaves_voxel, false });
+ feature.push_back({ local_pos(-2, i, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(-2, i, -2), leaves_voxel, false });
+ feature.push_back({ local_pos(-2, i, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(-2, i, +1), leaves_voxel, false });
+ feature.push_back({ local_pos(-2, i, +2), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, i, -2), leaves_voxel, false });
+ feature.push_back({ local_pos(+0, i, +2), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, i, -2), leaves_voxel, false });
+ feature.push_back({ local_pos(+1, i, +2), leaves_voxel, false });
+ feature.push_back({ local_pos(+2, i, -1), leaves_voxel, false });
+ feature.push_back({ local_pos(+2, i, -2), leaves_voxel, false });
+ feature.push_back({ local_pos(+2, i, +0), leaves_voxel, false });
+ feature.push_back({ local_pos(+2, i, +1), leaves_voxel, false });
+ feature.push_back({ local_pos(+2, i, +2), leaves_voxel, false });
}
}
@@ -216,7 +221,7 @@ const Overworld_Metadata &Overworld::get_or_create_metadata(const chunk_pos_xz &
auto is_unique = true;
for(const auto &check_lpos : metadata.trees) {
- if(check_lpos == lpos) {
+ if(cxvectors::distance2(check_lpos, lpos) <= 9) {
is_unique = false;
break;
}