0
|
1 #pragma once
|
|
2 #include "Render.h"
|
|
3
|
|
4
|
|
5
|
194
|
6 enum VisObjectType: unsigned __int32
|
|
7 {
|
|
8 VisObjectType_Any = 0,
|
|
9 VisObjectType_Sprite = 1,
|
|
10 VisObjectType_Face = 2
|
|
11 };
|
|
12
|
|
13 /* 150 */
|
|
14 #pragma pack(push, 1)
|
|
15 struct Vis_SelectionFilter //stru157
|
|
16 {
|
|
17 VisObjectType object_type;
|
|
18 int object_id; // OBJECT_Actor, OBJECT_Player etc
|
|
19 int field_8;
|
|
20 int field_C;
|
|
21 int field_10;
|
|
22 };
|
|
23 #pragma pack(pop)
|
|
24 extern Vis_SelectionFilter vis_sprite_filter_1; // 00F93E1C
|
|
25 extern Vis_SelectionFilter vis_sprite_filter_2; // 00F93E30
|
|
26 extern Vis_SelectionFilter vis_face_filter; // 00F93E44
|
|
27 extern Vis_SelectionFilter vis_door_filter; // 00F93E58
|
|
28 extern Vis_SelectionFilter vis_sprite_filter_3; // 00F93E6C
|
|
29 extern Vis_SelectionFilter vis_sprite_filter_4; // static to sub_44EEA7
|
0
|
30
|
|
31
|
|
32
|
|
33 #pragma pack(push, 1)
|
194
|
34 struct Vis_ObjectInfo
|
0
|
35 {
|
194
|
36 void *object;
|
|
37 union
|
|
38 {
|
|
39 int sZValue;
|
|
40 struct
|
|
41 {
|
|
42 unsigned __int16 object_pid;
|
|
43 signed __int16 actual_z;
|
|
44 };
|
|
45 };
|
|
46 VisObjectType object_type;
|
0
|
47 };
|
|
48 #pragma pack(pop)
|
|
49
|
194
|
50
|
0
|
51 #pragma pack(push, 1)
|
194
|
52 struct Vis_SelectionList
|
0
|
53 {
|
194
|
54 enum PointerCreationType
|
|
55 {
|
|
56 All = 0,
|
|
57 Unique = 1
|
|
58 };
|
|
59
|
|
60 Vis_SelectionList();
|
0
|
61 //----- (004C0585) --------------------------------------------------------
|
194
|
62 ~Vis_SelectionList() {}
|
|
63 Vis_ObjectInfo *sub_4C2551(int a2, int a3);
|
|
64 void create_object_pointers(PointerCreationType type = All);
|
0
|
65
|
194
|
66 inline void AddObject(void *object, VisObjectType type, int packed_zval)
|
|
67 {
|
|
68 object_pool[uNumPointers].object = object;
|
|
69 object_pool[uNumPointers].object_type = type;
|
|
70 object_pool[uNumPointers++].sZValue = packed_zval;
|
|
71 }
|
|
72
|
|
73 void (__thiscall ***vdestructor_ptr)(Vis_SelectionList *, bool);
|
|
74 Vis_ObjectInfo object_pool[512];
|
|
75 Vis_ObjectInfo *object_pointers[512];
|
|
76 unsigned int uNumPointers;
|
0
|
77 };
|
|
78 #pragma pack(pop)
|
|
79
|
|
80
|
|
81
|
|
82 /* 116 */
|
|
83 #pragma pack(push, 1)
|
|
84 struct Vis
|
|
85 {
|
|
86 Vis();
|
|
87 //----- (004C05A2) --------------------------------------------------------
|
|
88 //virtual ~Vis() {}
|
|
89 //----- (004C05BE) --------------------------------------------------------
|
|
90 ~Vis() {}
|
194
|
91 bool PickKeyboard(Vis_SelectionList *list, Vis_SelectionFilter *sprite_filter, Vis_SelectionFilter *face_filter);
|
196
|
92 void PickBillboards_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter);
|
|
93 void PickIndoorFaces_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter);
|
|
94 void PickOutdoorFaces_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter);
|
|
95
|
194
|
96 bool PickMouse(float fDepth, float fMouseX, float fMouseY, Vis_SelectionFilter *sprite_filter, Vis_SelectionFilter *face_filter);
|
|
97 void PickBillboards_Mouse(float fPickDepth, float fX, float fY, Vis_SelectionList *list, Vis_SelectionFilter *filter);
|
196
|
98 void PickIndoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter);
|
|
99 void PickOutdoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool one_sided);
|
|
100
|
194
|
101 bool is_part_of_selection(void *uD3DBillboardIdx_or_pBLVFace_or_pODMFace, Vis_SelectionFilter *filter);
|
0
|
102 bool DoesRayIntersectBillboard(float fDepth, unsigned int uD3DBillboardIdx);
|
196
|
103 Vis_ObjectInfo *_4C1026(struct BLVFace *face, unsigned int a3, float pick_depth);
|
|
104 bool IsPolygonOccludedByBillboard(struct RenderVertexSoft *vertices, int num_vertices, float x, float y);
|
0
|
105 void GetPolygonCenter(struct RenderVertexD3D3 *pVertices, unsigned int uNumVertices, float *pCenterX, float *pCenterY);
|
196
|
106 void GetPolygonScreenSpaceCenter(struct RenderVertexSoft *vertices, int num_vertices, float *out_center_x, float *out_center_y);
|
0
|
107 bool IsPointInsideD3DBillboard(struct RenderBillboardD3D *a1, float x, float y);
|
295
|
108 int PickClosestActor(int object_id, unsigned int pick_depth, int a4, int a5, int a6);
|
0
|
109 void _4C1A02();
|
|
110 bool SortVectors_x(RenderVertexSoft *a2, int a3, int a4);
|
194
|
111 int get_object_zbuf_val(Vis_ObjectInfo *info);
|
0
|
112 int get_picked_object_zbuf_val();
|
|
113 bool Intersect_Ray_Face(struct RenderVertexSoft *pRayStart, struct RenderVertexSoft *pRayEnd, float *pDepth, RenderVertexSoft *a4, BLVFace *a5, unsigned int a6);
|
|
114 int _4C1D2B(BLVFace *pFace, Vec3_short_ a2, unsigned int uModelID);
|
|
115 bool _4C1EE5_BLV_IntersectBModel_2(int *a1, int *a2, __int16 *a3, __int16 *a4, Vec3_short_ *a5, BLVFace *pFace);
|
|
116 bool _4C2186_BLV_IntersectBModel(int *a1, int *a2, __int16 *a3, __int16 *a4, Vec3_short_ *a5, BLVFace *a6, unsigned int uModelID);
|
|
117 void CastPickRay(RenderVertexSoft *pRay, float fMouseX, float fMouseY, float fPickDepth);
|
194
|
118 void sort_object_pointers(Vis_ObjectInfo **pPointers, int left, int right);
|
0
|
119 bool SortVerticesByX(struct RenderVertexD3D3 *a2, unsigned int uStart, unsigned int uEnd);
|
|
120 bool SortVerticesByY(struct RenderVertexD3D3 *a2, unsigned int uStart, unsigned int uEnd);
|
196
|
121 bool SortByScreenSpaceX(struct RenderVertexSoft *pArray, int sLeft, int sRight);
|
|
122 bool SortByScreenSpaceY(struct RenderVertexSoft *pArray, int sLeft, int sRight);
|
0
|
123
|
|
124 void (__thiscall ***vdestructor_ptr)(Vis *, bool);
|
194
|
125 Vis_SelectionList default_list;
|
|
126 RenderVertexSoft stru_200C;
|
|
127 RenderVertexSoft stru_203C;
|
|
128 RenderVertexSoft stru_206C;
|
|
129 RenderVertexSoft stru_209C;
|
196
|
130 int keyboard_pick_depth;
|
0
|
131 };
|
|
132 #pragma pack(pop)
|