ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/oct.C
(Generate patch)

Comparing libgender/oct.C (file contents):
Revision 1.3 by root, Sun Oct 3 03:51:51 2004 UTC vs.
Revision 1.4 by root, Sun Oct 3 05:10:45 2004 UTC

28{ 28{
29 for (fill = 8; fill--; ) 29 for (fill = 8; fill--; )
30 delete sub[fill]; 30 delete sub[fill];
31} 31}
32 32
33static bool overlap (const sector &o1, uoffs ea, const sector &o2, const box &bbox)
34{
35 sector a2;
36
37 ea /= 2;
38
39 a2.x = o1.x + ea;
40 a2.y = o1.y + ea;
41 a2.z = o1.z + ea;
42
43 sector b2;
44 sector eb;
45
46 b2.x = o2.x + (soffs)bbox.a.x;
47 b2.y = o2.y + (soffs)bbox.a.y;
48 b2.z = o2.z + (soffs)bbox.a.z;
49
50 eb.x = (soffs)(bbox.b.x - bbox.a.x) / 2;
51 eb.y = (soffs)(bbox.b.y - bbox.a.y) / 2;
52 eb.z = (soffs)(bbox.b.z - bbox.a.z) / 2;
53
54 b2.x += eb.x;
55 b2.y += eb.y;
56 b2.z += eb.z;
57
58 return abs (a2.x - b2.x) <= ea + eb.x
59 && abs (a2.y - b2.y) <= ea + eb.y
60 && abs (a2.z - b2.z) <= ea + eb.z;
61}
62
33void octant::add (const sector &sec, entity_base *e) 63void octant::add (const sector &sec, entity_base *e)
34{ 64{
35 sector orig2; 65 printf ("OCTANT %d,%d,%d+%d\n", orig.x, orig.y, orig.z, extent);
36 sector extent2;
37 66
38 orig2.x = sec.x + (soffs)e->bbox.a.x; 67 if (overlap (orig, extent, sec, e->bbox))
39 orig2.y = sec.y + (soffs)e->bbox.a.y; 68 {
40 orig2.z = sec.z + (soffs)e->bbox.a.z; 69 printf ("overlap, add\n");
41
42 extent2.x = sec.x + (soffs)e->bbox.b.x - orig2.x;
43 extent2.x = sec.y + (soffs)e->bbox.b.y - orig2.y;
44 extent2.x = sec.z + (soffs)e->bbox.b.z - orig2.z;
45
46 push_back (e); 70 push_back (e);
47 e->o.push_back (this); 71 e->o.push_back (this);
72 }
73 else
74 printf ("no overlap\n");
48} 75}
49 76
50void octant::remove (entity_base *e) 77void octant::remove (entity_base *e)
51{ 78{
52} 79}
53 80
54void octant::draw (const draw_context &ctx) 81void octant::draw (draw_context &ctx)
55{ 82{
56 for (iterator i = end (); i-- != begin (); ) 83 for (iterator i = end (); i-- != begin (); )
57 (*i)->draw (ctx); 84 (*i)->try_draw (ctx);
58} 85}
59 86

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines