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)