diff options
author | Paweł Redman <pawel.redman@gmail.com> | 2018-04-12 21:12:28 +0200 |
---|---|---|
committer | Paweł Redman <pawel.redman@gmail.com> | 2018-04-12 21:13:35 +0200 |
commit | d307234efb1e687bfac06d48b01eb56d748e8510 (patch) | |
tree | 911312b01583dc65b7204ae9a5093e15949e6642 /src/world.cpp | |
parent | a5b20dcd57ddf7bdac8d9bce1aabf934badd837d (diff) |
Refactor trace calls and remove the debug crap from the previous commit.
Diffstat (limited to 'src/world.cpp')
-rw-r--r-- | src/world.cpp | 33 |
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_; |