diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/character.cpp | 2 | ||||
-rw-r--r-- | src/chunk-collision.cpp | 10 | ||||
-rw-r--r-- | src/chunk-scenery.cpp | 4 | ||||
-rw-r--r-- | src/scenery.cpp | 2 |
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; |