Euphoria
camera3.editor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 #include <optional>
5 
6 #include "core/fpscontroller.h"
7 #include "core/mousebehaviour.h"
8 #include "core/easing.h"
9 
10 
11 namespace eu
12 {
13  struct UnitRay3f;
14 }
15 
16 
17 namespace eu::core
18 {
19  struct Camera3;
20  struct CompiledCamera3;
21  struct Viewport;
22  struct SphereAndPosition;
23 
24  struct EditorCamera3;
25 
26  namespace detail
27  {
28  // represents a stored position and rotation of the editor camera
29  struct CameraFrame
30  {
34  };
35 
36  std::string to_string(const CameraFrame& cf);
37 
39  {
40  EditorCameraState3() = default;
41  virtual ~EditorCameraState3() = default;
42 
45  void operator=(EditorCameraState3&&) = delete;
46  void operator=(const EditorCameraState3&) = delete;
47 
48  virtual void on_mouse_move(EditorCamera3* owner, int dx, int dy) = 0;
49  virtual void on_key(EditorCamera3* owner, Key key, bool down) = 0;
50  virtual void update
51  (
52  EditorCamera3* owner,
53  bool shift_state,
54  const vec2i& mouse,
55  const CompiledCamera3& camera,
56  const Viewport& viewport,
57  float dt
58  ) = 0;
59 
60  virtual void
61  on_scroll(EditorCamera3* owner, int dx, int dy) = 0;
62 
63  virtual void on_camera_start(EditorCamera3* owner) = 0;
64  virtual void on_camera_stop(EditorCamera3* owner) = 0;
65 
66  virtual MouseBehaviour get_mouse(const EditorCamera3* owner) const = 0;
67  };
68  }
69 
70  enum class EditorCameraStyle3
71  {
72  orbital, fps
73  };
74 
76  {
77  static constexpr int max_stored_index = 10;
78 
81  float zoom_percent = 0.1f;
82  float max_zoom_change = 25.0f;
83 
84  bool animate_camera = true;
85  float camera_lerp_time = 0.2f;
86  bool scroll_in_orbit = false;
88 
89  std::unique_ptr<detail::EditorCameraState3> state;
90  std::unique_ptr<detail::EditorCameraState3> next_state;
91  std::vector<detail::CameraFrame> stored_cameras;
92 
93 
94  EditorCamera3();
95  virtual ~EditorCamera3() = default;
96 
99 
100  EditorCamera3(const EditorCamera3&) = delete;
102 
103  void update
104  (
105  bool shift_state,
106  const vec2i& mouse,
107  const CompiledCamera3& camera,
108  const Viewport& viewport,
109  float dt
110  );
111 
112  void on_mouse_move(int dx, int dy);
113  void on_scroll(int dx, int dy);
114  void on_key(Key key, bool down);
115  void on_camera_start();
116  void on_camera_stop();
117  void toggle_camera_orbit();
118  void save_camera(int id);
119  void load_camera(int id);
120  void focus(const SphereAndPosition& s, const Camera3& cam);
121  void apply_frame(const detail::CameraFrame& frame);
122 
123 
124  [[nodiscard]] MouseBehaviour get_mouse() const;
125  [[nodiscard]] bool is_camera_orbit() const;
126 
127  virtual std::optional<vec3f> raycast (const UnitRay3f& ray) = 0;
128  };
129 }
130 
ADD_DEFAULT_FORMATTER(eu::core::detail::CameraFrame, std::string, eu::core::detail::to_string)
std::string to_string(const CameraFrame &f)
Key
Definition: key.h:26
Definition: assert.h:90
EditorCamera3(const EditorCamera3 &)=delete
void update(bool shift_state, const vec2i &mouse, const CompiledCamera3 &camera, const Viewport &viewport, float dt)
void on_scroll(int dx, int dy)
easing::Function lerp_function
virtual ~EditorCamera3()=default
void on_key(Key key, bool down)
void on_mouse_move(int dx, int dy)
EditorCameraStyle3 style
std::vector< detail::CameraFrame > stored_cameras
MouseBehaviour get_mouse() const
void apply_frame(const detail::CameraFrame &frame)
virtual std::optional< vec3f > raycast(const UnitRay3f &ray)=0
EditorCamera3 & operator=(const EditorCamera3 &)=delete
EditorCamera3 & operator=(EditorCamera3 &&)=default
static constexpr int max_stored_index
std::unique_ptr< detail::EditorCameraState3 > next_state
std::unique_ptr< detail::EditorCameraState3 > state
EditorCamera3(EditorCamera3 &&)=default
void focus(const SphereAndPosition &s, const Camera3 &cam)
void operator=(EditorCameraState3 &&)=delete
virtual void on_camera_stop(EditorCamera3 *owner)=0
virtual void on_scroll(EditorCamera3 *owner, int dx, int dy)=0
virtual void on_camera_start(EditorCamera3 *owner)=0
virtual void on_key(EditorCamera3 *owner, Key key, bool down)=0
void operator=(const EditorCameraState3 &)=delete
EditorCameraState3(const EditorCameraState3 &)=delete
virtual void on_mouse_move(EditorCamera3 *owner, int dx, int dy)=0
virtual void update(EditorCamera3 *owner, bool shift_state, const vec2i &mouse, const CompiledCamera3 &camera, const Viewport &viewport, float dt)=0
EditorCameraState3(EditorCameraState3 &&)=delete
virtual MouseBehaviour get_mouse(const EditorCamera3 *owner) const =0
Definition: vec2.h:72
Definition: vec3.h:48