1 #pragma once
2 
3 #include <QtCore/QObject>
4 
5 #include <physics/physics.h>
6 #include <mission/missiongrid.h>
7 #include <osapi/osapi.h>
8 #include <globalincs/pstypes.h>
9 #include <globalincs/globals.h>
10 
11 #include <array>
12 
13 class object;
14 class ship_subsys;
15 
16 ///! \fixme This does NOT belong here. Used for porting and testing purposes ONLY!
17 struct subsys_to_render {
18 	bool do_render;
19 	object* ship_obj;
20 	ship_subsys* cur_subsys;
21 };
22 
23 ///! \fixme does NOT belong here.
24 struct Marking_box {
25 	int x1 = 0;
26 	int y1 = 0;
27 	int x2 = 0;
28 	int y2 = 0;
29 };
30 
31 namespace fso {
32 namespace fred {
33 
34 const float LOLLIPOP_SIZE = 2.5f;
35 
36 enum class CursorMode {
37 	Selecting, Moving, Rotating
38 };
39 
40 class Editor;
41 class EditorViewport;
42 struct ViewSettings;
43 
44 class FredRenderer: public QObject {
45  Q_OBJECT
46 
47 	SCP_vector<int> rendering_order;
48 	int Fred_outline = 0;
49 
50 	EditorViewport* _viewport = nullptr;
51 	os::Viewport* _targetView = nullptr;
52 
53 	FredRenderer(const FredRenderer& other) = delete;
54 	FredRenderer& operator=(const FredRenderer& other) = delete;
55 
56 	ViewSettings& view();
57 
58  public:
59 	explicit FredRenderer(os::Viewport* targetView);
60 	~FredRenderer() override;
61 
62 	void setViewport(EditorViewport* viewport);
63 
64 	void resize(int width, int height);
65 
66 	void render_grid(grid* gridp);
67 	void hilight_bitmap();
68 	void display_distances();
69 	void display_ship_info(int cur_object_index);
70 	void cancel_display_active_ship_subsystem(subsys_to_render& Render_subsys);
71 	void display_active_ship_subsystem(subsys_to_render& Render_subsys, int cur_object_index);
72 
73 	void render_model_x_htl(vec3d* pos, grid* gridp, int col_scheme = 0);
74 	void render_compass();
75 	void draw_orient_sphere2(int col, object* obj, int r, int g, int b);
76 	void draw_orient_sphere(object* obj, int r, int g, int b);
77 	void render_model_x(vec3d* pos, grid* gridp, int col_scheme = 0);
78 	void render_one_model_htl(object* objp, int cur_object_index, bool Bg_bitmap_dialog);
79 	void render_models(int cur_object_index, bool Bg_bitmap_dialog);
80 	void render_frame(int cur_object_index,
81 					  subsys_to_render& Render_subsys,
82 					  bool box_marking,
83 					  const Marking_box& marking_box,
84 					  bool Bg_bitmap_dialog);
85 
86  signals:
87 	void scheduleUpdate();
88 };
89 }
90 }
91