;
; モーションの再生
;
#include "e3dhsp.as"
;/////////////////
;
; 初期化
;
E3DInit
mes "Now loading..."
dim keybuf, 256
;file のpath 用のバッファーの作成
sdim mediadir, 2048
mediadir = curdir + "\\data"
sdim pathbuf, 2048
;/////////////////
;
; ライトの設定
;
E3DCreateLight lid1 ;光源を作成
lightdirx1 = 1 ;平行光の向き
lightdiry1 = -1
lightdirz1 = 0
lightr1 = 255 ;平行光の色
lightg1 = 255
lightb1 = 255
E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1 ;光源を平行光源に設定
;/////////////////
;
; カメラの初期化
;
camposx = 0 : camposy = 2000 : camposz = 4200
E3DSetCameraPos camposx, camposy, camposz ;カメラ座標を設定
targetx = 0 ;注視点座標
targety = 1000
targetz = 0
upvecx = 0 ;カメラの上方向のベクトル
upvecy = 1
upvecz = 0
E3DSetCameraTarget targetx, targety, targetz, upvecx, upvecy, upvecz ;カメラの注視点を設定
;/////////////////
;
; 形状データのロード
;
;猫妹データのロード
pathbuf = mediadir + "\\ni_parts_6_bone.sig"
E3DSigLoad pathbuf, hsid1
;/////////////////
;
; モーションデータのロード
;
pathbuf = mediadir + "\\ni_parts4_idling.qua"
E3DAddMotion hsid1, pathbuf, mk1_idling, max1_idling
pathbuf = mediadir + "\\ni_parts4_punch.qua"
E3DAddMotion hsid1, pathbuf, mk1_punch, max1_punch
pathbuf = mediadir + "\\ni_parts4_kick.qua"
E3DAddMotion hsid1, pathbuf, mk1_kick, max1_kick
pathbuf = mediadir + "\\ni_parts4_act1.qua"
E3DAddMotion hsid1, pathbuf, mk1_act1, max1_act1
pathbuf = mediadir + "\\ni_parts4_defense.qua"
E3DAddMotion hsid1, pathbuf, mk1_defense, max1_defense
pathbuf = mediadir + "\\ni_parts4_win.qua"
E3DAddMotion hsid1, pathbuf, mk1_win, max1_win
pathbuf = mediadir + "\\ni_parts4_final.qua"
E3DAddMotion hsid1, pathbuf, mk1_final, max1_final
E3DSetMotionType hsid1, mk1_defense, 4 ;しゃがむ動作のあと巻き戻しで立ち上がる。
E3DSetNextMotionFrameNo hsid1, mk1_punch, mk1_act1, 20 ;パンチのあとに回転アクション
E3DSetMotionKind hsid1, mk1_idling
posx1 = 0 : posy1 = 0 : posz1 = 0
degx1 = 0 : degy1 = 180 : degz1 = 0
E3DSetPos hsid1, posx1, posy1, posz1
E3DSetDir hsid1, degx1, degy1, degz1
;/////////////////
;
; メインループ
;
*main
E3DGetKeyboardState keybuf
if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了
gosub *MoveCamera ;カメラ移動
gosub *PlayMotion ;モーションの再生
E3DChkInView hsid1 ;モデルが、視野内にあるか判定
E3DBeginScene ;-----シーンスタート
;バックバッファへの書き込み作業を行う
E3DRender hsid1, 0, frameno1, 0
E3DRender hsid1, 1, frameno1, 0
E3DDrawText 20,20, 1, 255,255,255, "Hit 'Z'or 'X', 'C', 'V', 'B', 'N' key."
E3DEndScene ;-----シーン終了
E3DPresent ;バックバッファの内容を、プライマリバッファに転送。描画する。
E3DWaitbyFPS 30 : await 0
goto *main
;/////////////////
;
; 終了処理
;
*bye
E3DDestroyLight lid1 ;ライトを破棄
E3DBye
end
;/////////////////
;
; カメラ調整操作
;
*MoveCamera
;注視点移動
if keybuf.VK_LEFT = 1 : targetx += 20
if keybuf.VK_RIGHT = 1 : targetx -= 20
if keybuf.VK_UP = 1 : targety += 20
if keybuf.VK_DOWN = 1 : targety -= 20
;カメラ位置移動(接近と離れる)
if keybuf.'Q' = 1 : camposz += 20
if keybuf.'W' = 1 : camposz -= 20
E3DSetCameraPos camposx, camposy, camposz ;カメラ座標を設定
E3DSetCameraTarget targetx, targety, targetz, 0, 1, 0
return
;/////////////////
;
; モーションの再生
;
*PlayMotion
E3DSetNewPose hsid1 ;カレントのモーションを進ませる。
frameno1 = stat ;次に再生するフレーム番号
if keybuf.'Z' = 1 : E3DSetMotionKind hsid1, mk1_punch ;パンチ+回転アクション
if keybuf.'X' = 1 : E3DSetMotionKind hsid1, mk1_kick ;キック
if keybuf.'C' = 1 : E3DSetMotionKind hsid1, mk1_act1 ;回転アクション
if keybuf.'V' = 1 : E3DSetMotionKind hsid1, mk1_defense : fdef=1 ;しゃがむ
if keybuf.'B' = 1 : E3DSetMotionKind hsid1, mk1_win ;勝利のポーズ
if keybuf.'N' = 1 : E3DSetMotionKind hsid1, mk1_final ;ノックアウト
E3DGetMotionKind hsid1, curmk1 ;カレントのモーション番号
newmk1 = curmk1
;各モーションの終了
; if (curmk1 = mk1_punch)&(frameno1 >= max1_punch) : newmk1 = mk1_idling この行はパンチのみのとき有効にする。
if (curmk1 = mk1_kick)&(frameno1 >= max1_kick) : newmk1 = mk1_idling
if (curmk1 = mk1_act1)&(frameno1 >= max1_act1) : newmk1 = mk1_idling
if (curmk1 = mk1_defense)&(frameno1 >= max1_defense)&(fdef=1) : fdef = 0
if (curmk1 = mk1_defense)&(frameno1 <= 0)&(fdef=0) : newmk1 = mk1_idling
if (curmk1 = mk1_win)&(frameno1 >= max1_win) : newmk1 = mk1_idling
if (curmk1 = mk1_final)&(frameno1 >= max1_final) : newmk1 = mk1_idling
if newmk1 != curmk1 : E3DSetMotionKind hsid1, newmk1 ;モーションを変更
return
|