source: Daodan/src/patches/Objt.c@ 983

Last change on this file since 983 was 883, checked in by alloc, 11 years ago

Daodan: Objt Draw stuff

File size: 3.6 KB
Line 
1#include "Objt.h"
2#include "../Daodan.h"
3#include "../Oni_Symbols.h"
4
5void DD_OBJiTriggerVolume_Draw(OBJtObject *inObject, uint32_t inDrawFlags)
6{
7 uint32_t itr;
8 OBJtOSD_All* inOSD = (OBJtOSD_All*) inObject->object_data;
9 OBJtOSD_TriggerVolume *trigger_osd = &inOSD->osd.trigger_volume_osd;
10 M3tPoint3D* points = trigger_osd->volume.worldPoints;
11 M3tPoint3D trigger_center = MUgZeroPoint;
12 uint32_t shade = 0xFFFFFF;
13 UUtBool is_selected = ((inDrawFlags & OBJcDrawFlag_Selected) != 0);
14
15 if (!OBJgTriggerVolume_Visible) {
16 return;
17 }
18
19 if (OBJrTriggerVolume_IntersectsCharacter(inObject, trigger_osd->team_mask, ONgGameState->local.playerCharacter)) {
20 shade = IMcShade_Red;
21 }
22 else if (is_selected)
23 {
24 shade = IMcShade_Green;
25 }
26 else
27 {
28 shade = IMcShade_Blue;
29 }
30
31 M3rGeom_Line_Light(points + 0, points + 1, shade);
32 M3rGeom_Line_Light(points + 1, points + 3, shade);
33 M3rGeom_Line_Light(points + 3, points + 2, shade);
34 M3rGeom_Line_Light(points + 2, points + 0, shade);
35
36 M3rGeom_Line_Light(points + 4, points + 5, shade);
37 M3rGeom_Line_Light(points + 5, points + 7, shade);
38 M3rGeom_Line_Light(points + 7, points + 6, shade);
39 M3rGeom_Line_Light(points + 6, points + 4, shade);
40
41 M3rGeom_Line_Light(points + 0, points + 4, shade);
42 M3rGeom_Line_Light(points + 1, points + 5, shade);
43 M3rGeom_Line_Light(points + 3, points + 7, shade);
44 M3rGeom_Line_Light(points + 2, points + 6, shade);
45
46 if (is_selected) {
47 M3rGeom_Line_Light(points + 0, points + 3, shade);
48 M3rGeom_Line_Light(points + 1, points + 2, shade);
49
50 M3rGeom_Line_Light(points + 4, points + 7, shade);
51 M3rGeom_Line_Light(points + 5, points + 6, shade);
52
53 M3rGeom_Line_Light(points + 2, points + 4, shade);
54 M3rGeom_Line_Light(points + 1, points + 7, shade);
55 M3rGeom_Line_Light(points + 0, points + 6, shade);
56 M3rGeom_Line_Light(points + 3, points + 5, shade);
57
58 M3rGeom_Line_Light(points + 2, points + 7, shade);
59 M3rGeom_Line_Light(points + 3, points + 6, shade);
60 M3rGeom_Line_Light(points + 0, points + 5, shade);
61 M3rGeom_Line_Light(points + 1, points + 4, shade);
62 }
63
64 trigger_center = MUgZeroPoint;
65 for(itr = 0; itr < M3cNumBoundingPoints; itr++)
66 {
67 MUmVector_Add(trigger_center, trigger_center, points[itr]);
68 }
69
70 MUmVector_Scale(trigger_center, (1.0f / ((float) M3cNumBoundingPoints)));
71}
72
73void DD_OBJiFlag_Draw(OBJtObject *inObject, uint32_t inDrawFlags)
74{
75 OBJtOSD_Flag *flag_osd;
76 M3tPoint3D camera_location;
77
78 M3tPoint3D points[4] =
79 {
80 { 0.0f, 0.0f, 0.0f },
81 { 0.0f, 10.0f, 0.0f },
82 { 0.0f, 8.0f, 4.0f },
83 { 0.0f, 6.0f, 0.0f }
84 };
85
86 if (OBJgFlag_DrawFlags == UUcFalse) { return; }
87
88 // get a pointer to the object osd
89 flag_osd = (OBJtOSD_Flag*)inObject->object_data;
90
91 if ((OBJgFlag_ViewPrefix != 0) && (OBJgFlag_ViewPrefix != flag_osd->id_prefix)) { return; }
92
93 // set up the matrix stack
94 M3rMatrixStack_Push();
95 M3rMatrixStack_ApplyTranslate(inObject->position);
96 M3rMatrixStack_Multiply(&flag_osd->rotation_matrix);
97 M3rGeom_State_Commit();
98
99 // draw the flag
100 M3rGeom_Line_Light(points + 0, points + 1, flag_osd->shade);
101 M3rGeom_Line_Light(points + 1, points + 2, flag_osd->shade);
102 M3rGeom_Line_Light(points + 2, points + 3, flag_osd->shade);
103
104 // draw the name
105 camera_location = CArGetLocation();
106 if (MUrPoint_Distance(&inObject->position, &camera_location) < OBJgFlag_DrawNameDistance)
107 {
108 OBJiFlag_DrawName(inObject, points + 1);
109 }
110
111 // draw the rotation ring if this flag is selected
112 if (inDrawFlags & OBJcDrawFlag_Selected)
113 {
114 M3tBoundingSphere bounding_sphere;
115
116 OBJrObject_GetBoundingSphere(inObject, &bounding_sphere);
117 OBJrObjectUtil_DrawRotationRings(inObject, &bounding_sphere, OBJcDrawFlag_RingY);
118 }
119
120 M3rMatrixStack_Pop();
121}
122
Note: See TracBrowser for help on using the repository browser.