SDXFrameWork 0.12 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
48 SubWindow::mainWindow.Create(ウィンドウ名,幅,高さ,フルスクリーンフラグ);
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 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();
85 Window::activeWindow->Destroy();
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 {
172 while (!Keyboard::HoldAnyKey() && System::ProcessMessage()){}
173 }
174 };
175 }
SDX::System::Wait
static void Wait(int 停止ミリ秒)
指定ミリ秒処理を停止する.
Definition: System.h:164
SDX::Input::Update
static void Update()
入力状態を更新.
Definition: Input.h:42
SDX::System::WaitKey
static void WaitKey()
なんらかのキーが入力されるまで処理を停止する.
Definition: System.h:170
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:91
SDX::SubWindow::Create
bool Create(const char *ウィンドウ名, int 幅, int 高さ, bool フルスクリーンフラグ=false)
Windowの初期化と生成.
Definition: SubWindow.h:76
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:233
SDX::System::End
static bool End()
ライブラリの終了処理.
Definition: System.h:79
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:110
SDX::Renderer::mainRenderer
static Renderer & mainRenderer
メインウィンドウのレンダラー
Definition: Renderer.h:49
SDX::Joypad::Open
void Open()
ジョイパッドを起動.
Definition: Joypad.h:114
SDX::SubWindow::mainWindow
static SubWindow mainWindow
現在アクティブなウィンドウ
Definition: SubWindow.h:45
SDX::SubWindow::Destroy
bool Destroy()
SubWindowを削除.
Definition: SubWindow.h:101
SDX::Drawing::SetDefaultFont
static void SetDefaultFont(const char *フォント名, int 大きさ, int 行間=0, bool 高品質レンダリング=true)
デフォルトのフォントを設定する.
Definition: Drawing.h:283
SDX::Music::Check
static bool Check()
再生中か確認.
Definition: Music.h:186
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:59