Simulant  21.12-574
A portable game engine for Windows, OSX, Linux, Dreamcast, and PSP
kos_window.h
1 #pragma once
2 
3 /* This is the window implementation for the Dreamcast using KallistiOS */
4 
5 #include <kos.h>
6 
7 #include "window.h"
8 #include "platform.h"
9 
10 #include "threads/mutex.h"
11 
12 namespace smlt {
13 
14 struct KOSWindowPrivate;
15 
16 class KOSWindow : public Window {
17 public:
18  static Window::ptr create(Application* app) {
19  return Window::create<KOSWindow>(app);
20  }
21 
22  KOSWindow();
23  virtual ~KOSWindow();
24 
25  void set_title(const std::string&) override {} // No-op
26  void cursor_position(int32_t&, int32_t&) override {} // No-op
27  void show_cursor(bool) override {} // No-op
28  void lock_cursor(bool) override {} // No-op
29 
30  void swap_buffers() override;
31  void destroy_window() override;
32  void check_events() override;
33 
34  void initialize_input_controller(InputState &controller) override;
35 
36  std::shared_ptr<SoundDriver> create_sound_driver(const std::string& from_config) override;
37 
38 private:
39  bool _init_window() override;
40  bool _init_renderer(Renderer* renderer) override;
41 
42  void probe_vmus();
43 
44  void render_screen(Screen* screen, const uint8_t* data, int row_stride) override;
45 
46  float time_since_last_controller_update_ = 0.0f;
47 
48  struct ControllerState {
49  int8_t joyx = 0;
50  int8_t joyy = 0;
51  int8_t joyx2 = 0;
52  int8_t joyy2 = 0;
53  uint8_t ltrig = 0;
54  uint8_t rtrig = 0;
55 
56  Seconds current_rumble_remaining_;
57  };
58 
59  ControllerState previous_controller_state_[4] = {0};
60  uint32_t previous_controller_button_state_[4] = {0};
61  uint8_t previous_key_state_[MAX_KEYBOARD_CODES] = {0}; // value-initialize to zero
62 
63  virtual void game_controller_start_rumble(GameController *controller, RangeValue<0, 1> low_rumble, RangeValue<0, 1> high_rumble, const smlt::Seconds& duration) override;
64  virtual void game_controller_stop_rumble(GameController *controller) override;
65 
66  friend struct KOSWindowPrivate;
67  std::shared_ptr<KOSWindowPrivate> private_;
68 };
69 
70 }
smlt::Application
Definition: application.h:162
smlt
Definition: animation.cpp:25
smlt::Window
Definition: window.h:65
smlt::RangeValue
Definition: range_value.h:24
smlt::Screen
Definition: screen.h:20
smlt::Seconds
Definition: types.h:55
smlt::Renderer
Definition: renderer.h:40
smlt::InputState
Definition: input_state.h:230
smlt::KOSWindow
Definition: kos_window.h:16
smlt::GameController
Definition: input_state.h:177
smlt::KOSWindowPrivate
Definition: kos_window.cpp:28