1
0
Fork 0
mirror of https://github.com/isledecomp/isle.git synced 2024-12-22 05:52:41 -05:00
isle/LEGO1/viewmanager/viewmanager.h

83 lines
2.6 KiB
C
Raw Normal View History

#ifndef VIEWMANAGER_H
#define VIEWMANAGER_H
#include "decomp.h"
#include "realtime/realtimeview.h"
2024-01-10 17:40:24 -05:00
#include "viewroi.h"
2023-06-18 08:02:16 -04:00
#include <d3drm.h>
2024-01-10 17:40:24 -05:00
// VTABLE: LEGO1 0x100dbd88
// SIZE 0x1bc
2023-10-24 19:38:27 -04:00
class ViewManager {
public:
enum Flags {
c_bit1 = 0x01,
c_bit2 = 0x02,
c_bit3 = 0x04,
c_bit4 = 0x08
};
2024-01-13 14:58:10 -05:00
ViewManager(Tgl::Renderer* pRenderer, Tgl::Group* scene, const OrientableROI* point_of_view);
2024-01-10 17:40:24 -05:00
virtual ~ViewManager();
void Remove(ViewROI* p_roi);
void RemoveAll(ViewROI* p_roi);
unsigned int IsBoundingBoxInFrustum(const BoundingBox& p_bounding_box);
void UpdateROIDetailBasedOnLOD(ViewROI* p_roi, int p_und);
void RemoveROIDetailFromScene(ViewROI* p_roi);
2024-01-10 17:40:24 -05:00
void SetPOVSource(const OrientableROI* point_of_view);
float ProjectedSize(const BoundingSphere& p_bounding_sphere);
ViewROI* Pick(Tgl::View* p_view, unsigned long x, unsigned long y);
2024-01-13 14:58:10 -05:00
void SetResolution(int width, int height);
void SetFrustrum(float fov, float front, float back);
inline void ManageVisibilityAndDetailRecursively(ViewROI* p_roi, int p_und);
void Update(float p_previousRenderTime, float);
inline int CalculateFrustumTransformations();
void UpdateViewTransformations();
2024-01-13 14:58:10 -05:00
inline static int CalculateLODLevel(float p_und1, float p_und2, ViewROI* p_roi);
inline static int IsROIVisibleAtLOD(ViewROI* p_roi);
const CompoundObject& GetROIs() { return rois; }
void Add(ViewROI* p_roi) { rois.push_back(p_roi); }
// SYNTHETIC: LEGO1 0x100a6000
// ViewManager::`scalar deleting destructor'
2024-01-13 14:58:10 -05:00
private:
Tgl::Group* scene; // 0x04
CompoundObject rois; // 0x08
RealtimeView rt_view; // 0x14
ROIList visible_rois; // 0x18
float prev_render_time; // 0x28
float view_area_at_one; // 0x2c
unsigned int flags; // 0x30
float width; // 0x34
float height; // 0x38
float view_angle; // 0x3c
MxMatrix pov; // 0x40
float front; // 0x88
float back; // 0x8c
float frustum_vertices[8][3]; // 0x90
float transformed_points[8][3]; // 0xf0
float frustum_planes[6][4]; // 0x150
IDirect3DRM2* d3drm; // 0x1b0
IDirect3DRMFrame2* frame; // 0x1b4
float seconds_allowed; // 0x1b8
};
// TEMPLATE: LEGO1 0x10022030
// list<ROI *,allocator<ROI *> >::insert
// TEMPLATE: LEGO1 0x100a6020
// List<ROI *>::~List<ROI *>
// TEMPLATE: LEGO1 0x100a6070
// Vector<ROI const *>::~Vector<ROI const *>
// TEMPLATE: LEGO1 0x100a6f80
// vector<ROI const *,allocator<ROI const *> >::~vector<ROI const *,allocator<ROI const *> >
#endif // VIEWMANAGER_H