1 | #include "Objt.h"
|
---|
2 | #include "../Daodan.h"
|
---|
3 | #include "../Oni_Symbols.h"
|
---|
4 |
|
---|
5 | void 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 |
|
---|
73 | void 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 |
|
---|