summaryrefslogtreecommitdiff
path: root/src/world.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-04-20 13:08:58 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-04-20 13:08:58 +0200
commite8b487b0d2c1dc622256b89642ac291632f101fc (patch)
tree02df8baf050da52e22d9eb8ab55b45b0e242d87c /src/world.cpp
parentf4fe2c7f10a8d2e253de27f1a540ca68184d5d29 (diff)
More improvements to shooting.
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/world.cpp b/src/world.cpp
index 0d96234..6688e0b 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -433,6 +433,27 @@ trace_t world_t::ray_v_ents(v2f_t start, v2f_t end, cflags_t cflags,
return best;
}
+trace_t world_t::point_v_tiles(v2f_t at, cflags_t cflags)
+{
+ tile_index_t index;
+ tile_t *tile;
+ trace_t trace;
+
+ index = tile_index_t(at.floor());
+ tile = get_tile(index, SECTOR_FULL);
+
+ if (tiles[tile->type] & cflags) {
+ trace.hit = true;
+ trace.frac = 0.0f;
+ trace.tile = tile;
+ } else {
+ trace.hit = false;
+ trace.frac = 1.0f;
+ }
+
+ trace.end = at;
+ return trace;
+}
trace_t world_t::ray_v_tiles(v2f_t start, v2f_t end, cflags_t cflags)
{
@@ -443,12 +464,8 @@ trace_t world_t::ray_v_tiles(v2f_t start, v2f_t end, cflags_t cflags)
dx = end - start;
quad = quadrant(dx);
- if (quad == 4) {
- res.hit = false;
- res.end = end;
- res.frac = 1.0f;
- return res;
- }
+ if (quad == 4)
+ return point_v_tiles(start, cflags);
start ^= transforms[quad];
dx ^= transforms[quad];