Mercurial > mm7
comparison Engine/Graphics/Vis.h @ 2496:5abd8fc8f1c6
for ITEM_ARTIFACT_LADYS_ESCORT
author | Ritor1 |
---|---|
date | Thu, 18 Sep 2014 17:38:54 +0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2495:7b076fe64f23 | 2496:5abd8fc8f1c6 |
---|---|
1 #pragma once | |
2 #include "Render.h" | |
3 | |
4 | |
5 | |
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 at_ai_state; | |
20 int no_at_ai_state; | |
21 int select_flags; | |
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 | |
30 | |
31 | |
32 | |
33 #pragma pack(push, 1) | |
34 struct Vis_ObjectInfo | |
35 { | |
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; | |
47 }; | |
48 #pragma pack(pop) | |
49 | |
50 | |
51 #pragma pack(push, 1) | |
52 struct Vis_SelectionList | |
53 { | |
54 enum PointerCreationType | |
55 { | |
56 All = 0, | |
57 Unique = 1 | |
58 }; | |
59 | |
60 Vis_SelectionList(); | |
61 //----- (004C0585) -------------------------------------------------------- | |
62 ~Vis_SelectionList() {} | |
63 Vis_ObjectInfo *SelectionPointers(int a2, int a3); | |
64 void create_object_pointers(PointerCreationType type = All); | |
65 | |
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 ( ***vdestructor_ptr)(Vis_SelectionList *, bool); | |
74 Vis_ObjectInfo object_pool[512]; | |
75 Vis_ObjectInfo *object_pointers[512]; | |
76 unsigned int uNumPointers; | |
77 }; | |
78 #pragma pack(pop) | |
79 | |
80 | |
81 | |
82 /* 116 */ | |
83 #pragma pack(push, 1) | |
84 class Vis | |
85 { | |
86 public: | |
87 Vis(); | |
88 //----- (004C05A2) -------------------------------------------------------- | |
89 //virtual ~Vis() {} | |
90 //----- (004C05BE) -------------------------------------------------------- | |
91 virtual ~Vis() {} | |
92 bool PickKeyboard(Vis_SelectionList *list, Vis_SelectionFilter *sprite_filter, Vis_SelectionFilter *face_filter); | |
93 void PickBillboards_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter); | |
94 void PickIndoorFaces_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter); | |
95 void PickOutdoorFaces_Keyboard(float pick_depth, Vis_SelectionList *list, Vis_SelectionFilter *filter); | |
96 | |
97 bool PickMouse(float fDepth, float fMouseX, float fMouseY, Vis_SelectionFilter *sprite_filter, Vis_SelectionFilter *face_filter); | |
98 void PickBillboards_Mouse(float fPickDepth, float fX, float fY, Vis_SelectionList *list, Vis_SelectionFilter *filter); | |
99 void PickIndoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter); | |
100 void PickOutdoorFaces_Mouse(float fDepth, struct RenderVertexSoft *pRay, Vis_SelectionList *list, Vis_SelectionFilter *filter, bool only_reachable); | |
101 | |
102 bool is_part_of_selection(void *uD3DBillboardIdx_or_pBLVFace_or_pODMFace, Vis_SelectionFilter *filter); | |
103 bool DoesRayIntersectBillboard(float fDepth, unsigned int uD3DBillboardIdx); | |
104 Vis_ObjectInfo *DetermineFacetIntersection(struct BLVFace *face, unsigned int a3, float pick_depth); | |
105 bool IsPolygonOccludedByBillboard(struct RenderVertexSoft *vertices, int num_vertices, float x, float y); | |
106 void GetPolygonCenter(struct RenderVertexD3D3 *pVertices, unsigned int uNumVertices, float *pCenterX, float *pCenterY); | |
107 void GetPolygonScreenSpaceCenter(struct RenderVertexSoft *vertices, int num_vertices, float *out_center_x, float *out_center_y); | |
108 bool IsPointInsideD3DBillboard(struct RenderBillboardD3D *a1, float x, float y); | |
109 int PickClosestActor(int object_id, unsigned int pick_depth, int a4, int a5, int a6); | |
110 void _4C1A02(); | |
111 void SortVectors_x(RenderVertexSoft *pArray, int start, int end); | |
112 int get_object_zbuf_val(Vis_ObjectInfo *info); | |
113 int get_picked_object_zbuf_val(); | |
114 bool Intersect_Ray_Face(struct RenderVertexSoft *pRayStart, struct RenderVertexSoft *pRayEnd, float *pDepth, RenderVertexSoft *Intersection, BLVFace *pFace, signed int pBModelID); | |
115 bool CheckIntersectBModel(BLVFace *pFace, Vec3_short_ IntersectPoint, signed int sModelID); | |
116 void BLV_CreateIntersectFacesVertexCoordList(int *a, int *b, __int16 *intersect_face_vertex_coords_list_a, __int16 *intersect_face_vertex_coords_list_b, Vec3_short_ *IntersectPoint, BLVFace *pFace); | |
117 void ODM_CreateIntersectFacesVertexCoordList(int *a, int *b, __int16 *intersect_face_vertex_coords_list_a, __int16 *intersect_face_vertex_coords_list_b, Vec3_short_ *IntersectPoint, BLVFace *pFace, unsigned int uModelID); | |
118 void CastPickRay(RenderVertexSoft *pRay, float fMouseX, float fMouseY, float fPickDepth); | |
119 void sort_object_pointers(Vis_ObjectInfo **pPointers, int start, int end); | |
120 void SortVerticesByX(struct RenderVertexD3D3 *pArray, unsigned int uStart, unsigned int uEnd); | |
121 void SortVerticesByY(struct RenderVertexD3D3 *pArray, unsigned int uStart, unsigned int uEnd); | |
122 void SortByScreenSpaceX(struct RenderVertexSoft *pArray, int start, int end); | |
123 void SortByScreenSpaceY(struct RenderVertexSoft *pArray, int start, int end); | |
124 | |
125 //void ( ***vdestructor_ptr)(Vis *, bool); | |
126 Vis_SelectionList default_list; | |
127 RenderVertexSoft stru_200C; | |
128 RenderVertexSoft stru_203C; | |
129 RenderVertexSoft stru_206C; | |
130 RenderVertexSoft stru_209C; | |
131 int keyboard_pick_depth; | |
132 }; | |
133 #pragma pack(pop) |