SDXFrameWork  0.09
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
System.h
1 #pragma once//☀SDL
2 #include <Multimedia/Window.h>
3 #include <Multimedia/Input.h>
4 #include <Multimedia/Font.h>
5 #include <Multimedia/Music.h>
6 
7 namespace SDX
8 {
11 class System
12 {
13 private:
14  System();
15  ~System();
16  static bool isEnd;
17  static Renderer defaultRenderer;
18 public:
19 
23  static void Initialise( const char* ウィンドウ名 , int 幅 , int 高さ )
24  {
25  if (SDL_Init( SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO ) < 0)
26  {
27  fprintf(stderr, "SDLの初期化に失敗しました:%s\n", SDL_GetError());
28  exit(1);
29  return;
30  }
31 
32  setlocale(LC_CTYPE, "jpn");//文字コードを日本語に
33 
34  int flag = 0;
35  if (Window::Single().isFullScreen)
36  {
37  flag = SDL_WINDOW_FULLSCREEN;
38  }
39 
40  Window::Single().width = 幅;
41  Window::Single().height = 高さ;
42 
43  Window::Single().handle = SDL_CreateWindow( ウィンドウ名 ,SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 幅 , 高さ , flag);
44 
45  defaultRenderer.Create(Window::Single().handle);
46 
47  Screen::SetRenderer(defaultRenderer);
48 
49  #ifdef TABLET
50  int dpiX;
51  int dpiY;
52  SDL_GetWindowSize( Window::Single().handle, &dpiX, &dpiY);
53  Window::Single().aspect = (double)dpiX / dpiY;
54  SDL_RenderSetLogicalSize( Screen::GetHandle() , 幅, 高さ);
55  #endif
56 
57  TTF_Init();
58 
59  //デフォルトフォントの設定
60  Drawing::SetDefaultFont( SystemFont::Gothic , 16 );
61 
62  SDL_InitSubSystem( SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVERYTHING );
63 
64  SDL_JoystickEventState(SDL_ENABLE);
65 
66  if( SDL_NumJoysticks() > 0 )
67  {
68  Input::pad.Open();
69  }
70 
71  //音声関連の初期化
72  Mix_Init(MIX_INIT_MP3);
73  Mix_OpenAudio(44100, AUDIO_S16, 2, 1024);
74  Mix_AllocateChannels(16);
75 
76  isEnd = false;
77  }
78 
81  static bool End()
82  {
83  TTF_Quit();
84  Mix_CloseAudio();
85  Mix_Quit();
86  SDL_Quit();
87  isEnd = true;
88  return true;
89  }
90 
92  static bool Update(bool 描画更新フラグ = true)
93  {
94  if (描画更新フラグ)
95  {
96  Screen::Flip();
97  Screen::Clear();
98  }
99  bool result = System::ProcessMessage();
100  Input::Update();
101  return result;
102  }
103 
107  static bool ProcessMessage()
108  {
109  SDL_Event event;
110 
111  while (SDL_PollEvent(&event))
112  {
113  /* QUIT イベントが発生したら終了する*/
114  if( event.type == SDL_WINDOWEVENT)
115  {
116 #ifdef TABLET
117 switch (event.window.event)
118  {
119  case SDL_WINDOWEVENT_MINIMIZED:
120  Mix_VolumeMusic( 0 );
121  break;
122  case SDL_WINDOWEVENT_RESTORED:
123  Mix_VolumeMusic( Music::nowVolume );
124  break;
125  }
126 #endif
127  }else if (event.type == SDL_QUIT)
128  {
129  isEnd = true;
130  }
131  else
132  {
133  Input::GetState(event);
134  }
135  }
136 
137  return !isEnd;
138  }
139 };
140 }
141 
static RendererHandle GetHandle()
スクリーンハンドルを取得.
Definition: Screen.h:77
static void Update()
状態を更新.
Definition: Input.h:39
static bool Flip()
描画内容を反映.
Definition: Screen.h:103
static void Initialise(const char *ウィンドウ名, int 幅, int 高さ)
ライブラリの初期化.
Definition: System.h:23
ライブラリの初期化やシステム的な処理を行う関数群.
Definition: System.h:11
static bool Update(bool 描画更新フラグ=true)
各種更新処理をまとめて行う.
Definition: System.h:92
static bool Clear()
画面を消去する.
Definition: Screen.h:117
static void SetDefaultFont(const char *フォント名, int 大きさ)
デフォルトのフォントを設定する.
Definition: Drawing.h:79
描画先を表すクラス.
Definition: Screen.h:23
static bool End()
ライブラリの終了処理.
Definition: System.h:81
static void SetRenderer(Renderer &描画先Renderer)
スクリーンハンドルを設定.
Definition: Screen.h:83
static bool ProcessMessage()
OSのメッセージ処理を行う.
Definition: System.h:107
static void GetState(SDL_Event &event)
入力の状態を更新[SDL].
Definition: Input.h:50