summaryrefslogtreecommitdiff
path: root/src/world.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-04-12 21:12:28 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-04-12 21:13:35 +0200
commitd307234efb1e687bfac06d48b01eb56d748e8510 (patch)
tree911312b01583dc65b7204ae9a5093e15949e6642 /src/world.cpp
parenta5b20dcd57ddf7bdac8d9bce1aabf934badd837d (diff)
Refactor trace calls and remove the debug crap from the previous commit.
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/world.cpp b/src/world.cpp
index b03105e..05519f0 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -389,7 +389,18 @@ out_no_hit:
return res;
}
-trace_t world_t::trace(v2f_t start, v2f_t end, cflags_t cflags)
+
+trace_t world_t::ray_v_ents(v2f_t start, v2f_t end, cflags_t cflags,
+ world::entity_t *ignore)
+{
+ // TODO
+ trace_t res;
+ res.hit = false;
+ return res;
+}
+
+
+trace_t world_t::ray_v_tiles(v2f_t start, v2f_t end, cflags_t cflags)
{
v2f_t x, dx;
size_t quad;
@@ -414,6 +425,7 @@ trace_t world_t::trace(v2f_t start, v2f_t end, cflags_t cflags)
while (1) {
v2f_t mod, P;
tile_index_t index;
+ tile_t *tile;
if (x[0] >= end[0] && x[1] >= end[1]) {
res.hit = false;
@@ -424,11 +436,13 @@ trace_t world_t::trace(v2f_t start, v2f_t end, cflags_t cflags)
index = (tile_index_t(x.floor()) ^ transforms_index[quad]) +
offsets_index[quad];
+ tile = get_tile(index, SECTOR_FULL);
- if (tiles[get_tile(index, SECTOR_FULL)->type] & cflags) {
+ if (tiles[tile->type] & cflags) {
res.hit = true;
res.end = x ^ transforms[quad];
res.frac = (x - start).len() / (end - start).len();
+ res.tile = tile;
return res;
}
@@ -452,6 +466,21 @@ trace_t world_t::trace(v2f_t start, v2f_t end, cflags_t cflags)
}
}
+trace_t world_t::ray_v_all(v2f_t start, v2f_t end, cflags_t cflags,
+ world::entity_t *ignore)
+{
+ trace_t v_tiles, v_ents;
+
+ v_tiles = ray_v_tiles(start, end, cflags);
+ v_ents = ray_v_ents(start, end, cflags, ignore);
+
+ if (v_tiles.frac < v_ents.frac)
+ return v_tiles;
+ else
+ return v_ents;
+}
+
+
entity_t::entity_t(int type_)
{
type = type_;