summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/character.cpp2
-rw-r--r--src/chunk-collision.cpp10
-rw-r--r--src/chunk-scenery.cpp4
-rw-r--r--src/scenery.cpp2
4 files changed, 11 insertions, 7 deletions
diff --git a/src/character.cpp b/src/character.cpp
index 5e42d4e8..0dbaa157 100644
--- a/src/character.cpp
+++ b/src/character.cpp
@@ -216,7 +216,7 @@ character::character(object_id id, struct chunk& c, const character_proto& proto
if (!atlas)
atlas = loader.anim_atlas("npc-walk", loader.ANIM_PATH);
fm_soft_assert(atlas->check_rotation(r));
- entity::set_bbox_(offset, bbox_offset, Vector2ub(iTILE_SIZE2/4), pass);
+ entity::set_bbox_(offset, bbox_offset, Vector2ub(iTILE_SIZE2/2), pass);
}
} // namespace floormat
diff --git a/src/chunk-collision.cpp b/src/chunk-collision.cpp
index aceafc3f..dfb0fdd6 100644
--- a/src/chunk-collision.cpp
+++ b/src/chunk-collision.cpp
@@ -12,6 +12,8 @@ chunk::RTree* chunk::rtree() noexcept { ensure_passability(); return &_rtree; }
namespace {
+constexpr float wall_depth = 8, wall_depth_2 = wall_depth*.5f;
+
constexpr Vector2 tile_start(size_t k)
{
constexpr auto half_tile = Vector2(TILE_SIZE2)/2;
@@ -35,14 +37,14 @@ constexpr Pair<Vector2, Vector2> whole_tile(size_t k)
constexpr Pair<Vector2, Vector2> wall_north(size_t k)
{
- auto min = tile_start(k) - Vector2(0, 1);
- return { min, min + Vector2(TILE_SIZE2[0], 2), };
+ auto min = tile_start(k) - Vector2(0, wall_depth_2);
+ return { min, min + Vector2(TILE_SIZE2[0], wall_depth), };
}
constexpr Pair<Vector2, Vector2> wall_west(size_t k)
{
- auto min = tile_start(k) - Vector2(1, 0);
- return { min, min + Vector2(2, TILE_SIZE2[1]), };
+ auto min = tile_start(k) - Vector2(wall_depth_2, 0);
+ return { min, min + Vector2(wall_depth, TILE_SIZE2[1]), };
}
constexpr object_id make_id(collision_type type, pass_mode p, object_id id)
diff --git a/src/chunk-scenery.cpp b/src/chunk-scenery.cpp
index c13d3148..6723464e 100644
--- a/src/chunk-scenery.cpp
+++ b/src/chunk-scenery.cpp
@@ -88,6 +88,7 @@ auto chunk::make_topo_sort_data(entity& e) -> topo_sort_data
{
const auto bb_min_ = world_pos - Vector3(Vector2(e.bbox_size/2), 0);
const auto bb_max_ = bb_min_ + Vector3(Vector2(e.bbox_size), 0);
+ const auto& sc = static_cast<scenery&>(e);
switch (e.r)
{
using enum rotation;
@@ -103,9 +104,10 @@ auto chunk::make_topo_sort_data(entity& e) -> topo_sort_data
if (bb_len >= 1 && f.size[0] > uiTILE_SIZE[0])
{
data.slope = (bb_max[1]-bb_min[1])/bb_len;
- data.mode = topo_sort_data::mode_static;
data.bb_min = Vector2s(bb_min - px_start);
data.bb_max = Vector2s(bb_max - px_start);
+ if (sc.sc_type != scenery_type::door)
+ data.mode = topo_sort_data::mode_static;
}
break;
}
diff --git a/src/scenery.cpp b/src/scenery.cpp
index 873dcf93..fadc0471 100644
--- a/src/scenery.cpp
+++ b/src/scenery.cpp
@@ -97,7 +97,7 @@ Vector2 scenery::depth_offset() const
if (sc_type == scenery_type::door)
{
const bool is_open = frame != atlas->info().nframes-1;
- ret += Vector2(is_open ? sc_offset : -sc_offset, 0);
+ ret += Vector2(sc_offset * is_open, 0);
constexpr auto off_opened = Vector2(-1, 0);
constexpr auto off_closed = Vector2(0, 0);
const auto vec = is_open ? off_opened : off_closed;