Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

# SimpleFramework.h

Go to the documentation of this file.

    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