mirror of https://github.com/zeldaret/tp.git
1778 lines
58 KiB
C++
1778 lines
58 KiB
C++
#if DEBUG
|
||
|
||
#include "d/d_debug_camera.h"
|
||
#include "d/d_event_data.h"
|
||
#include "d/d_debug_viewer.h"
|
||
#include "d/d_com_inf_game.h"
|
||
#include "f_ap/f_ap_game.h"
|
||
#include "JSystem/JUtility/JUTDbPrint.h"
|
||
#include "JSystem/JUtility/JUTReport.h"
|
||
|
||
namespace zevwork {
|
||
const int CutMaxNum = 32;
|
||
const int DataMaxNum = 0x100;
|
||
const int FDataMaxNum = 0x200;
|
||
const int IDataMaxNum = 0x100;
|
||
const int SDataMaxNum = 0x100;
|
||
|
||
const int WorkSize = (sizeof(event_binary_data_header) - 8) +
|
||
sizeof(dEvDtEvent_DBG_c) +
|
||
sizeof(dEvDtStaff_DBG_c) +
|
||
sizeof(dEvDtStaff_DBG_c) +
|
||
(sizeof(dEvDtCut_c) * CutMaxNum) +
|
||
(sizeof(dEvDtData_DBG_c) * DataMaxNum) +
|
||
(sizeof(f32) * FDataMaxNum) +
|
||
(sizeof(int) * IDataMaxNum) +
|
||
(sizeof(char) * SDataMaxNum);
|
||
u8* WorkBuffer;
|
||
};
|
||
|
||
dDbgCamera_c dDbgCamera;
|
||
|
||
dDbgCamKey_c::~dDbgCamKey_c() {}
|
||
|
||
namespace {
|
||
cXyz rel2wld(cXyz* param_0, fopAc_ac_c* actor) {
|
||
if (actor == NULL) {
|
||
OS_REPORT("debug camera: error: actor NULL in rel2wld() \n");
|
||
return cXyz::Zero;
|
||
}
|
||
|
||
cSGlobe sp18(*param_0);
|
||
sp18.U(cSAngle(actor->shape_angle.y) + sp18.U());
|
||
|
||
return actor->attention_info.position + sp18.Xyz();
|
||
}
|
||
|
||
cXyz wld2rel(cXyz* param_0, fopAc_ac_c* actor) {
|
||
if (actor == NULL) {
|
||
OS_REPORT("debug camera: error: actor NULL in wld2rel() \n");
|
||
return cXyz::Zero;
|
||
}
|
||
|
||
cSGlobe sp18(*param_0 - actor->attention_info.position);
|
||
sp18.U(sp18.U() - cSAngle(actor->shape_angle.y));
|
||
|
||
return sp18.Xyz();
|
||
}
|
||
|
||
inline fpc_ProcID ActorID(fopAc_ac_c* actor) {
|
||
return fopAcM_GetID(actor);
|
||
}
|
||
|
||
inline fopAc_ac_c* Actor(fpc_ProcID id) {
|
||
return fopAcM_SearchByID(id);
|
||
}
|
||
}
|
||
|
||
dDbgCamSetup_c::dDbgCamSetup_c() {
|
||
mpDbgCam = NULL;
|
||
|
||
mMoveSpeed = 20.0f;
|
||
mMoveTurbo = 400.0f;
|
||
mFovyTick = 2.5;
|
||
mMoveParallelShift = 10.0f;
|
||
mRotateSpeed = 20.0f;
|
||
mTransAccel = 0.1f;
|
||
mRotAccel = 0.01;
|
||
mMoveMax = 100.0f;
|
||
mUnkMax = 2000.0f;
|
||
mRotateMax = 30.0f;
|
||
|
||
mCenterCross = 400.0f;
|
||
mCenterBall = 20.0f;
|
||
mCenterMarker = 1;
|
||
|
||
mActorSrchType = 0;
|
||
mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
|
||
mFlag = 0;
|
||
mFlag |= (u16)0x8000;
|
||
|
||
mPosX = 40;
|
||
mPosY = 320;
|
||
|
||
mGazePoint.x = 0.0f;
|
||
mGazePoint.y = 0.0f;
|
||
mGazePoint.z = 0.0f;
|
||
|
||
mPerspective.x = 0.0f;
|
||
mPerspective.y = 0.0f;
|
||
mPerspective.z = 0.0f;
|
||
|
||
mAngle = 0.0f;
|
||
|
||
field_0x68.set(0.0f, 1.0f, 0.0f);
|
||
}
|
||
|
||
void dDbgCamSetup_c::Init(dDbgCamera_c* i_dbgCamera) {
|
||
// "Debug Camera"
|
||
m_childNo = mDoHIO_CREATE_CHILD("デバッグカメラ", this);
|
||
mpDbgCam = i_dbgCamera;
|
||
}
|
||
|
||
void dDbgCamSetup_c::Finish() {
|
||
mDoHIO_DELETE_CHILD(m_childNo);
|
||
}
|
||
|
||
f32 dDbgCamSetup_c::Translate(f32 param_0) {
|
||
f32 var_f31 = mMoveSpeed * param_0;
|
||
|
||
f32 var_f30;
|
||
if (var_f31 > mMoveMax) {
|
||
var_f30 = mMoveMax;
|
||
} else {
|
||
var_f30 = var_f31;
|
||
}
|
||
|
||
return var_f30;
|
||
}
|
||
|
||
s16 dDbgCamSetup_c::Rotate(f32 param_0) {
|
||
f32 var_f31 = mRotateSpeed * param_0;
|
||
|
||
f32 var_f30;
|
||
if (var_f31 > mRotateMax) {
|
||
var_f30 = mRotateMax;
|
||
} else {
|
||
var_f30 = var_f31;
|
||
}
|
||
|
||
return cAngle::d2s(var_f30);
|
||
}
|
||
|
||
f32 dDbgCamSetup_c::FlatMove(f32 param_0) {
|
||
f32 var_f31 = mMoveParallelShift * param_0;
|
||
|
||
f32 var_f30;
|
||
if (var_f31 > mMoveMax) {
|
||
var_f30 = mMoveMax;
|
||
} else {
|
||
var_f30 = var_f31;
|
||
}
|
||
|
||
return var_f30;
|
||
}
|
||
|
||
f32 dDbgCamSetup_c::Turbo(f32 param_0) {
|
||
f32 var_f31 = mMoveTurbo * param_0;
|
||
|
||
f32 var_f30;
|
||
if (var_f31 > mUnkMax) {
|
||
var_f30 = mUnkMax;
|
||
} else {
|
||
var_f30 = var_f31;
|
||
}
|
||
|
||
return var_f30;
|
||
}
|
||
|
||
static int search_actor(fopAc_ac_c* actor, void* data) {
|
||
dDbgCamSetup_c* camsetup = (dDbgCamSetup_c*)data;
|
||
|
||
cXyz sp18 = dDbgCamera.Center() - actor->attention_info.position;
|
||
if (sp18.abs() < camsetup->mActorSrchRange) {
|
||
camsetup->mActorSrchRange = sp18.abs();
|
||
camsetup->mActorID = ActorID(actor);
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
void dDbgCamSetup_c::genMessage(JORMContext* mctx) {
|
||
mctx->genLabel("- カメラ位置表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genCheckBox(" 現在位置", &mFlag, 4, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genCheckBox(" (補正前)", &mFlag, 8, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("- ヒットポリゴン表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genCheckBox(" 壁あたり", &mFlag, 0x10, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- 移動", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" スピード", &mMoveSpeed, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 最大", &mMoveMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" ターボ", &mMoveTurbo, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 最大", &mUnkMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 平行移動", &mMoveParallelShift, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 加速度", &mTransAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- 回転", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" スピード", &mRotateSpeed, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 最大", &mRotateMax, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 加速度", &mRotAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- 画角", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" スピード", &mFovyTick, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- センターマーカ", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 線の長さ", &mCenterCross, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 球の大きさ", &mCenterBall, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->startRadioButton("表示", &mCenterMarker, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF);
|
||
mctx->genRadioButtonItem("常に表示", 3, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->genRadioButtonItem("動くと表示", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->genRadioButtonItem("常に非表示", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->endRadioButton();
|
||
|
||
mctx->genLabel("- 情報表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genCheckBox(" 有効", &mFlag, 0x8000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 表示位置 X", &mPosX, 0, 640, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" Y", &mPosY, 0, 480, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- 座標系", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->startRadioButton("基準", &mActorSrchType, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF);
|
||
mctx->genRadioButtonItem("絶対座標", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->genRadioButtonItem("プレイヤー相対座標", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->genRadioButtonItem("指定アクター相対座標", 2, 0, 0xFFFF, 0xFFFF, 0x80, 0x10);
|
||
mctx->endRadioButton();
|
||
mctx->genButton(" 更新 ", 0x66, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("- イベント", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genButton(" 保存 ", 0x68, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("- 座標指定", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 注視点 X", &mGazePoint.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF,
|
||
0x200, 0x18);
|
||
mctx->genSlider(" Y", &mGazePoint.y, -100000.0f, 100000.0f, 0, NULL, 0xFFFF,
|
||
0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" Z", &mGazePoint.z, -100000.0f, 100000.0f, 0, NULL, 0xFFFF,
|
||
0xFFFF, 0x200, 0x18);
|
||
mctx->genButton(" 更新 ", 0x69, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 視点 X", &mPerspective.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF,
|
||
0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" Y", &mPerspective.y, -100000.0f, 100000.0f, 0, NULL,
|
||
0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" Z", &mPerspective.z, -100000.0f, 100000.0f, 0, NULL,
|
||
0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genButton(" 更新 ", 0x6A, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genSlider(" 画角 ", &mAngle, 0.0f, 180.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genButton(" 更新 ", 0x6B, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
|
||
}
|
||
|
||
void dDbgCamera_c::InitlChk() {
|
||
mLchkNum = 0;
|
||
}
|
||
|
||
int dDbgCamera_c::SetlChk(dBgS_LinChk lchk) {
|
||
if (mLchkNum <= 1) {
|
||
mLchk[mLchkNum] = lchk;
|
||
return ++mLchkNum;
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
void dDbgCamSetup_c::listenPropertyEvent(const JORPropertyEvent* property) {
|
||
int var_r27 = 0;
|
||
JORReflexible::listenPropertyEvent(property);
|
||
JORMContext* mctx = attachJORMContext(8);
|
||
|
||
switch ((u32)property->id) {
|
||
case 0x66:
|
||
mActorSrchRange = 10000000.0f;
|
||
mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
|
||
switch (mActorSrchType) {
|
||
case 1: {
|
||
fopAc_ac_c* player = dComIfGp_getPlayer(dComIfGp_getCameraPlayer1ID(0));
|
||
mActorID = ActorID(player);
|
||
break;
|
||
}
|
||
case 2:
|
||
fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, this);
|
||
break;
|
||
}
|
||
break;
|
||
case 0x68:
|
||
mpDbgCam->WriteZevData();
|
||
break;
|
||
case 0x69:
|
||
if (mActorID == fpcM_ERROR_PROCESS_ID_e) {
|
||
mpDbgCam->Center(mGazePoint);
|
||
} else {
|
||
mpDbgCam->Center(wld2rel(&mGazePoint, Actor(mActorID)));
|
||
}
|
||
break;
|
||
case 0x6A:
|
||
if (mActorID == fpcM_ERROR_PROCESS_ID_e) {
|
||
mpDbgCam->Eye(mPerspective);
|
||
} else {
|
||
mpDbgCam->Eye(wld2rel(&mPerspective, Actor(mActorID)));
|
||
}
|
||
break;
|
||
case 0x6B:
|
||
mpDbgCam->Fovy(mAngle);
|
||
break;
|
||
}
|
||
}
|
||
|
||
int dDbgCamera_c::moveTool() {
|
||
f32 substick_x = mDoCPd_c::getSubStickX3D(mPadNo);
|
||
f32 substick_y = mDoCPd_c::getSubStickY(mPadNo);
|
||
int sp4C = field_0xc00;
|
||
|
||
if (mDoCPd_c::getHoldA(mPadNo)) {
|
||
if (field_0xc0c != 0) {
|
||
field_0xc00 = 6;
|
||
} else {
|
||
field_0xc00 = 0;
|
||
}
|
||
} else if (mDoCPd_c::getHoldB(mPadNo)) {
|
||
if (field_0xc0c != 0) {
|
||
field_0xc00 = 7;
|
||
} else {
|
||
field_0xc00 = 1;
|
||
}
|
||
} else if (mDoCPd_c::getSubStickValue(mPadNo) > 0.001f) {
|
||
field_0xc00 = 3;
|
||
} else {
|
||
field_0xc00 = 18;
|
||
}
|
||
|
||
if (field_0xc00 != 18) {
|
||
if (field_0xc00 != sp4C) {
|
||
field_0xc10 = 0.1f;
|
||
} else {
|
||
field_0xc10 += field_0xc10 * mCamSetup.TransAccel();
|
||
}
|
||
} else {
|
||
field_0xc10 = 0.0f;
|
||
}
|
||
|
||
int sp48 = field_0xc04;
|
||
f32 stick_x = mDoCPd_c::getStickX3D(mPadNo);
|
||
f32 stick_y = mDoCPd_c::getStickY(mPadNo);
|
||
|
||
if (mDoCPd_c::getTrigY(mPadNo)) {
|
||
field_0xc04 = 16;
|
||
} else if (mDoCPd_c::getTrigX(mPadNo)) {
|
||
field_0xc04 = 17;
|
||
} else if (mDoCPd_c::getTrigLeft(mPadNo)) {
|
||
if (field_0x54 == 0) {
|
||
field_0xc04 = 4;
|
||
} else if (field_0x54 == 1) {
|
||
field_0xc04 = 10;
|
||
} else if (field_0x54 == 2) {
|
||
field_0xc04 = 14;
|
||
}
|
||
field_0xc1c = 0;
|
||
} else if (mDoCPd_c::getHoldLeft(mPadNo)) {
|
||
if (field_0xc1c++ > 20) {
|
||
if (field_0x54 == 0) {
|
||
field_0xc04 = 4;
|
||
} else if (field_0x54 == 1) {
|
||
field_0xc04 = 10;
|
||
} else if (field_0x54 == 2) {
|
||
field_0xc04 = 14;
|
||
}
|
||
} else {
|
||
field_0xc04 = 18;
|
||
}
|
||
} else if (mDoCPd_c::getTrigRight(mPadNo)) {
|
||
if (field_0x54 == 0) {
|
||
field_0xc04 = 5;
|
||
} else if (field_0x54 == 1) {
|
||
field_0xc04 = 11;
|
||
} else if (field_0x54 == 2) {
|
||
field_0xc04 = 15;
|
||
}
|
||
field_0xc1c = 0;
|
||
} else if (mDoCPd_c::getHoldRight(mPadNo)) {
|
||
if (field_0xc1c++ > 20) {
|
||
if (field_0x54 == 0) {
|
||
field_0xc04 = 5;
|
||
} else if (field_0x54 == 1) {
|
||
field_0xc04 = 11;
|
||
} else if (field_0x54 == 2) {
|
||
field_0xc04 = 15;
|
||
}
|
||
} else {
|
||
field_0xc04 = 18;
|
||
}
|
||
} else if (mDoCPd_c::getStickValue(mPadNo) > 0.001f) {
|
||
field_0xc04 = 8;
|
||
} else {
|
||
field_0xc04 = 18;
|
||
}
|
||
|
||
if (field_0xc04 != 18) {
|
||
if (field_0xc04 != sp48) {
|
||
field_0xc14 = 0.1f;
|
||
} else {
|
||
field_0xc14 += field_0xc14 * mCamSetup.RotAccel();
|
||
}
|
||
} else {
|
||
field_0xc14 = 0.0f;
|
||
}
|
||
|
||
switch (field_0xc04) {
|
||
case 12:
|
||
if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) {
|
||
mRunKey.mAction = dDbgCam_KeyAction_NOACTION;
|
||
} else {
|
||
mRunKey.mAction--;
|
||
}
|
||
break;
|
||
case 13:
|
||
if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) {
|
||
mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM;
|
||
} else {
|
||
mRunKey.mAction++;
|
||
}
|
||
break;
|
||
case 14:
|
||
if (field_0x58 > 0) {
|
||
field_0x58--;
|
||
if (mActionKey[field_0x58] != '-') {
|
||
mRunKey = mKeys[field_0x58];
|
||
if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
fopAc_ac_c* sp3C = Actor(mRunKey.mActorInfo.id);
|
||
if (sp3C != NULL) {
|
||
mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp3C);
|
||
mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp3C);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 15:
|
||
if (field_0x58 < 31) {
|
||
field_0x58++;
|
||
if (mActionKey[field_0x58] != '-') {
|
||
mRunKey = mKeys[field_0x58];
|
||
if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
fopAc_ac_c* sp38 = Actor(mRunKey.mActorInfo.id);
|
||
if (sp38 != NULL) {
|
||
mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp38);
|
||
mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp38);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 16:
|
||
if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) {
|
||
OSReport(" <data name=\"Center\" type=\"xyz\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mRunKey.mCenter.x, mRunKey.mCenter.y, mRunKey.mCenter.z);
|
||
OSReport(" <data name=\"Eye\" type=\"xyz\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mRunKey.mEye.x, mRunKey.mEye.y, mRunKey.mEye.z);
|
||
OSReport(" <data name=\"Fovy\" type=\"float\">");
|
||
OSReport("%.3f</data>\n", mRunKey.mFovy);
|
||
OSReport(" <data name=\"Bank\" type=\"float\">");
|
||
OSReport("%.3f</data>\n", mRunKey.mBank);
|
||
}
|
||
|
||
if (mActionKey[field_0x58] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION) {
|
||
int var_r27 = field_0x58;
|
||
for (; var_r27 < 31; var_r27++) {
|
||
if (mActionKey[var_r27] == '-') {
|
||
break;
|
||
}
|
||
}
|
||
|
||
while (var_r27 > field_0x58) {
|
||
mActionKey[var_r27] = mActionKey[var_r27 - 1];
|
||
mKeys[var_r27] = mKeys[var_r27 - 1];
|
||
var_r27--;
|
||
}
|
||
}
|
||
|
||
mActionKey[field_0x58] = ActionSymbol(mRunKey.mAction);
|
||
mKeys[field_0x58] = mRunKey;
|
||
|
||
if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
fopAc_ac_c* actor = Actor(mRunKey.mActorInfo.id);
|
||
if (actor != NULL) {
|
||
mKeys[field_0x58].mCenter = wld2rel(&mRunKey.mCenter, actor);
|
||
mKeys[field_0x58].mEye = wld2rel(&mRunKey.mEye, actor);
|
||
}
|
||
}
|
||
|
||
if (mActionKey[field_0x58 + 1] == '-') {
|
||
field_0x58++;
|
||
}
|
||
break;
|
||
case 17:
|
||
if (mActionKey[field_0x58] != '-' && (mActionKey[field_0x58 + 1] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION)) {
|
||
int var_r29 = field_0x58 + 1;
|
||
for (; var_r29 < 33; var_r29++) {
|
||
if (var_r29 == 0x20) {
|
||
mActionKey[var_r29 - 1] = '-';
|
||
mKeys[var_r29 - 1] = PlaneKey();
|
||
} else {
|
||
mActionKey[var_r29 - 1] = mActionKey[var_r29];
|
||
mKeys[var_r29 - 1] = mKeys[var_r29];
|
||
}
|
||
|
||
if (mActionKey[var_r29] == '-') {
|
||
break;
|
||
}
|
||
}
|
||
} else {
|
||
mActionKey[field_0x58] = '-';
|
||
mKeys[field_0x58] = PlaneKey();
|
||
}
|
||
|
||
mRunKey.mCenter = mKeys[field_0x58].mCenter;
|
||
break;
|
||
}
|
||
|
||
if (mCmdMode == 3) {
|
||
fopAc_ac_c* sp2C = dComIfGp_getPlayer(0);
|
||
/* if (this->unk730 != 0x3E7) {
|
||
&field_0x704 = &sp2C->unk558
|
||
this->unk730 = 0x3E7;
|
||
} else {
|
||
(sp15C, (Vec* ) &sp2C->unk558);
|
||
&mRunKey.mCenter += sp15C
|
||
&field_0x704 = &sp2C->unk558
|
||
} */
|
||
} else {
|
||
// this->unk730 = 3;
|
||
}
|
||
|
||
cXyz* var_r28;
|
||
cXyz* sp30;
|
||
f32 temp_f31;
|
||
f32 var_f30;
|
||
f32 var_f29;
|
||
if (field_0xc08 != 0) {
|
||
var_r28 = &mRunKey.mCenter;
|
||
sp30 = &mRunKey.mEye;
|
||
var_f30 = -1.0f;
|
||
var_f29 = 1.0f;
|
||
} else {
|
||
var_r28 = &mRunKey.mEye;
|
||
sp30 = &mRunKey.mCenter;
|
||
var_f30 = 1.0f;
|
||
var_f29 = -1.0f;
|
||
}
|
||
|
||
field_0x44.Val(*sp30 - *var_r28);
|
||
|
||
switch (field_0xc00) {
|
||
case 2:
|
||
*var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30));
|
||
|
||
if (field_0xc0c != 0) {
|
||
*var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30));
|
||
}
|
||
break;
|
||
case 0:
|
||
*var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30));
|
||
break;
|
||
case 1:
|
||
*var_r28 = *var_r28 - (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30));
|
||
break;
|
||
case 3: {
|
||
f32 temp_f26 = fabsf(substick_x);
|
||
f32 temp_f1_2 = fabsf(substick_y);
|
||
|
||
if (field_0xc0c == 0 || temp_f26 < temp_f1_2) {
|
||
cXyz sp1B0(0.0f, 1.0f, 0.0f);
|
||
*var_r28 = *var_r28 + (sp1B0 * mCamSetup.FlatMove(field_0xc10 * substick_y));
|
||
}
|
||
|
||
if (field_0xc0c == 0 || temp_f26 > temp_f1_2) {
|
||
cSGlobe sp58(1.0f, cSAngle::_0, field_0x44.U() + cSAngle::_90);
|
||
temp_f31 = var_f30 * (field_0xc10 * substick_x);
|
||
*var_r28 = *var_r28 - (sp58.Xyz() * mCamSetup.FlatMove(temp_f31));
|
||
}
|
||
break;
|
||
}
|
||
case 6: {
|
||
temp_f31 = field_0x44.R();
|
||
field_0x44.R(temp_f31 - (0.1f * (temp_f31 * field_0xc10)));
|
||
|
||
if (field_0x44.R() < 10.0f) {
|
||
field_0x44.R(10.0f);
|
||
}
|
||
break;
|
||
}
|
||
case 7:
|
||
temp_f31 = field_0x44.R();
|
||
field_0x44.R(temp_f31 + (0.1f * (temp_f31 * field_0xc10)));
|
||
break;
|
||
}
|
||
|
||
if (mRunKey.mActorInfo.id != mCamSetup.mActorID) {
|
||
fopAc_ac_c* actor = Actor(mCamSetup.mActorID);
|
||
if (actor != NULL) {
|
||
mRunKey.mActorInfo.id = mCamSetup.mActorID;
|
||
fopAcM_getNameString(actor, mRunKey.mActorInfo.name);
|
||
} else {
|
||
mRunKey.mActorInfo.id = mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
}
|
||
}
|
||
|
||
u8 sp8 = 1;
|
||
switch (field_0xc04) {
|
||
case 4:
|
||
mRunKey.mFovy -= 0.1f * mCamSetup.FovyTick();
|
||
if (mRunKey.mFovy < 1.0f) {
|
||
mRunKey.mFovy = 1.0f;
|
||
}
|
||
break;
|
||
case 5:
|
||
mRunKey.mFovy += 0.1f * mCamSetup.FovyTick();
|
||
if (mRunKey.mFovy > 179.0f) {
|
||
mRunKey.mFovy = 179.0f;
|
||
}
|
||
break;
|
||
case 10:
|
||
mRunKey.mBank += cDegree(mCamSetup.FovyTick()) * 0.1f;
|
||
break;
|
||
case 11:
|
||
mRunKey.mBank -= cDegree(mCamSetup.FovyTick()) * 0.1f;
|
||
break;
|
||
case 8:
|
||
s16 temp_r26 = mCamSetup.Rotate(var_f29 * (stick_x * field_0xc14));
|
||
field_0x44.U(field_0x44.U() + temp_r26);
|
||
|
||
temp_r26 = mCamSetup.Rotate(var_f29 * (stick_y * field_0xc14));
|
||
field_0x44.V(field_0x44.V() + temp_r26);
|
||
}
|
||
|
||
if (sp8 != 0) {
|
||
*sp30 = *var_r28 + field_0x44.Xyz();
|
||
}
|
||
|
||
cSGlobe sp50(mRunKey.mEye - mRunKey.mCenter);
|
||
mUp.set(0.0f, 1.0f, 0.0f);
|
||
return 1;
|
||
}
|
||
|
||
int dDbgCamera_c::cmdTool() {
|
||
if (mDoCPd_c::getTrigRight(mPadNo)) {
|
||
if (mCmdMode >= 3) {
|
||
mCmdMode = 0;
|
||
} else {
|
||
mCmdMode++;
|
||
}
|
||
} else if (mDoCPd_c::getTrigLeft(mPadNo)) {
|
||
if (mCmdMode <= 0) {
|
||
mCmdMode = 3;
|
||
} else {
|
||
mCmdMode--;
|
||
}
|
||
}
|
||
|
||
if (!mIsPlaying) {
|
||
switch (mCmdMode) {
|
||
case 1:
|
||
if (mDoCPd_c::getTrigA(mPadNo)) {
|
||
mIsPlaying = true;
|
||
field_0x704.field_0x0 = 0;
|
||
field_0x704.field_0x4 = 0;
|
||
makeZevData();
|
||
}
|
||
break;
|
||
case 2:
|
||
if (mDoCPd_c::getTrigA(mPadNo)) {
|
||
printZevData();
|
||
}
|
||
break;
|
||
case 0:
|
||
if (mDoCPd_c::getTrigA(mPadNo)) {
|
||
mCamSetup.mActorSrchRange = 10000000.0f;
|
||
mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, &mCamSetup);
|
||
|
||
fopAc_ac_c* actor = Actor(mCamSetup.mActorID);
|
||
if (actor != NULL) {
|
||
mRunKey.mActorInfo.id = mCamSetup.mActorID;
|
||
fopAcM_getNameString(actor, mRunKey.mActorInfo.name);
|
||
} else {
|
||
mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e;
|
||
mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
}
|
||
} else if (mDoCPd_c::getTrigB(mPadNo)) {
|
||
mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e;
|
||
mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e;
|
||
}
|
||
break;
|
||
case 3:
|
||
if (mDoCPd_c::getTrigY(mPadNo)) {
|
||
mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position;
|
||
// field_0x704 = mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position;
|
||
// this->unk730 = 3;
|
||
}
|
||
/* fallthrough */
|
||
default:
|
||
return 1;
|
||
}
|
||
} else if (dComIfGp_event_runCheck() == 0) {
|
||
mIsPlaying = false;
|
||
}
|
||
|
||
if (mIsPlaying) {
|
||
field_0x704.field_0x4++;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
int dDbgCamera_c::makeZevData() {
|
||
int keyNo;
|
||
int spline_keyNo;
|
||
int sp48;
|
||
int spline_keyNum;
|
||
|
||
int size = 0;
|
||
int spline_timer;
|
||
int sp38 = 0;
|
||
|
||
field_0xb14 = 0;
|
||
|
||
if (zevwork::WorkBuffer == NULL) {
|
||
zevwork::WorkBuffer = new u8[zevwork::WorkSize];
|
||
if (zevwork::WorkBuffer == NULL) {
|
||
OSReport("debug camera: memory allocate error!! %d byte\n", zevwork::WorkSize);
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
OSReport("debug camera: making demo data...\n");
|
||
|
||
event_binary_data_header* header = (event_binary_data_header*)(zevwork::WorkBuffer + size);
|
||
size += sizeof(event_binary_data_header) - 8;
|
||
|
||
header->cutNum = 0;
|
||
dEvDtEvent_DBG_c* event = (dEvDtEvent_DBG_c*)(zevwork::WorkBuffer + size);
|
||
header->eventTop = size;
|
||
header->eventNum = 1;
|
||
size += sizeof(dEvDtEvent_DBG_c);
|
||
event->Init();
|
||
strcpy(event->mName, "_DebugCamera");
|
||
event->mStaff[0] = 0;
|
||
event->mStaff[1] = 1;
|
||
event->mNStaff = 2;
|
||
|
||
dEvDtStaff_DBG_c* camera_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size);
|
||
header->staffTop = size;
|
||
header->staffNum = 2;
|
||
size += sizeof(dEvDtStaff_DBG_c);
|
||
camera_staff->Init();
|
||
strcpy(camera_staff->mName, "CAMERA");
|
||
camera_staff->mType = dEvDtStaff_c::TYPE_CAMERA;
|
||
camera_staff->mIndex = 0;
|
||
camera_staff->mStartCut = 1;
|
||
camera_staff->mFlagID = sp38++;
|
||
|
||
dEvDtStaff_DBG_c* all_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size);
|
||
size += sizeof(dEvDtStaff_DBG_c);
|
||
all_staff->Init();
|
||
strcpy(all_staff->mName, "ALL");
|
||
all_staff->mType = dEvDtStaff_c::TYPE_ALL;
|
||
all_staff->mIndex = 1;
|
||
all_staff->mStartCut = 0;
|
||
all_staff->mFlagID = sp38++;
|
||
|
||
dEvDtCut_DBG_c* cut = (dEvDtCut_DBG_c*)(zevwork::WorkBuffer + size);
|
||
header->cutTop = size;
|
||
header->cutNum = 0;
|
||
size += sizeof(dEvDtCut_c) * zevwork::CutMaxNum;
|
||
dEvDtCut_DBG_c* prev_cut = NULL;
|
||
cut->Init();
|
||
strcpy(cut->mName, "DUMMY");
|
||
cut->mIndex = header->cutNum++;
|
||
cut->mFlagId = sp38++;
|
||
event->mFlags[0] = cut->mFlagId;
|
||
cut++;
|
||
|
||
dEvDtData_DBG_c* pdata = (dEvDtData_DBG_c*)(zevwork::WorkBuffer + size);
|
||
header->dataTop = size;
|
||
header->dataNum = 0;
|
||
size += sizeof(dEvDtData_DBG_c) * zevwork::DataMaxNum;
|
||
|
||
f32* fdata = (f32*)(zevwork::WorkBuffer + size);
|
||
header->fDataTop = size;
|
||
header->fDataNum = 0;
|
||
size += sizeof(f32) * zevwork::FDataMaxNum;
|
||
|
||
int* idata = (int*)(zevwork::WorkBuffer + size);
|
||
header->iDataTop = size;
|
||
header->iDataNum = 0;
|
||
size += sizeof(int) * zevwork::IDataMaxNum;
|
||
|
||
char* sdata = (char*)(zevwork::WorkBuffer + size);
|
||
header->sDataTop = size;
|
||
header->sDataNum = 0;
|
||
size += sizeof(char) * zevwork::SDataMaxNum;
|
||
|
||
if (size > zevwork::WorkSize) {
|
||
OSReport("debug camera: too big data!! %d > %d byte\n", size, zevwork::WorkSize);
|
||
return 0;
|
||
}
|
||
|
||
int sp14 = 0;
|
||
int sp10;
|
||
|
||
for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) {
|
||
cut->Init();
|
||
strcpy(cut->mName, ActionName(mKeys[keyNo].mAction));
|
||
cut->mDataTop = header->dataNum;
|
||
|
||
switch (mKeys[keyNo].mAction) {
|
||
case dDbgCam_KeyAction_FIXEDFRM:
|
||
case dDbgCam_KeyAction_UNITRANS:
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "RelActor");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_STRING;
|
||
pdata->mDataIndex = sp14;
|
||
pdata->mNumber = 1;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
strcpy(sdata, mKeys[keyNo].mActorInfo.name);
|
||
sp48 = strlen(mKeys[keyNo].mActorInfo.name) + 1;
|
||
header->sDataNum++;
|
||
sdata += sp48;
|
||
sp14 += sp48;
|
||
}
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Center");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_VEC;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = 3;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
*fdata++ = mKeys[keyNo].mCenter.x;
|
||
*fdata++ = mKeys[keyNo].mCenter.y;
|
||
*fdata++ = mKeys[keyNo].mCenter.z;
|
||
header->fDataNum += 3;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Eye");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_VEC;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = 3;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
*fdata++ = mKeys[keyNo].mEye.x;
|
||
*fdata++ = mKeys[keyNo].mEye.y;
|
||
*fdata++ = mKeys[keyNo].mEye.z;
|
||
header->fDataNum += 3;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Fovy");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_FLOAT;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = 1;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
*fdata++ = mKeys[keyNo].mFovy;
|
||
header->fDataNum += 1;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Bank");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_FLOAT;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = 1;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
*fdata++ = mKeys[keyNo].mBank;
|
||
header->fDataNum += 1;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Timer");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_INT;
|
||
pdata->mDataIndex = header->iDataNum;
|
||
pdata->mNumber = 1;
|
||
pdata++;
|
||
|
||
*idata++ = mKeys[keyNo].mTimer;
|
||
header->iDataNum += 1;
|
||
|
||
field_0xb14 += mKeys[keyNo].mTimer;
|
||
break;
|
||
case dDbgCam_KeyAction_BSPLINE:
|
||
spline_timer = 0;
|
||
sp48 = 0;
|
||
|
||
int sp8;
|
||
sp8 = spline_keyNum = keyNo;
|
||
for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) {
|
||
if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) {
|
||
break;
|
||
}
|
||
|
||
sp48++;
|
||
spline_timer += mKeys[spline_keyNum].mTimer;
|
||
}
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "RelActor");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_STRING;
|
||
pdata->mDataIndex = sp14;
|
||
pdata->mNumber = 1;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
strcpy(sdata, mKeys[keyNo].mActorInfo.name);
|
||
sp10 = strlen(mKeys[keyNo].mActorInfo.name) + 1;
|
||
header->sDataNum += 1;
|
||
|
||
sdata += sp10;
|
||
sp14 += sp10;
|
||
}
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Centers");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_VEC;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = sp48 * 3;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
*fdata++ = mKeys[spline_keyNo].mCenter.x;
|
||
*fdata++ = mKeys[spline_keyNo].mCenter.y;
|
||
*fdata++ = mKeys[spline_keyNo].mCenter.z;
|
||
}
|
||
|
||
header->fDataNum += sp48 * 3;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Eyes");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_VEC;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = sp48 * 3;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
*fdata++ = mKeys[spline_keyNo].mEye.x;
|
||
*fdata++ = mKeys[spline_keyNo].mEye.y;
|
||
*fdata++ = mKeys[spline_keyNo].mEye.z;
|
||
}
|
||
|
||
header->fDataNum += sp48 * 3;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Fovys");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_FLOAT;
|
||
pdata->mDataIndex = header->fDataNum;
|
||
pdata->mNumber = sp48;
|
||
pdata->mNext = header->dataNum;
|
||
pdata++;
|
||
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
*fdata++ = mKeys[spline_keyNo].mFovy;
|
||
}
|
||
|
||
header->fDataNum += sp48;
|
||
|
||
pdata->Init();
|
||
strcpy(pdata->mName, "Timer");
|
||
pdata->mIndex = header->dataNum++;
|
||
pdata->mType = dEvDtData_c::TYPE_INT;
|
||
pdata->mDataIndex = header->iDataNum;
|
||
pdata->mNumber = 1;
|
||
pdata++;
|
||
|
||
*idata++ = spline_timer;
|
||
header->iDataNum += 1;
|
||
|
||
field_0xb14 += spline_timer;
|
||
|
||
keyNo += sp48;
|
||
}
|
||
|
||
cut->mIndex = header->cutNum++;
|
||
cut->mFlagId = sp38++;
|
||
|
||
if (prev_cut != NULL) {
|
||
cut->mFlags[0] = prev_cut->mFlagId;
|
||
prev_cut->mNext = cut->mIndex;
|
||
}
|
||
|
||
prev_cut = cut;
|
||
event->mFlags[0] = cut->mFlagId;
|
||
cut++;
|
||
}
|
||
|
||
if (header->cutNum > zevwork::CutMaxNum) {
|
||
OSReport("debug camera: too many cuts: %d > %d: broken event data\n", header->cutNum, zevwork::CutMaxNum);
|
||
return 0;
|
||
}
|
||
|
||
if (header->dataNum > zevwork::DataMaxNum) {
|
||
OSReport("debug camera: too many data: %d > %d: broken event data\n", header->dataNum, zevwork::DataMaxNum);
|
||
return 0;
|
||
}
|
||
|
||
if (header->fDataNum > zevwork::FDataMaxNum) {
|
||
OSReport("debug camera: too many fdata: %d > %d: broken event data\n", header->fDataNum, zevwork::FDataMaxNum);
|
||
return 0;
|
||
}
|
||
|
||
if (header->fDataNum > zevwork::IDataMaxNum) {
|
||
OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->iDataNum, zevwork::IDataMaxNum);
|
||
return 0;
|
||
}
|
||
|
||
if (header->sDataNum > zevwork::SDataMaxNum) {
|
||
OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->sDataNum, zevwork::SDataMaxNum);
|
||
return 0;
|
||
}
|
||
|
||
if (header->cutNum != 0) {
|
||
OSReport(" cut %d \n", header->cutNum);
|
||
OSReport(" data %d \n", header->dataNum);
|
||
OSReport(" float %d \n", header->fDataNum);
|
||
OSReport(" integer %d \n", header->iDataNum);
|
||
OSReport(" string %d \n", header->sDataNum);
|
||
|
||
dEvM_HIO_c& hio = dComIfGp_getPEvtManager()->getEventHIO();
|
||
hio.setDebugCameraData(zevwork::WorkBuffer);
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
void dDbgCamera_c::printZevData() {
|
||
OSReport("\n");
|
||
OSReport("<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n\n");
|
||
OSReport("<!--\n △ \n △△ Game Cube Zelda - ");
|
||
OSReport("Camera Tool Event Data \n ▼▼ \n ▼ \n-->\n");
|
||
OSReport("<event version=\"2.0\">\n");
|
||
OSReport(" <sequence name=\"???\" finish=\"CAMERA\">\n");
|
||
OSReport(" <staff name=\"CAMERA\" type=\"CAMERA\">\n");
|
||
|
||
int keyNo;
|
||
int spline_keyNo, spline_keyNum, spline_timer;
|
||
for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) {
|
||
switch (mKeys[keyNo].mAction) {
|
||
case dDbgCam_KeyAction_FIXEDFRM:
|
||
OSReport(" <cut name=\"Key%02d\" type=\"FIXEDFRM\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
OSReport(" <data name=\"RelActor\" type=\"STRING\">");
|
||
OSReport("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
OSReport(" <data name=\"Center\" type=\"XYZ\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z);
|
||
|
||
OSReport(" <data name=\"Eye\" type=\"XYZ\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z);
|
||
|
||
OSReport(" <data name=\"Fovy\" type=\"FLOAT\">");
|
||
OSReport("%.3f</data>\n", mKeys[keyNo].mFovy);
|
||
|
||
OSReport(" <data name=\"Bank\" type=\"FLOAT\">");
|
||
OSReport("%.3f</data>\n", mKeys[keyNo].mBank);
|
||
|
||
OSReport(" <data name=\"Timer\" type=\"INTEGER\">");
|
||
OSReport("%d</data>\n", mKeys[keyNo].mTimer);
|
||
|
||
OSReport(" </cut>\n");
|
||
break;
|
||
case dDbgCam_KeyAction_UNITRANS:
|
||
OSReport(" <cut name=\"Key%02d\" type=\"UNITRANS\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
OSReport(" <data name=\"RelActor\" type=\"STRING\">");
|
||
OSReport("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
OSReport(" <data name=\"Center\" type=\"XYZ\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z);
|
||
|
||
OSReport(" <data name=\"Eye\" type=\"XYZ\">");
|
||
OSReport("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z);
|
||
|
||
OSReport(" <data name=\"Fovy\" type=\"FLOAT\">");
|
||
OSReport("%.3f</data>\n", mKeys[keyNo].mFovy);
|
||
|
||
OSReport(" <data name=\"Bank\" type=\"FLOAT\">");
|
||
OSReport("%.3f</data>\n", mKeys[keyNo].mBank);
|
||
|
||
OSReport(" <data name=\"Timer\" type=\"INTEGER\">");
|
||
OSReport("%d</data>\n", mKeys[keyNo].mTimer);
|
||
|
||
OSReport(" </cut>\n");
|
||
break;
|
||
case dDbgCam_KeyAction_BSPLINE:
|
||
spline_keyNum = keyNo;
|
||
for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) {
|
||
if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
OSReport(" <cut name=\"Key%02d\" type=\"BSPLINE\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
OSReport(" <data name=\"RelActor\" type=\"STRING\">");
|
||
OSReport("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
OSReport(" <data name=\"Centers\" type=\"XYZ\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z);
|
||
}
|
||
OSReport(" </data>\n");
|
||
|
||
OSReport(" <data name=\"Eyes\" type=\"XYZ\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z);
|
||
}
|
||
OSReport(" </data>\n");
|
||
|
||
OSReport(" <data name=\"Fovys\" type=\"FLOAT\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
OSReport(" %.3f\n", mKeys[spline_keyNo].mFovy);
|
||
}
|
||
OSReport(" </data>\n");
|
||
|
||
spline_timer = 0;
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
spline_timer += mKeys[spline_keyNo].mTimer;
|
||
}
|
||
OSReport(" <data name=\"Timer\" type=\"INTEGER\">%d</data>\n", spline_timer);
|
||
|
||
OSReport(" </cut>\n");
|
||
keyNo = spline_keyNum - 1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
OSReport(" </staff>\n");
|
||
OSReport(" <staff name=\"ALL\" type=\"EXTRA\">\n");
|
||
OSReport(" <cut name=\"dummy\" type=\"DUMMY\"/>\n");
|
||
OSReport(" </staff>\n");
|
||
OSReport(" </sequence>\n");
|
||
OSReport("</event>\n");
|
||
OSReport("\n");
|
||
}
|
||
|
||
void dDbgCamera_c::WriteZevData() {
|
||
OpenFile();
|
||
|
||
PrintFile("\n");
|
||
PrintFile("<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n\n");
|
||
PrintFile("<!--\n △ \n △△ Game Cube Zelda - ");
|
||
PrintFile("Camera Tool Event Data \n ▼▼ \n ▼ \n-->\n");
|
||
PrintFile("<event version=\"2.0\">\n");
|
||
PrintFile(" <sequence name=\"???\" finish=\"CAMERA\">\n");
|
||
PrintFile(" <staff name=\"CAMERA\" type=\"CAMERA\">\n");
|
||
|
||
int keyNo;
|
||
int spline_keyNo, spline_keyNum, spline_timer;
|
||
for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) {
|
||
switch (mKeys[keyNo].mAction) {
|
||
case dDbgCam_KeyAction_FIXEDFRM:
|
||
PrintFile(" <cut name=\"Key%02d\" type=\"FIXEDFRM\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
PrintFile(" <data name=\"RelActor\" type=\"STRING\">");
|
||
PrintFile("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
PrintFile(" <data name=\"Center\" type=\"XYZ\">");
|
||
PrintFile("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z);
|
||
|
||
PrintFile(" <data name=\"Eye\" type=\"XYZ\">");
|
||
PrintFile("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z);
|
||
|
||
PrintFile(" <data name=\"Fovy\" type=\"FLOAT\">");
|
||
PrintFile("%.3f</data>\n", mKeys[keyNo].mFovy);
|
||
|
||
PrintFile(" <data name=\"Bank\" type=\"FLOAT\">");
|
||
PrintFile("%.3f</data>\n", mKeys[keyNo].mBank);
|
||
|
||
PrintFile(" <data name=\"Timer\" type=\"INTEGER\">");
|
||
PrintFile("%d</data>\n", mKeys[keyNo].mTimer);
|
||
|
||
PrintFile(" </cut>\n");
|
||
break;
|
||
case dDbgCam_KeyAction_UNITRANS:
|
||
PrintFile(" <cut name=\"Key%02d\" type=\"UNITRANS\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
PrintFile(" <data name=\"RelActor\" type=\"STRING\">");
|
||
PrintFile("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
PrintFile(" <data name=\"Center\" type=\"XYZ\">");
|
||
PrintFile("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z);
|
||
|
||
PrintFile(" <data name=\"Eye\" type=\"XYZ\">");
|
||
PrintFile("%.3f %.3f %.3f</data>\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z);
|
||
|
||
PrintFile(" <data name=\"Fovy\" type=\"FLOAT\">");
|
||
PrintFile("%.3f</data>\n", mKeys[keyNo].mFovy);
|
||
|
||
PrintFile(" <data name=\"Bank\" type=\"FLOAT\">");
|
||
PrintFile("%.3f</data>\n", mKeys[keyNo].mBank);
|
||
|
||
PrintFile(" <data name=\"Timer\" type=\"INTEGER\">");
|
||
PrintFile("%d</data>\n", mKeys[keyNo].mTimer);
|
||
|
||
PrintFile(" </cut>\n");
|
||
break;
|
||
case dDbgCam_KeyAction_BSPLINE:
|
||
spline_keyNum = keyNo;
|
||
for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) {
|
||
if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
PrintFile(" <cut name=\"Key%02d\" type=\"BSPLINE\">\n", keyNo);
|
||
|
||
if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
PrintFile(" <data name=\"RelActor\" type=\"STRING\">");
|
||
PrintFile("%s</data>\n", mKeys[keyNo].mActorInfo.name);
|
||
}
|
||
|
||
PrintFile(" <data name=\"Centers\" type=\"XYZ\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z);
|
||
}
|
||
PrintFile(" </data>\n");
|
||
|
||
PrintFile(" <data name=\"Eyes\" type=\"XYZ\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z);
|
||
}
|
||
PrintFile(" </data>\n");
|
||
|
||
PrintFile(" <data name=\"Fovys\" type=\"FLOAT\">\n");
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
PrintFile(" %.3f\n", mKeys[spline_keyNo].mFovy);
|
||
}
|
||
PrintFile(" </data>\n");
|
||
|
||
spline_timer = 0;
|
||
for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) {
|
||
spline_timer += mKeys[spline_keyNo].mTimer;
|
||
}
|
||
PrintFile(" <data name=\"Timer\" type=\"INTEGER\">%d</data>\n", spline_timer);
|
||
|
||
PrintFile(" </cut>\n");
|
||
keyNo = spline_keyNum - 1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
PrintFile(" </staff>\n");
|
||
PrintFile(" <staff name=\"ALL\" type=\"EXTRA\">\n");
|
||
PrintFile(" <cut name=\"dummy\" type=\"DUMMY\"/>\n");
|
||
PrintFile(" </staff>\n");
|
||
PrintFile(" </sequence>\n");
|
||
PrintFile("</event>\n");
|
||
PrintFile("\n");
|
||
|
||
CloseFile();
|
||
}
|
||
|
||
void dDbgCamera_c::monitor() {
|
||
s32 pos_x = mCamSetup.mPosX;
|
||
s32 pos_y = mCamSetup.mPosY;
|
||
s32 y_offset = 15;
|
||
|
||
if (!mIsPlaying) {
|
||
cXyz center(mRunKey.mCenter);
|
||
cXyz eye(mRunKey.mEye);
|
||
fopAc_ac_c* actor = NULL;
|
||
f32 u = field_0x44.U().Degree();
|
||
|
||
if (mRunKey.mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) {
|
||
actor = Actor(mRunKey.mActorInfo.id);
|
||
if (actor != NULL) {
|
||
cSGlobe sp70(mRunKey.mCenter - actor->attention_info.position);
|
||
sp70.U(sp70.U() - cSAngle(actor->shape_angle.y));
|
||
center = sp70.Xyz();
|
||
|
||
cSGlobe sp68(mRunKey.mEye - actor->attention_info.position);
|
||
sp68.U(sp68.U() - cSAngle(actor->shape_angle.y));
|
||
eye = sp68.Xyz();
|
||
|
||
u = cSAngle(field_0x44.U() - actor->shape_angle.y).Degree();
|
||
}
|
||
}
|
||
|
||
Report(pos_x, pos_y, 1, "CTR%11.3f%11.3f%11.3f", center.x, center.y, center.z);
|
||
Report(pos_x, pos_y += y_offset, 1, "EYE%11.3f%11.3f%11.3f", eye.x, eye.y, eye.z);
|
||
Report(pos_x, pos_y += y_offset, 1, "RVU %10.3f %10.3f %10.3f", field_0x44.R(), field_0x44.V().Degree(), u);
|
||
Report(pos_x, pos_y += y_offset, 1, "FVY %10.3f %s %s %s", mRunKey.mFovy, field_0xc08 ? "[L]" : "[ ]", field_0xc0c ? "[R]" : "[ ]", field_0xc08 ? "CTR->EYE" : "EYE->CTR");
|
||
Report(pos_x - 13, pos_y + (y_offset * field_0x54), 7, "*");
|
||
|
||
if (actor != NULL) {
|
||
Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @%7.7s", mRunKey.mBank, &mRunKey.mActorInfo.name);
|
||
} else {
|
||
Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @ WORLD", mRunKey.mBank);
|
||
}
|
||
|
||
Report(pos_x, pos_y += y_offset, 1, "KEY %s", mActionKey);
|
||
|
||
char spC0[32];
|
||
|
||
int var_r27;
|
||
for (var_r27 = 0; var_r27 < ARRAY_SIZE(spC0); var_r27++) {
|
||
if (var_r27 == field_0x58) {
|
||
spC0[var_r27] = '_';
|
||
var_r27++;
|
||
break;
|
||
}
|
||
|
||
spC0[var_r27] = ' ';
|
||
}
|
||
|
||
spC0[var_r27] = 0;
|
||
Report(pos_x, pos_y, 7, " %s", spC0);
|
||
Report(pos_x, pos_y += y_offset, 1, "CMD BASE PLAY TERM FIXP");
|
||
|
||
*spC0 = 0;
|
||
|
||
for (var_r27 = 0; var_r27 < 4; var_r27++) {
|
||
if (var_r27 == mCmdMode) {
|
||
strcat(spC0, "____ ");
|
||
break;
|
||
}
|
||
|
||
strcat(spC0, " ");
|
||
}
|
||
|
||
Report(pos_x, pos_y, 7, " %s", spC0);
|
||
Report(pos_x, pos_y += y_offset, 1, "ACT %c %8.8s", ActionSymbol(mRunKey.mAction), ActionName(mRunKey.mAction));
|
||
Report(pos_x, pos_y += y_offset, 1, "TIM %3d", mRunKey.mTimer);
|
||
} else {
|
||
Report(pos_x, pos_y, 1, "CNT %4d/%4d", field_0x704.field_0x4 - 1, field_0xb14);
|
||
}
|
||
}
|
||
|
||
bool dDbgCamera_c::showCenterMarker() {
|
||
switch (mCamSetup.CenterMarker()) {
|
||
case 1:
|
||
if (field_0xc00 != 18 || field_0xc04 != 18 || field_0xc08 != 0 || field_0xc0c != 0) {
|
||
field_0xc18 = 60;
|
||
}
|
||
|
||
if (field_0xc18 != 0) {
|
||
field_0xc18--;
|
||
}
|
||
|
||
return field_0xc18 != 0;
|
||
case 3:
|
||
return true;
|
||
case 2:
|
||
case 0:
|
||
default:
|
||
return false;
|
||
}
|
||
}
|
||
|
||
bool dDbgCamera_c::showCameraPos() {
|
||
return mCamSetup.CheckFlag(4);
|
||
}
|
||
|
||
bool dDbgCamera_c::showIdlCameraPos() {
|
||
return mCamSetup.CheckFlag(8);
|
||
}
|
||
|
||
void dDbgCamera_c::Init(dCamera_c* i_dbgCamera) {
|
||
mpCamera = i_dbgCamera;
|
||
mRunKey = PlaneKey();
|
||
mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM;
|
||
field_0x58 = 0;
|
||
|
||
int i;
|
||
for (i = 0; i < ARRAY_SIZE(mKeys); i++) {
|
||
mKeys[i] = PlaneKey();
|
||
}
|
||
|
||
memset(mActionKey, '-', sizeof(mActionKey));
|
||
field_0x80 = 0;
|
||
field_0x54 = 0;
|
||
mCmdMode = 0;
|
||
mCamSetup.Init(this);
|
||
}
|
||
|
||
void dDbgCamera_c::Finish() {
|
||
mCamSetup.Finish();
|
||
}
|
||
|
||
void dDbgCamera_c::Reset(dCamera_c* i_dbgCamera) {
|
||
mpCamera = i_dbgCamera;
|
||
mPadNo = PAD_3;
|
||
field_0x50 = 0;
|
||
mUp = i_dbgCamera->Up();
|
||
|
||
if (mActionKey[field_0x58] == '-') {
|
||
mRunKey = PlaneKey();
|
||
}
|
||
|
||
field_0xc04 = field_0xc00 = 18;
|
||
field_0xc10 = field_0xc14 = 0.0f;
|
||
field_0xc08 = field_0xc0c = 0;
|
||
field_0xc18 = 0;
|
||
mCmdMode = 0;
|
||
mIsPlaying = false;
|
||
}
|
||
|
||
int dDbgCamera_c::Run() {
|
||
int rt;
|
||
|
||
if (mDoCPd_c::getHoldLockL(mPadNo)) {
|
||
field_0xc08 = 1;
|
||
} else {
|
||
field_0xc08 = 0;
|
||
}
|
||
|
||
if (mDoCPd_c::getHoldLockR(mPadNo)) {
|
||
field_0xc0c = 1;
|
||
} else {
|
||
field_0xc0c = 0;
|
||
}
|
||
|
||
if (mDoCPd_c::getTrigUp(mPadNo)) {
|
||
if (field_0x54 == 0) {
|
||
field_0x54 = 5;
|
||
} else {
|
||
field_0x54--;
|
||
}
|
||
} else if (mDoCPd_c::getTrigDown(mPadNo)) {
|
||
if (field_0x54 >= 5) {
|
||
field_0x54 = 0;
|
||
} else {
|
||
field_0x54++;
|
||
}
|
||
}
|
||
|
||
if (field_0x54 == 4) {
|
||
if (mDoCPd_c::getTrigLeft(mPadNo)) {
|
||
if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) {
|
||
mRunKey.mAction = dDbgCam_KeyAction_NOACTION;
|
||
} else {
|
||
mRunKey.mAction--;
|
||
}
|
||
} else if (mDoCPd_c::getTrigRight(mPadNo)) {
|
||
if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) {
|
||
mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM;
|
||
} else {
|
||
mRunKey.mAction++;
|
||
}
|
||
}
|
||
} else if (field_0x54 == 5) {
|
||
if (mDoCPd_c::getTrigRight(mPadNo)) {
|
||
mRunKey.mTimer++;
|
||
field_0xc1c = 0;
|
||
} else if (mDoCPd_c::getHoldRight(mPadNo)) {
|
||
if (field_0xc1c++ > 20) {
|
||
mRunKey.mTimer++;
|
||
}
|
||
} else if (mDoCPd_c::getTrigLeft(mPadNo)) {
|
||
mRunKey.mTimer--;
|
||
field_0xc1c = 0;
|
||
} else if (mDoCPd_c::getHoldLeft(mPadNo)) {
|
||
if (field_0xc1c++ > 20) {
|
||
mRunKey.mTimer--;
|
||
}
|
||
}
|
||
} else if (field_0x54 == 3) {
|
||
rt = cmdTool();
|
||
} else {
|
||
rt = moveTool();
|
||
}
|
||
|
||
if (mCamSetup.CheckFlag(0x8000)) {
|
||
monitor();
|
||
}
|
||
|
||
return rt;
|
||
}
|
||
|
||
int dDbgCamera_c::DrawShape() {
|
||
int rt = 0;
|
||
|
||
if (showCameraPos()) {
|
||
cXyz sp2F0[] = {
|
||
cXyz(5.0f, 6.5f, 10.0f),
|
||
cXyz(-5.0f, 6.5f, 10.0f),
|
||
cXyz(5.0f, -7.5f, 10.0f),
|
||
cXyz(-5.0f, -7.5f, 10.0f),
|
||
cXyz(5.0f, 6.5f, -10.0f),
|
||
cXyz(-5.0f, 6.5f, -10.0f),
|
||
cXyz(5.0f, -5.0f, -10.0f),
|
||
cXyz(-5.0f, -5.0f, -10.0f),
|
||
};
|
||
|
||
cXyz sp290[] = {
|
||
cXyz(3.0f, 3.0f, 10.0f),
|
||
cXyz(-3.0f, 3.0f, 10.0f),
|
||
cXyz(3.0f, -3.0f, 10.0f),
|
||
cXyz(-3.0f, -3.0f, 10.0f),
|
||
cXyz(3.0f, 3.0f, 16.0f),
|
||
cXyz(-3.0f, 3.0f, 16.0f),
|
||
cXyz(3.0f, -3.0f, 16.0f),
|
||
cXyz(-3.0f, -3.0f, 16.0f),
|
||
};
|
||
|
||
cXyz sp1A0[] = {
|
||
cXyz(80.0f, 0.0f, 0.0f),
|
||
cXyz(-80.0f, 0.0f, 0.0f),
|
||
cXyz(0.0f, 80.0f, 0.0f),
|
||
cXyz(0.0f, -80.0f, 0.0f),
|
||
};
|
||
|
||
dCamera_c* camera = dCam_getBody();
|
||
|
||
GXColor sp6C = {0xFF, 0xDC, 0x80, 0x96};
|
||
GXColor sp68 = {0xDC, 0xFF, 0x80, 0x96};
|
||
GXColor sp64 = {0xFF, 0xFF, 0xFF, 0x32};
|
||
|
||
cXyz cam_center = camera->Center();
|
||
cXyz cam_eye = camera->Eye();
|
||
cSAngle cam_u(camera->U());
|
||
cSAngle cam_v(camera->V());
|
||
|
||
int i;
|
||
for (i = 0; i < 8; i++) {
|
||
sp2F0[i] = dCamMath::xyzRotateX(sp2F0[i], cam_v);
|
||
sp2F0[i] = dCamMath::xyzRotateY(sp2F0[i], cam_u);
|
||
sp2F0[i] += cam_eye;
|
||
|
||
sp290[i] = dCamMath::xyzRotateX(sp290[i], cam_v);
|
||
sp290[i] = dCamMath::xyzRotateY(sp290[i], cam_u);
|
||
sp290[i] += cam_eye;
|
||
}
|
||
|
||
dDbVw_drawCube8pOpa(sp2F0, sp6C);
|
||
dDbVw_drawCube8pOpa(sp290, sp6C);
|
||
dDbVw_drawSphereXlu(cam_eye, 3.0f, sp68, 1);
|
||
dDbVw_drawSphereXlu(cam_center, 5.0f, sp68, 1);
|
||
|
||
for (i = 0; i < 4; i++) {
|
||
sp1A0[i] = dCamMath::xyzRotateX(sp1A0[i], cam_v);
|
||
sp1A0[i] = dCamMath::xyzRotateY(sp1A0[i], cam_u);
|
||
sp1A0[i] += cam_center;
|
||
}
|
||
|
||
cSGlobe sp78(80.0f + camera->R(), -cam_v, cam_u);
|
||
dDbVw_drawLineXlu(cam_eye, cam_center, sp64, 1, 0xC);
|
||
dDbVw_drawLineXlu(sp1A0[0], sp1A0[1], sp64, 1, 0xC);
|
||
dDbVw_drawLineXlu(sp1A0[2], sp1A0[3], sp64, 1, 0xC);
|
||
rt = 1;
|
||
}
|
||
|
||
if (showIdlCameraPos()) {
|
||
cXyz sp230[] = {
|
||
cXyz(5.0f, 6.5f, 10.0f),
|
||
cXyz(-5.0f, 6.5f, 10.0f),
|
||
cXyz(5.0f, -7.5f, 10.0f),
|
||
cXyz(-5.0f, -7.5f, 10.0f),
|
||
cXyz(5.0f, 6.5f, -10.0f),
|
||
cXyz(-5.0f, 6.5f, -10.0f),
|
||
cXyz(5.0f, -5.0f, -10.0f),
|
||
cXyz(-5.0f, -5.0f, -10.0f),
|
||
};
|
||
|
||
cXyz sp1D0[] = {
|
||
cXyz(3.0f, 3.0f, 10.0f),
|
||
cXyz(-3.0f, 3.0f, 10.0f),
|
||
cXyz(3.0f, -3.0f, 10.0f),
|
||
cXyz(-3.0f, -3.0f, 10.0f),
|
||
cXyz(3.0f, 3.0f, 16.0f),
|
||
cXyz(-3.0f, 3.0f, 16.0f),
|
||
cXyz(3.0f, -3.0f, 16.0f),
|
||
cXyz(-3.0f, -3.0f, 16.0f),
|
||
};
|
||
|
||
cXyz sp170[] = {
|
||
cXyz(80.0f, 0.0f, 0.0f),
|
||
cXyz(-80.0f, 0.0f, 0.0f),
|
||
cXyz(0.0f, 80.0f, 0.0f),
|
||
cXyz(0.0f, -80.0f, 0.0f),
|
||
};
|
||
|
||
dCamera_c* camera = dCam_getBody();
|
||
|
||
GXColor sp60 = {0x80, 0xFF, 0xDC, 0x5A};
|
||
GXColor sp5C = {0x80, 0xDC, 0xFF, 0x5A};
|
||
GXColor sp58 = {0xFF, 0xFF, 0xFF, 0x1E};
|
||
|
||
cXyz cam_icenter = camera->iCenter();
|
||
cXyz cam_ieye = camera->iEye();
|
||
cSAngle cam_iu(camera->iU());
|
||
cSAngle cam_iv(camera->iV());
|
||
|
||
int i;
|
||
for (i = 0; i < 8; i++) {
|
||
sp230[i] = dCamMath::xyzRotateX(sp230[i], cam_iv);
|
||
sp230[i] = dCamMath::xyzRotateY(sp230[i], cam_iu);
|
||
sp230[i] += cam_ieye;
|
||
|
||
sp1D0[i] = dCamMath::xyzRotateX(sp1D0[i], cam_iv);
|
||
sp1D0[i] = dCamMath::xyzRotateY(sp1D0[i], cam_iu);
|
||
sp1D0[i] += cam_ieye;
|
||
}
|
||
|
||
dDbVw_drawCube8pOpa(sp230, sp60);
|
||
dDbVw_drawCube8pOpa(sp1D0, sp60);
|
||
dDbVw_drawSphereXlu(cam_ieye, 3.0f, sp5C, 1);
|
||
dDbVw_drawSphereXlu(cam_icenter, 5.0f, sp5C, 1);
|
||
|
||
for (i = 0; i < 4; i++) {
|
||
sp170[i] = dCamMath::xyzRotateX(sp170[i], cam_iv);
|
||
sp170[i] = dCamMath::xyzRotateY(sp170[i], cam_iu);
|
||
sp170[i] += cam_icenter;
|
||
}
|
||
|
||
cSGlobe sp70(80.0f + camera->iR(), -cam_iv, cam_iu);
|
||
cam_icenter = cam_ieye + sp70.Xyz();
|
||
|
||
dDbVw_drawLineXlu(cam_ieye, cam_icenter, sp58, 1, 0xC);
|
||
dDbVw_drawLineXlu(sp170[0], sp170[01], sp58, 1, 0xC);
|
||
dDbVw_drawLineXlu(sp170[2], sp170[3], sp58, 1, 0xC);
|
||
rt = 1;
|
||
}
|
||
|
||
if (showCenterMarker()) {
|
||
f32 cam_cross = mCamSetup.CenterCloss();
|
||
GXColor color = {0x80, 0x80, 0xFF, 0x80};
|
||
cXyz sp134;
|
||
cXyz sp128;
|
||
|
||
sp134 = mRunKey.mCenter;
|
||
sp128 = mRunKey.mCenter;
|
||
sp134.x += cam_cross;
|
||
sp128.x -= cam_cross;
|
||
dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC);
|
||
|
||
sp134.x -= cam_cross;
|
||
sp128.x += cam_cross;
|
||
sp134.y += cam_cross;
|
||
sp128.y -= cam_cross;
|
||
dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC);
|
||
|
||
sp134.y -= cam_cross;
|
||
sp128.y += cam_cross;
|
||
sp134.z += cam_cross;
|
||
sp128.z -= cam_cross;
|
||
dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC);
|
||
|
||
cam_cross = mCamSetup.CenterBall();
|
||
|
||
GXColor sp50 = {0xFF, 0x80, 0x80, 0x80};
|
||
if (field_0xc08 != 0) {
|
||
sp50.g = 0xFF;
|
||
}
|
||
|
||
if (field_0xc0c != 0) {
|
||
sp50.b = 0xFF;
|
||
}
|
||
|
||
dDbVw_drawSphereXlu(mRunKey.mCenter, cam_cross, sp50, 1);
|
||
rt = 1;
|
||
}
|
||
|
||
if (mCamSetup.CheckFlag(0x10)) {
|
||
switch (mLchkNum) {
|
||
case 2:
|
||
// dComIfG_Bgsp().DrawPoly(mLchk[1], l_color2);
|
||
/* fallthrough */
|
||
case 1:
|
||
// dComIfG_Bgsp().DrawPoly(mLchk[0], l_color1);
|
||
break;
|
||
}
|
||
}
|
||
|
||
return rt;
|
||
}
|
||
|
||
JUtility::TColor get_color(JUtility::TColor color) {
|
||
static JUtility::TColor colors[] = {
|
||
JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF),
|
||
JUtility::TColor(0xFF, 0xFF, 0xC0, 0xFF),
|
||
JUtility::TColor(0xFF, 0xC0, 0xC0, 0xFF),
|
||
JUtility::TColor(0xC0, 0xFF, 0xC0, 0xFF),
|
||
JUtility::TColor(0xC0, 0xC0, 0xFF, 0xFF),
|
||
JUtility::TColor(0xFF, 0xFF, 0x80, 0xFF),
|
||
JUtility::TColor(0xFF, 0x80, 0x80, 0xFF),
|
||
JUtility::TColor(0xC0, 0xFF, 0x80, 0xFF),
|
||
JUtility::TColor(0x80, 0x80, 0xFF, 0xFF),
|
||
};
|
||
|
||
(void)(u32)color;
|
||
int var_r30 = 1;
|
||
|
||
if (var_r30 && (u32)color < 9) {
|
||
return colors[(u32)color & ~0x80000000];
|
||
}
|
||
|
||
return color;
|
||
}
|
||
|
||
int dDbgCamera_c::Report(int x, int y, JUtility::TColor color, const char* mesg, ...) {
|
||
char buffer[0x100];
|
||
|
||
static JUtility::TColor ShadowDarkColor(0, 0, 0, 0x80);
|
||
|
||
va_list list;
|
||
va_start(list, mesg);
|
||
vsnprintf(buffer, sizeof(buffer), mesg, list);
|
||
va_end(list);
|
||
|
||
JUTDbPrint::getManager()->flush();
|
||
|
||
JUTDbPrint::getManager()->setCharColor(ShadowDarkColor);
|
||
JUTReport(x + 2, y + 2, buffer);
|
||
|
||
JUTDbPrint::getManager()->flush();
|
||
|
||
JUTDbPrint::getManager()->setCharColor(get_color(color));
|
||
JUTReport(x, y, buffer);
|
||
|
||
JUTDbPrint::getManager()->flush();
|
||
JUTDbPrint::getManager()->setCharColor(g_HIO.mColor);
|
||
return 1;
|
||
}
|
||
|
||
void dDbgCamera_c::OpenFile() {
|
||
const char ext[] = "イベントファイル(*.zev)\0*.zev\0その他のファイル(*.*)\0*.*\0";
|
||
mFile.open("dbgcam.zev", 2, ext, NULL, NULL, NULL);
|
||
}
|
||
|
||
void dDbgCamera_c::PrintFile(char* string, ...) {
|
||
char buffer[0x100];
|
||
|
||
va_list args;
|
||
va_start(args, string);
|
||
vsnprintf(buffer, sizeof(buffer), string, args);
|
||
va_end(args);
|
||
|
||
mFile.writeData(buffer, strlen(buffer));
|
||
}
|
||
|
||
void dDbgCamera_c::CloseFile() {
|
||
mFile.close();
|
||
}
|
||
|
||
#endif
|