00001 //------------------------------------------------------------------------------ 00002 // Lamp : Open source game middleware 00003 // Copyright (C) 2004 Junpei Ohtani ( Email : junpee@users.sourceforge.jp ) 00004 // 00005 // This library is free software; you can redistribute it and/or 00006 // modify it under the terms of the GNU Lesser General Public 00007 // License as published by the Free Software Foundation; either 00008 // version 2.1 of the License, or (at your option) any later version. 00009 // 00010 // This library is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // Lesser General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU Lesser General Public 00016 // License along with this library; if not, write to the Free Software 00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 //------------------------------------------------------------------------------ 00019 00020 /** @file 00021 * シンプルフレームワークヘッダ 00022 * @author Junpee 00023 */ 00024 00025 #ifndef SIMPLE_FRAMEWORK_H_ 00026 #define SIMPLE_FRAMEWORK_H_ 00027 00028 #include <Framework/Utility/WindowCreator.h> 00029 00030 // 以下のファイルは頻繁に使用するのであらかじめインクルードしておく 00031 #include <Input/Keyboard/Keyboard.h> 00032 #include <Input/Mouse/Mouse.h> 00033 #include <Core/Utility/Random.h> 00034 00035 namespace Lamp{ 00036 00037 class FPSController; 00038 00039 //------------------------------------------------------------------------------ 00040 /** 00041 * シンプルフレームワーク 00042 * 00043 * 最低限必要な処理を詰め込んだ小さなフレームワーク。基本的にフレームワークはLampに 00044 * とっつきやすくするため、用意されています(例えるならコード量の少ないd3dapp)。 00045 * ちゃんとしたアプリケーションを組む場合は、このフレームワークを参考にしてプログラム 00046 * を1から書きはじめ、だんだん大きくしていけばよいでしょう。 00047 * その場合は空っぽのオーバライドメソッドをフレームワークメソッドと置き換えるように 00048 * するとプログラムがシンプルになります。 00049 */ 00050 class SimpleFramework{ 00051 public: 00052 //-------------------------------------------------------------------------- 00053 // 生成、破棄 00054 //-------------------------------------------------------------------------- 00055 /** 00056 * コンストラクタ 00057 * @param name アプリケーション名 00058 */ 00059 SimpleFramework(const String& name); 00060 00061 /** 00062 * デストラクタ 00063 */ 00064 virtual ~SimpleFramework(); 00065 00066 /** 00067 * 実行 00068 * @param instance インスタンスハンドル 00069 * @return 成功すれば0を返す 00070 */ 00071 virtual int execute(HINSTANCE instance); 00072 00073 protected: 00074 //-------------------------------------------------------------------------- 00075 // オーバーライドメソッド 00076 //-------------------------------------------------------------------------- 00077 /** 00078 * 初期化 00079 * @return 初期化に成功すればtrueを返す 00080 */ 00081 virtual bool initialize(){ return true; } 00082 00083 /** 00084 * 後始末 00085 */ 00086 virtual void finalize(){} 00087 00088 /** 00089 * 実行 00090 */ 00091 virtual void run(){} 00092 00093 /** 00094 * レンダリング準備 00095 */ 00096 virtual void renderSetup(){} 00097 00098 /** 00099 * レンダリング 00100 */ 00101 virtual void render(){} 00102 00103 //-------------------------------------------------------------------------- 00104 // フレームワークメソッド 00105 //-------------------------------------------------------------------------- 00106 /** 00107 * フレームワークの初期化 00108 * @param instanceHandle インスタンスハンドル 00109 * @return 初期化に成功すればtrueを返す 00110 */ 00111 virtual bool frameworkInitialize(HINSTANCE instanceHandle); 00112 00113 /** 00114 * フレームワークの実行 00115 * @return 実行結果。WinMainの返り値 00116 */ 00117 virtual int frameworkExecute(); 00118 00119 /** 00120 * フレームワークの後始末 00121 */ 00122 virtual void frameworkFinalize(); 00123 00124 //-------------------------------------------------------------------------- 00125 // ループ内の処理 00126 //-------------------------------------------------------------------------- 00127 /** 00128 * メインループ 00129 */ 00130 virtual void mainLoop(); 00131 00132 /** 00133 * フレームワーク実行 00134 */ 00135 virtual void frameworkRun(); 00136 00137 /** 00138 * フレームワークレンダリング準備 00139 */ 00140 virtual void frameworkRenderSetup(); 00141 00142 /** 00143 * フレームワークプレゼンテーション 00144 * @return デバイスがロストしていればtrue 00145 */ 00146 virtual bool frameworkPresentation(); 00147 00148 /** 00149 * フレームワークレンダリング 00150 */ 00151 virtual void frameworkRender(); 00152 00153 //-------------------------------------------------------------------------- 00154 // ウィンドウプロシージャ関連 00155 //-------------------------------------------------------------------------- 00156 /** 00157 * ウィンドウプロシージャ 00158 * @param windowHandle ウィンドウハンドル 00159 * @param message メッセージ 00160 * @param wParam wメッセージパラメータ 00161 * @param lParam lメッセージパラメータ 00162 * @return メッセージを処理し、それ以上の処理が必要無いならば0以外を返す。 00163 */ 00164 virtual LRESULT windowProcedure( 00165 HWND windowHandle, u_int message, WPARAM wParam, LPARAM lParam){ 00166 return 0; 00167 } 00168 00169 /** 00170 * フレームワークウィンドウプロシージャ 00171 * @param windowHandle ウィンドウハンドル 00172 * @param message メッセージ 00173 * @param wParam wメッセージパラメータ 00174 * @param lParam lメッセージパラメータ 00175 * @return メッセージを処理し、それ以上の処理が必要無いならば0以外を返す。 00176 */ 00177 virtual LRESULT frameworkWindowProcedure( 00178 HWND windowHandle, u_int message, WPARAM wParam, LPARAM lParam); 00179 00180 public: 00181 //-------------------------------------------------------------------------- 00182 /** 00183 * 登録用ウィンドウプロシージャ 00184 * @param windowHandle ウィンドウハンドル 00185 * @param message メッセージ 00186 * @param wParam wメッセージパラメータ 00187 * @param lParam lメッセージパラメータ 00188 */ 00189 static LRESULT CALLBACK registrationWindowProcedure( 00190 HWND windowHandle, u_int message, WPARAM wParam, LPARAM lParam); 00191 00192 protected: 00193 //-------------------------------------------------------------------------- 00194 /// 名前 00195 String name_; 00196 /// ウィンドウハンドル 00197 HWND windowHandle_; 00198 /// ウィンドウ作成パラメータ 00199 WindowCreator::CreateParameter createWindowParameter_; 00200 /// ウィンドウ最小サイズ 00201 DimensionI minimumWindowSize_; 00202 /// 背景色 00203 Color4c backGroundColor_; 00204 00205 /// FPSコントローラ 00206 FPSController* fpsController_; 00207 /// キーボード 00208 Keyboard* keyboard_; 00209 /// マウス 00210 Mouse* mouse_; 00211 /// フルスクリーンで開始するか 00212 bool startFullscreen_; 00213 00214 /// インスタンス 00215 static SimpleFramework* instance_; 00216 00217 private: 00218 // コピーコンストラクタの隠蔽 00219 SimpleFramework(const SimpleFramework& copy); 00220 00221 // 代入コピーの隠蔽 00222 void operator =(const SimpleFramework& copy); 00223 00224 }; 00225 00226 //------------------------------------------------------------------------------ 00227 } // End of namespace Lamp 00228 #endif // End of SIMPLE_FRAMEWORK_H_ 00229 //------------------------------------------------------------------------------ 00230