… | |
… | |
41 | a2.z = o1.z + ea; |
41 | a2.z = o1.z + ea; |
42 | |
42 | |
43 | sector b2; |
43 | sector b2; |
44 | sector eb; |
44 | sector eb; |
45 | |
45 | |
46 | b2.x = o2.x + (soffs)bbox.a.x; |
46 | b2.x = o2.x + bbox.a.x; |
47 | b2.y = o2.y + (soffs)bbox.a.y; |
47 | b2.y = o2.y + bbox.a.y; |
48 | b2.z = o2.z + (soffs)bbox.a.z; |
48 | b2.z = o2.z + bbox.a.z; |
49 | |
49 | |
50 | eb.x = (soffs)(bbox.b.x - bbox.a.x) / 2; |
50 | eb.x = (bbox.b.x - bbox.a.x) / 2; |
51 | eb.y = (soffs)(bbox.b.y - bbox.a.y) / 2; |
51 | eb.y = (bbox.b.y - bbox.a.y) / 2; |
52 | eb.z = (soffs)(bbox.b.z - bbox.a.z) / 2; |
52 | eb.z = (bbox.b.z - bbox.a.z) / 2; |
53 | |
53 | |
54 | b2.x += eb.x; |
54 | b2.x += eb.x; |
55 | b2.y += eb.y; |
55 | b2.y += eb.y; |
56 | b2.z += eb.z; |
56 | b2.z += eb.z; |
57 | |
57 | |
58 | return abs (a2.x - b2.x) <= ea + eb.x |
58 | return abs (a2.x - b2.x) <= ea + eb.x |
59 | && abs (a2.y - b2.y) <= ea + eb.y |
59 | && abs (a2.y - b2.y) <= ea + eb.y |
60 | && abs (a2.z - b2.z) <= ea + eb.z; |
60 | && abs (a2.z - b2.z) <= ea + eb.z; |
61 | } |
61 | } |
62 | |
62 | |
63 | void octant::add (const sector &sec, entity_base *e) |
63 | void octant::add (entity_base *e) |
64 | { |
64 | { |
65 | printf ("OCTANT %d,%d,%d+%d\n", orig.x, orig.y, orig.z, extent); |
65 | printf ("OCTANT %d,%d,%d+%d\n", orig.x, orig.y, orig.z, extent); |
66 | |
66 | |
|
|
67 | box bbox = translate (e->bbox, e->orig, orig); |
|
|
68 | |
|
|
69 | #if 0 |
|
|
70 | uoffs size = max (abs (bbox.b.x - bbox.a.x), |
|
|
71 | abs (bbox.b.y - bbox.a.y), |
|
|
72 | abs (bbox.b.z - bbox.a.z)); |
|
|
73 | #endif |
|
|
74 | |
67 | if (overlap (orig, extent, sec, e->bbox)) |
75 | if (overlap (orig, extent, e->orig, e->bbox)) |
68 | { |
76 | { |
69 | printf ("overlap, add\n"); |
77 | printf ("overlap, add\n"); |
70 | push_back (e); |
78 | push_back (e); |
71 | e->o.push_back (this); |
79 | e->o.push_back (this); |
|
|
80 | |
|
|
81 | #if 0 |
|
|
82 | uoffs extent2 = extent / 2; |
|
|
83 | for (int si = 8; i--; ) |
|
|
84 | { |
|
|
85 | e->orig sub = orig; |
|
|
86 | sub.offset (si, extent2); |
|
|
87 | if (overlap (sub, extent2, e->orig, e->bbox)) |
|
|
88 | { |
|
|
89 | } |
|
|
90 | #endif |
72 | } |
91 | } |
73 | else |
92 | else |
74 | printf ("no overlap\n"); |
93 | printf ("no overlap\n"); |
75 | } |
94 | } |
76 | |
95 | |
… | |
… | |
79 | } |
98 | } |
80 | |
99 | |
81 | void octant::draw (draw_context &ctx) |
100 | void octant::draw (draw_context &ctx) |
82 | { |
101 | { |
83 | for (iterator i = end (); i-- != begin (); ) |
102 | for (iterator i = end (); i-- != begin (); ) |
84 | (*i)->try_draw (ctx); |
103 | (*i)->display (ctx); |
85 | } |
104 | } |
86 | |
105 | |