userloop廃止。Input.updateでの更新はWindow.updateまで1回のみ有効に。
@@ -194,20 +194,19 @@ | ||
194 | 194 | ---------------------------------------------------------------------*/ |
195 | 195 | VALUE Input_update( VALUE obj ) |
196 | 196 | { |
197 | - if( g_WindowInfo.userloop != 2 ) | |
197 | + if( g_WindowInfo.input_updated == 0 ) | |
198 | 198 | { |
199 | - g_WindowInfo.userloop = 1; | |
200 | - | |
201 | 199 | /* 入力状態更新 */ |
202 | 200 | inputupdate_internal(); |
201 | + g_WindowInfo.input_updated = 1; | |
203 | 202 | |
204 | 203 | rb_hash_foreach( g_WindowInfo.before_call, Window_autocall_foreach, obj ); |
204 | + } | |
205 | 205 | |
206 | - if( g_WindowInfo.requestclose == 1 ) | |
207 | - { | |
208 | - g_WindowInfo.requestclose = 0; | |
209 | - return Qtrue; | |
210 | - } | |
206 | + if( g_WindowInfo.requestclose == 1 ) | |
207 | + { | |
208 | + g_WindowInfo.requestclose = 0; | |
209 | + return Qtrue; | |
211 | 210 | } |
212 | 211 | |
213 | 212 | return Qfalse; |
@@ -388,8 +388,6 @@ | ||
388 | 388 | Window_create( obj ); |
389 | 389 | } |
390 | 390 | |
391 | - g_WindowInfo.userloop = 2; | |
392 | - | |
393 | 391 | /* 終了条件が無い */ |
394 | 392 | while( 1 ) |
395 | 393 | { |
@@ -404,14 +402,20 @@ | ||
404 | 402 | /* メッセージが無い時 */ |
405 | 403 | /* 入力状態更新 */ |
406 | 404 | inputupdate_internal(); |
405 | + g_WindowInfo.input_updated = 1; | |
406 | + | |
407 | 407 | /* before_call処理 */ |
408 | 408 | rb_hash_foreach( g_WindowInfo.before_call, Window_autocall_foreach, obj ); |
409 | + | |
409 | 410 | /* ブロック実行 */ |
410 | 411 | rb_yield( obj ); |
412 | + | |
411 | 413 | /* after_call処理 */ |
412 | 414 | rb_hash_foreach( g_WindowInfo.after_call, Window_autocall_foreach, obj ); |
415 | + | |
413 | 416 | /* fps調整 */ |
414 | 417 | Window_sync( obj ); |
418 | + | |
415 | 419 | /* 描画 */ |
416 | 420 | Window_update( Qnil ); |
417 | 421 | } |
@@ -528,6 +532,7 @@ | ||
528 | 532 | |
529 | 533 | g_RunningTime = GetSystemCounter() - g_StartTime; |
530 | 534 | |
535 | + g_WindowInfo.input_updated = 0; | |
531 | 536 | return Qnil; |
532 | 537 | } |
533 | 538 |
@@ -4956,7 +4961,7 @@ | ||
4956 | 4961 | g_WindowInfo.fps = 60; |
4957 | 4962 | g_WindowInfo.frameskip = Qfalse; |
4958 | 4963 | g_WindowInfo.hIcon = 0; |
4959 | - g_WindowInfo.userloop = 0; | |
4964 | + g_WindowInfo.input_updated = 0; | |
4960 | 4965 | g_WindowInfo.requestclose = 0; |
4961 | 4966 | g_WindowInfo.render_target = RenderTarget_allocate( cRenderTarget ); |
4962 | 4967 | rb_global_variable( &g_WindowInfo.render_target ); |
@@ -109,7 +109,7 @@ | ||
109 | 109 | int fpscheck; /* 現在のfps */ |
110 | 110 | int frameskip; /* コマ落ち制御フラグ */ |
111 | 111 | HANDLE hIcon; /* ウィンドウアイコンハンドル */ |
112 | - int userloop; /* 自前ループされてたら1、Window.loopされたら2*/ | |
112 | + int input_updated; /* 入力更新したら1 */ | |
113 | 113 | int requestclose; /* ウィンドウが閉じられたら1 */ |
114 | 114 | VALUE render_target; /* スクリーンレンダーターゲット */ |
115 | 115 | VALUE before_call; /* 毎フレーム自動で最初に呼ばれる */ |