SDXFrameWork 0.10 SDXFrameWork

- Main Page
- Related Pages
- Classes

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
49 Screen::SetRenderer(Renderer::mainRenderer);
50 Window::SetWindow(SubWindow::mainWindow);
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();
89 Window::activeWindow->Destroy();
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 {
181 while (!Keyboard::HoldAnyKey() && System::ProcessMessage()){}
182 }
183 };
184 }
SDX::System::Wait
static void Wait(int 停止ミリ秒)
指定ミリ秒処理を停止する.
Definition: System.h:173
SDX::Input::Update
static void Update()
入力状態を更新.
Definition: Input.h:39
SDX::System::WaitKey
static void WaitKey()
なんらかのキーが入力されるまで処理を停止する.
Definition: System.h:179
SDX::Screen::Flip
static bool Flip()
描画内容を反映.
Definition: Screen.h:62
SDX::System::Initialise
static void Initialise(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
ライブラリの初期化.
Definition: System.h:31
SDX::System
ライブラリの初期化やシステム的な処理を行う関数群.
Definition: System.h:13
SDX::System::Update
static bool Update(bool 描画更新フラグ=true)
各種更新処理をまとめて行う.
Definition: System.h:95
SDX::SubWindow::Create
bool Create(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
Windowの初期化と生成.
Definition: SubWindow.h:74
SDX::Screen::Clear
static bool Clear()
画面を消去する.
Definition: Screen.h:69
SDX::Input::pad
static Joypad pad
ジョイパッド
Definition: Input.h:22
SDX::Window::SetWindow
static void SetWindow(SubWindow &アクティブにするSubWindow=SubWindow::mainWindow)
SubWindowをアクティブにする.
Definition: Window.h:34
SDX::Music::Update
static bool Update()
fadeOut付きで終了した後に次Musicを再生するための処理.
Definition: Music.h:217
SDX::System::End
static bool End()
ライブラリの終了処理.
Definition: System.h:83
SDX::Screen::GetHandle
static SDL_Renderer * GetHandle()
スクリーンハンドルを取得.
Definition: Screen.h:26
SDX::Screen::SetRenderer
static void SetRenderer(Renderer &描画先Renderer=Renderer::mainRenderer)
アクティブなRendererを設定.
Definition: Screen.h:40
SDX::Keyboard::HoldAnyKey
static bool HoldAnyKey()
いずれかのキーが押されているか取得.
Definition: Keyboard.h:454
SDX::System::ProcessMessage
static bool ProcessMessage()
OSのメッセージ処理を行う.
Definition: System.h:114
SDX::Renderer::mainRenderer
static Renderer & mainRenderer
メインウィンドウのレンダラー
Definition: Renderer.h:48
SDX::Joypad::Open
void Open()
ジョイパッドを起動.
Definition: Joypad.h:114
SDX::SubWindow::mainWindow
static SubWindow mainWindow
現在アクティブなウィンドウ
Definition: SubWindow.h:43
SDX::SubWindow::Destroy
bool Destroy()
SubWindowを削除.
Definition: SubWindow.h:99
SDX::Drawing::SetDefaultFont
static void SetDefaultFont(const char *フォント名, int 大きさ, int 行間=0, bool 高品質レンダリング=true)
デフォルトのフォントを設定する.
Definition: Drawing.h:272
SDX::Music::Check
static bool Check()
再生中か確認.
Definition: Music.h:184
SDX::Window::activeWindow
static SubWindow * activeWindow
現在アクティブなウィンドウ
Definition: Window.h:24
SDX::Window
アクティブなSubWindowを操作するクラス.
Definition: Window.h:14
SDX::Input::GetState
static void GetState(SDL_Event &event)
入力の状態変化を取得.
Definition: Input.h:56