summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-12-29 22:41:44 +0500
committeruntodesu <kirill@untode.su>2025-12-29 22:41:44 +0500
commit49d3dff9e98e70e599dfd3059f85bb08ae247fe5 (patch)
treec934297c946b259f698d5a54aa78ed001e7a3f34 /src
parent0f111cf51b00c4e884b7e53b4fd7ff6e38d8af5e (diff)
downloadvoxelius-49d3dff9e98e70e599dfd3059f85bb08ae247fe5.tar.bz2
voxelius-49d3dff9e98e70e599dfd3059f85bb08ae247fe5.zip
Idk man just fix things
Diffstat (limited to 'src')
-rw-r--r--src/game/shared/entity/collision.cc16
-rw-r--r--src/game/shared/game_voxels.cc2
2 files changed, 9 insertions, 9 deletions
diff --git a/src/game/shared/entity/collision.cc b/src/game/shared/entity/collision.cc
index 6878958..2c14a34 100644
--- a/src/game/shared/entity/collision.cc
+++ b/src/game/shared/entity/collision.cc
@@ -20,12 +20,12 @@
#include "shared/coord.hh"
#include "shared/globals.hh"
-constexpr static float EPSILON = 0.5f;
+constexpr static float AABB_EPSILON = 1.0f / 32.0f;
static int vgrid_collide(const Dimension* dimension, int d, Collision& collision, Transform& transform, Velocity& velocity,
- VoxelMaterial& touch_surface, bool enable_snapping_to_grid)
+ VoxelMaterial& touch_surface, bool enable_snapping)
{
- auto movespeed = globals::fixed_frametime * velocity.value[d];
+ auto movespeed = globals::fixed_frametime * velocity.value[d] + std::copysignf(AABB_EPSILON, velocity.value[d]);
auto movesign = math::sign<int>(movespeed);
auto& ref_aabb = collision.aabb;
@@ -95,8 +95,8 @@ static int vgrid_collide(const Dimension* dimension, int d, Collision& collision
auto vbox_center = 0.5f * vbox.min + 0.5f * vbox.max;
math::AABBf clip_vbox(vbox);
- clip_vbox.min -= EPSILON * globals::fixed_frametime;
- clip_vbox.max += EPSILON * globals::fixed_frametime;
+ clip_vbox.min -= AABB_EPSILON;
+ clip_vbox.max += AABB_EPSILON;
if(!csg_aabb.intersect(clip_vbox)) {
continue; // no intersection
@@ -146,15 +146,15 @@ static int vgrid_collide(const Dimension* dimension, int d, Collision& collision
snap_to_closest_vbox = true;
}
- if(snap_to_closest_vbox && enable_snapping_to_grid) {
+ if(snap_to_closest_vbox && enable_snapping) {
auto vbox_center = 0.5f * closest_vbox.min[d] + 0.5f * closest_vbox.max[d];
auto vbox_halfsize = 0.5f * closest_vbox.max[d] - 0.5f * closest_vbox.min[d];
if(movesign < 0) {
- transform.local[d] = vbox_center + vbox_halfsize + ref_halfsize[d] - ref_center[d] + EPSILON * globals::fixed_frametime;
+ transform.local[d] = vbox_center + vbox_halfsize + ref_halfsize[d] - ref_center[d] + AABB_EPSILON;
}
else {
- transform.local[d] = vbox_center - vbox_halfsize - ref_halfsize[d] - ref_center[d] - EPSILON * globals::fixed_frametime;
+ transform.local[d] = vbox_center - vbox_halfsize - ref_halfsize[d] - ref_center[d] - AABB_EPSILON;
}
}
diff --git a/src/game/shared/game_voxels.cc b/src/game/shared/game_voxels.cc
index 6682dd8..964413e 100644
--- a/src/game/shared/game_voxels.cc
+++ b/src/game/shared/game_voxels.cc
@@ -152,6 +152,6 @@ void game_voxels::populate(void)
slime_builder.set_render_mode(VRENDER_BLEND);
slime_builder.set_surface_material(VMAT_SLOSH);
slime_builder.set_touch_type(VTOUCH_BOUNCE);
- slime_builder.set_touch_values({ 0.00f, 0.60f, 0.00f });
+ slime_builder.set_touch_values({ 1.05f, 1.05f, 1.05f });
slime = voxel_registry::register_voxel(slime_builder);
}