root/lang/d/koke/trunk/boot.d @ 11928

Revision 11928, 4.2 kB (checked in by omega, 7 years ago)

save/load実装

Line 
1/********************************************************************************/
2/*  boot.d                                                                                                                                              */
3/*------------------------------------------------------------------------------*/
4/*      製作              ( ゜ワ゜)ノ / 松久貫太                                                                  */
5/*      製作開始    2007/05/11                                                                                                              */
6/*      MAIL            omega@personal.email.ne.jp                                                                              */
7/*      URL             http://nagoya.cool.ne.jp/o_mega                                                                         */
8/*                                                                                                                                                              */
9/*      このソースは「やわらかライセンス」の元で配布されています。                                   */
10/*-更新履歴---------------------------------------------------------------------*/
11/*      2007/--/--                                                                                                                                      */
12/*-その他-----------------------------------------------------------------------*/
13/*      なし                                                                                                                                              */
14/********************************************************************************/
15
16/* ライブラリのインポート *******************************************************/
17private import hell2;           // dHell2ライブラリ
18private import state;
19private import std.random;
20private import std.string;
21private import std.math;
22private import std.math2;
23private import std.stream;
24
25/* グローバル定数定義 ***********************************************************/
26
27// 画面サイズ
28const char[] g_title = "hoge";          // タイトルバー
29
30enum BOOTMODE{
31        NORMAL,
32        SCREENSAVER,
33}
34private BOOTMODE g_bootmode = BOOTMODE.NORMAL;
35bool isScreenSaver() {return g_bootmode == BOOTMODE.SCREENSAVER;}
36
37/* Hell_main ********************************************************************/
38/*      ヘルライブラリ・エントリポイント                                                                                        */
39/*-引数-------------------------------------------------------------------------*/
40/*      args            (i)     引数                                                                                                              */
41/*-返り値-----------------------------------------------------------------------*/
42/*      int             実行結果                                                                                                                    */
43/********************************************************************************/
44int Hell_main(char[][] args)
45{
46        // オプション解釈
47        bool is_fullscreen = false;     // デフォルトはウインドウ
48        int g_width = 640;
49        int g_height = 480;
50        g_bootmode = BOOTMODE.NORMAL;
51        foreach(int t,string buf;args)
52        {
53                if(buf == "/s" || buf == "/S"){
54                        // スクリーンセーバとして起動
55                        is_fullscreen = true;
56                        g_bootmode = BOOTMODE.SCREENSAVER;
57                }
58                if(buf == "-window") is_fullscreen = false;
59                if(buf == "-fullscreen") is_fullscreen = true;
60                if(buf == "-res"){
61                        g_width = cast(int)std.string.atoi(args[t + 1]);
62                        g_height = cast(int)std.string.atoi(args[t + 2]);
63                        t+=2;
64                }
65        }
66       
67        // メインループ
68        try
69        {
70                Hell_init(g_title , g_width, g_height , is_fullscreen , true);
71                load();
72                while(true)
73                {
74                        loop();
75                        Hell_update();
76                        Hell_wait(25); // 40fps
77                }
78        }
79        catch(Exception e)
80        {
81                Hell_write(e);
82        }
83        finally
84        {
85                Hell_quit();
86        }
87       
88        return 0;
89}
90
91/* main *************************************************************************/
92/*      Win32エントリポイント                                                                                                           */
93/********************************************************************************/
94version (Win32_release)
95{
96        private import std.c.windows.windows;
97        private import std.string;
98
99        extern (C) void gc_init();
100        extern (C) void gc_term();
101        extern (C) void _minit();
102        extern (C) void _moduleCtor();
103
104        extern (Windows)
105        public int WinMain(HINSTANCE hInstance,
106                HINSTANCE hPrevInstance,
107                LPSTR lpCmdLine,
108                int nCmdShow)
109        {
110                int result;
111                gc_init();
112                _minit();
113                try
114                {
115                        _moduleCtor();
116                        char exe[4096];
117                        GetModuleFileNameA(null, cast(char*)exe, 4096);
118                        char[][1] prog;
119                        prog[0] = std.string.toString(toStringz(exe));
120                        result  = Hell_main(prog ~ std.string.split(std.string.toString(lpCmdLine)));
121                }
122                catch(Object o)
123                {
124                        printf(std.string.toStringz(o.toString()));
125                        result = 1;
126                }
127                gc_term();
128                return result;
129        }
130}
131else
132{
133        version (Darwin)
134        {
135                public int main(char[][] args) {
136                        string path = args[0];
137                        std.stdio.writefln(path);
138                        std.stdio.writefln( path[0.. (rfind( path , "/") + 1)]);
139                        std.file.chdir( path[0 .. (rfind( path , "/" ) + 1)] );
140                        return Hell_main(args);
141                }
142        }
143        else
144        {
145                public int main(char[][] args){
146                        return Hell_main(args);
147                }
148        }
149}
150
151version (Darwin)
152{
153        extern (C) int _d_run_Dmain(int argc, char* argv[]);
154        extern (C) int SDL_main(int argc, char* argv[]) {
155                return _d_run_Dmain(argc, argv);
156        }
157}
Note: See TracBrowser for help on using the browser.