SDXFrameWork  0.12
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 
48  SubWindow::mainWindow.Create(ウィンドウ名,幅,高さ,フルスクリーンフラグ);
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  setlocale(LC_CTYPE, "jpn");//文字コードを日本語に
62 
63  TTF_Init();
64  Drawing::SetDefaultFont(SystemFont::Gothic, 16 , 2 );
65  SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_EVERYTHING);
66 
67  //音声関連の初期化
68  Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG);
69  Mix_OpenAudio(44100, AUDIO_S16, 2, 1024);
70  Mix_AllocateChannels(16);
71 
72  Mix_HookMusicFinished(Music::Finished);
73 
74  IsEnd() = false;
75  }
76 
79  static bool End()
80  {
81  TTF_Quit();
82  Mix_CloseAudio();
83  Mix_Quit();
84  SDL_Quit();
86  IsEnd() = true;
87  return true;
88  }
89 
91  static bool Update(bool 描画更新フラグ = true)
92  {
93  if (描画更新フラグ)
94  {
95  Screen::Flip();
96  Screen::Clear();
97  }
98  Input::Update();
99  bool result = System::ProcessMessage();
100 
101  Music::Update();
102 
103  return result;
104  }
105 
110  static bool ProcessMessage()
111  {
112  SDL_Event event;
113 
114  while (SDL_PollEvent(&event))
115  {
116  if (event.type == SDL_WINDOWEVENT)
117  {
118  switch (event.window.event)
119  {
120  case SDL_WINDOWEVENT_CLOSE:
121 #ifndef TABLET
122  //ここでIDに応じてDestroy等する
123  SubWindow::CheckWindowID(event.window.windowID);
124  if (SubWindow::mainWindow.handle == nullptr)
125  {
126  IsEnd() = true;
127  for (auto it : SubWindow::windowS)
128  {
129  it->Destroy();
130  }
131  }
132 #endif
133  break;
134 #ifdef TABLET
135  case SDL_WINDOWEVENT_MINIMIZED:
136  //スリープに入った時、再生中ならBGMを停止する
137  if (Music::Check())
138  {
139  Mix_PauseMusic();
140  }
141  break;
142  case SDL_WINDOWEVENT_RESTORED:
143  //BGMを止めていたら、再開する
144  Mix_ResumeMusic();
145  break;
146 #endif
147  }
148 
149  }
150  else if (event.type == SDL_QUIT)
151  {
152  IsEnd() = true;
153  }
154  else
155  {
156  Input::GetState(event);
157  }
158  }
159 
160  return !IsEnd();
161  }
162 
164  static void Wait(int 停止ミリ秒)
165  {
166  SDL_Delay(停止ミリ秒);
167  }
168 
170  static void WaitKey()
171  {
173  }
174  };
175 }
static void Wait(int 停止ミリ秒)
指定ミリ秒処理を停止する.
Definition: System.h:164
static void Update()
入力状態を更新.
Definition: Input.h:42
static void WaitKey()
なんらかのキーが入力されるまで処理を停止する.
Definition: System.h:170
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:91
bool Create(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
Windowの初期化と生成.
Definition: SubWindow.h:76
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:233
static bool End()
ライブラリの終了処理.
Definition: System.h:79
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:110
static Renderer & mainRenderer
メインウィンドウのレンダラー
Definition: Renderer.h:49
void Open()
ジョイパッドを起動.
Definition: Joypad.h:114
static SubWindow mainWindow
現在アクティブなウィンドウ
Definition: SubWindow.h:45
bool Destroy()
SubWindowを削除.
Definition: SubWindow.h:101
static void SetDefaultFont(const char *フォント名, int 大きさ, int 行間=0, bool 高品質レンダリング=true)
デフォルトのフォントを設定する.
Definition: Drawing.h:283
static bool Check()
再生中か確認.
Definition: Music.h:186
static SubWindow * activeWindow
現在アクティブなウィンドウ
Definition: Window.h:24
アクティブなSubWindowを操作するクラス.
Definition: Window.h:14
static void GetState(SDL_Event &event)
入力の状態変化を取得.
Definition: Input.h:59