From f405c37daccac93323081216b2484da498e2fecf Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Thu, 12 Apr 2018 21:27:07 +0200 Subject: Tracing vs entities, bullets can now hit. --- src/world.cpp | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'src/world.cpp') diff --git a/src/world.cpp b/src/world.cpp index 05519f0..d09001c 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -391,12 +391,34 @@ out_no_hit: trace_t world_t::ray_v_ents(v2f_t start, v2f_t end, cflags_t cflags, - world::entity_t *ignore) + const entity_t *ignore) { - // TODO - trace_t res; - res.hit = false; - return res; + trace_t best; + rectf_t rect; + + best.hit = false; + best.frac = 2.0f; + + rect = rectf_t(start, end).norm(); + + for (entity_t *ent : get_entities(rect, cflags)) { + trace_t trace; + + if (ent == ignore) + continue; + + trace = ray_v_rect(start, end, ent->cmodel.bounds); + if (!trace.hit) + continue; + + if (trace.frac < best.frac) { + best = trace; + best.tile = nullptr; + best.ent = ent; + } + } + + return best; } @@ -442,6 +464,7 @@ trace_t world_t::ray_v_tiles(v2f_t start, v2f_t end, cflags_t cflags) res.hit = true; res.end = x ^ transforms[quad]; res.frac = (x - start).len() / (end - start).len(); + res.ent = nullptr; res.tile = tile; return res; } @@ -467,7 +490,7 @@ trace_t world_t::ray_v_tiles(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) + const entity_t *ignore) { trace_t v_tiles, v_ents; -- cgit