SDXFrameWork  0.10
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
System.h
1 //Copyright © 2014 SDXFramework
2 //[License]GNU Affero General Public License, version 3
3 //[Contact]http://sourceforge.jp/projects/dxframework/
4 #pragma once
5 #include <Multimedia/Window.h>
6 #include <Multimedia/Input.h>
7 #include <Multimedia/Font.h>
8 
9 namespace SDX
10 {
13  class System
14  {
15  friend class Window;
16 
17  private:
18  MONO_STATE(System)
19 
20 
21  static bool& IsEnd()
22  {
23  static bool isEnd;
24  return isEnd;
25  }
26  public:
27 
31  static void Initialise(const char* ウィンドウ名, int 幅, int 高さ , bool フルスクリーンフラグ = false)
32  {
33  if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0)
34  {
35  exit(1);
36  return;
37  }
38 
39 #ifndef TABLET
40  SDL_JoystickEventState(SDL_ENABLE);
41 
42  if (SDL_NumJoysticks() > 0)
43  {
44  Input::pad.Open();
45  }
46 #endif
47  SubWindow::mainWindow.Create(ウィンドウ名,幅,高さ,フルスクリーンフラグ);
48 
51 
52  //タブレットと画面サイズを合わせる
53 #ifdef TABLET
54  int dpiX;
55  int dpiY;
56  SDL_GetWindowSize(SubWindow::mainWindow.handle, &dpiX, &dpiY);
57  SubWindow::mainWindow.aspect = (double)dpiX / dpiY;
58  SDL_RenderSetLogicalSize(Screen::GetHandle(), 幅, 高さ);
59 #endif
60 
61  //デフォルトフォントの設定
62  setlocale(LC_CTYPE, "jpn");//文字コードを日本語に
63 
64  TTF_Init();
65  Drawing::SetDefaultFont(SystemFont::Gothic, 16 , 2 );
66  SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVERYTHING);
67 
68 
69  //音声関連の初期化
70  Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG);
71  Mix_OpenAudio(44100, AUDIO_S16, 2, 1024);
72  Mix_AllocateChannels(16);
73 
74  Mix_HookMusicFinished(Music::Finished);
75 
76  IsEnd() = false;
77 
78 
79  }
80 
83  static bool End()
84  {
85  TTF_Quit();
86  Mix_CloseAudio();
87  Mix_Quit();
88  SDL_Quit();
90  IsEnd() = true;
91  return true;
92  }
93 
95  static bool Update(bool 描画更新フラグ = true)
96  {
97  if (描画更新フラグ)
98  {
99  Screen::Flip();
100  Screen::Clear();
101  }
102  Input::Update();
103  bool result = System::ProcessMessage();
104 
105  Music::Update();
106 
107  return result;
108  }
109 
114  static bool ProcessMessage()
115  {
116  SDL_Event event;
117 
118  while (SDL_PollEvent(&event))
119  {
120  if (event.type == SDL_WINDOWEVENT)
121  {
122  switch (event.window.event)
123  {
124  case SDL_WINDOWEVENT_CLOSE:
125 #ifndef TABLET
126  //ここでIDに応じてDestroy等する
127  SubWindow::CheckWindowID(event.window.windowID);
128  if (SubWindow::mainWindow.handle == nullptr)
129  {
130  IsEnd() = true;
131  for (auto it : SubWindow::windowS)
132  {
133  it->Destroy();
134  }
135  }
136 #endif
137  break;
138  case SDL_WINDOWEVENT_MINIMIZED:
139 #ifdef TABLET
140  //スリープに入る
141  if (Music::Check())
142  {
143  //Music::active->Stop();
144  }
145 #endif
146  break;
147  case SDL_WINDOWEVENT_RESTORED:
148 #ifdef TABLET
149  //スリープ解除
150  if (Music::Check())
151  {
152  //Music::active->Restart();
153  }
154 #endif
155  break;
156  }
157 
158  }
159  else if (event.type == SDL_QUIT)
160  {
161  IsEnd() = true;
162  }
163  else
164  {
165  Input::GetState(event);
166  }
167  }
168 
169  return !IsEnd();
170  }
171 
173  static void Wait(int 停止ミリ秒)
174  {
175  SDL_Delay(停止ミリ秒);
176  }
177 
179  static void WaitKey()
180  {
182  }
183  };
184 }
static void Wait(int 停止ミリ秒)
指定ミリ秒処理を停止する.
Definition: System.h:173
static void Update()
入力状態を更新.
Definition: Input.h:39
static void WaitKey()
なんらかのキーが入力されるまで処理を停止する.
Definition: System.h:179
static bool Flip()
描画内容を反映.
Definition: Screen.h:62
static void Initialise(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
ライブラリの初期化.
Definition: System.h:31
ライブラリの初期化やシステム的な処理を行う関数群.
Definition: System.h:13
static bool Update(bool 描画更新フラグ=true)
各種更新処理をまとめて行う.
Definition: System.h:95
bool Create(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
Windowの初期化と生成.
Definition: SubWindow.h:74
static bool Clear()
画面を消去する.
Definition: Screen.h:69
static Joypad pad
ジョイパッド
Definition: Input.h:22
static void SetWindow(SubWindow &アクティブにするSubWindow=SubWindow::mainWindow)
SubWindowをアクティブにする.
Definition: Window.h:34
static bool Update()
fadeOut付きで終了した後に次Musicを再生するための処理.
Definition: Music.h:217
static bool End()
ライブラリの終了処理.
Definition: System.h:83
static SDL_Renderer * GetHandle()
スクリーンハンドルを取得.
Definition: Screen.h:26
static void SetRenderer(Renderer &描画先Renderer=Renderer::mainRenderer)
アクティブなRendererを設定.
Definition: Screen.h:40
static bool HoldAnyKey()
いずれかのキーが押されているか取得.
Definition: Keyboard.h:454
static bool ProcessMessage()
OSのメッセージ処理を行う.
Definition: System.h:114
static Renderer & mainRenderer
メインウィンドウのレンダラー
Definition: Renderer.h:48
void Open()
ジョイパッドを起動.
Definition: Joypad.h:114
static SubWindow mainWindow
現在アクティブなウィンドウ
Definition: SubWindow.h:43
bool Destroy()
SubWindowを削除.
Definition: SubWindow.h:99
static void SetDefaultFont(const char *フォント名, int 大きさ, int 行間=0, bool 高品質レンダリング=true)
デフォルトのフォントを設定する.
Definition: Drawing.h:272
static bool Check()
再生中か確認.
Definition: Music.h:184
static SubWindow * activeWindow
現在アクティブなウィンドウ
Definition: Window.h:24
アクティブなSubWindowを操作するクラス.
Definition: Window.h:14
static void GetState(SDL_Event &event)
入力の状態変化を取得.
Definition: Input.h:56