mirror of
https://github.com/zeldaret/ss
synced 2026-07-31 08:05:47 -04:00
d_camera_map OK
This commit is contained in:
+6
-7
@@ -72,7 +72,6 @@ dCamera_c::dCamera_c()
|
||||
mpScreen(dStageMgr_c::GetInstance()->getScreen(0)),
|
||||
mYAngle(0),
|
||||
mXZAngle(0),
|
||||
field_0xD94(0.0f),
|
||||
field_0x1F8(0),
|
||||
field_0x1FC(0),
|
||||
mFlags(0) {
|
||||
@@ -90,10 +89,10 @@ int dCamera_c::create() {
|
||||
mFlags = 0;
|
||||
mMyCameraIndex = getFromParams(0, 0xF);
|
||||
dScGame_c::setCamera(mMyCameraIndex, nullptr);
|
||||
mpCameras[0] = &mGameCam1;
|
||||
mpCameras[1] = &mGameCam2;
|
||||
mpCameras[2] = &mEventCam;
|
||||
mpCameras[3] = &mMapCam;
|
||||
mpCameras[CAM_GAME_0] = &mGameCam1;
|
||||
mpCameras[CAM_GAME_1] = &mGameCam2;
|
||||
mpCameras[CAM_EVENT] = &mEventCam;
|
||||
mpCameras[CAM_MAP] = &mMapCam;
|
||||
|
||||
for (int i = 0; i < CAM_MAX; i++) {
|
||||
if (mpCameras[i] == nullptr) {
|
||||
@@ -263,7 +262,7 @@ void dCamera_c::checkCameraChange() {
|
||||
offFlag(CAM_FLAGS_0x4);
|
||||
}
|
||||
|
||||
if (checkFlag(CAM_FLAGS_MAP) && mActiveCameraIdx == CAM_MAP && !mMapCam.fn_800932E0()) {
|
||||
if (checkFlag(CAM_FLAGS_MAP) && mActiveCameraIdx == CAM_MAP && !mMapCam.isActiveOrAnimating()) {
|
||||
offFlag(CAM_FLAGS_MAP);
|
||||
onFlag(CAM_FLAGS_0x4);
|
||||
getGameCam1()->onFlag(0x10000);
|
||||
@@ -430,7 +429,7 @@ void dCamera_c::enterMap() {
|
||||
|
||||
void dCamera_c::leaveMap() {
|
||||
if (checkFlag(CAM_FLAGS_MAP)) {
|
||||
mMapCam.fn_800932F0();
|
||||
mMapCam.startOut();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
-33
@@ -2224,7 +2224,7 @@ static const char *sPriorityGroupNames[] = {
|
||||
};
|
||||
|
||||
void dLytMapMain_c::build() {
|
||||
mIsVisible = 0;
|
||||
mIsVisible = false;
|
||||
field_0x8DB0 = 0;
|
||||
if (dScGame_c::isCurrentStage("F102")) {
|
||||
// awesome but unnecessary
|
||||
@@ -2359,7 +2359,7 @@ void dLytMapMain_c::build() {
|
||||
mAnmGroups[MAP_MAIN_ANIM_IN].unbind();
|
||||
|
||||
mAnmGroups[MAP_MAIN_ANIM_OUT].bind(false);
|
||||
field_0x8C8C = mAnmGroups[MAP_MAIN_ANIM_OUT].getLastFrame();
|
||||
mOutDuration = mAnmGroups[MAP_MAIN_ANIM_OUT].getLastFrame();
|
||||
mAnmGroups[MAP_MAIN_ANIM_OUT].unbind();
|
||||
field_0x8CAC = 0;
|
||||
mDisplayedBeaconCount = getMaxBeaconCount();
|
||||
@@ -3182,18 +3182,17 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
}
|
||||
|
||||
mMarkers.setLinkRot(link->getRotation());
|
||||
// TODO - mAng nonsense?
|
||||
field_0x8D68 = dScGame_c::getCamera(0)->getXZAngle();
|
||||
mpAllPane->SetVisible(false);
|
||||
getGlobal()->setField_0x55(field_0x8CAE);
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
switch (event) {
|
||||
case MAP_EVENT_NONE: {
|
||||
if (mRoomType != ROOMTYPE_BOSS_HOUSE && mRoomType != ROOMTYPE_SKYFIELD_INTERIOR && field_0x8CAE) {
|
||||
mCurrentMapMode = dLytMapGlobal_c::MAPMODE_ZOOM;
|
||||
mNextMapMode = mCurrentMapMode;
|
||||
mMapUpDirection = false;
|
||||
mDoCameraTransition = true;
|
||||
mCameraTransitionPossible = true;
|
||||
} else {
|
||||
if (!sSavedMapData.entries[mRoomType].isValid) {
|
||||
if (MinigameManager::isInMinigameState(MinigameManager::SPIRAL_CHARGE_TUTORIAL)) {
|
||||
@@ -3201,7 +3200,7 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
fn_80142C80(mCurrentMapMode);
|
||||
// TODO - regswap (???)
|
||||
mMapUpDirection = false;
|
||||
mDoCameraTransition = true;
|
||||
mCameraTransitionPossible = true;
|
||||
} else {
|
||||
loadMapState();
|
||||
if (mRoomType == ROOMTYPE_SKYFIELD) {
|
||||
@@ -3212,21 +3211,21 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
mMapUpDirection = true;
|
||||
}
|
||||
if (mMapUpDirection == false) {
|
||||
mDoCameraTransition = true;
|
||||
mCameraTransitionPossible = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
loadMapState();
|
||||
if (mMapUpDirection == false) {
|
||||
mDoCameraTransition = true;
|
||||
mCameraTransitionPossible = true;
|
||||
}
|
||||
}
|
||||
if (link->checkActionFlags(daPlayerActBase_c::FLG0_CRAWLING)) {
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
}
|
||||
}
|
||||
if (mRoomType == ROOMTYPE_DUNGEON) {
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3255,7 +3254,7 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
case 1: mCurrentMapMode = dLytMapGlobal_c::MAPMODE_ZOOM; break;
|
||||
}
|
||||
mMapUpDirection = true;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
break;
|
||||
}
|
||||
case MAP_EVENT_MAP_INTRO: {
|
||||
@@ -3265,7 +3264,7 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
mCurrentMapMode = dLytMapGlobal_c::MAPMODE_WORLD;
|
||||
}
|
||||
mMapUpDirection = true;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
break;
|
||||
}
|
||||
case MAP_EVENT_DUNGEON_MAP_GET:
|
||||
@@ -3278,20 +3277,20 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
case MAP_EVENT_SW_BANK_SMALL: {
|
||||
mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE;
|
||||
mMapUpDirection = true;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
break;
|
||||
}
|
||||
case MAP_EVENT_FIELD_MAP_CHANGE_5:
|
||||
case MAP_EVENT_FIELD_MAP_CHANGE_8: {
|
||||
mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE;
|
||||
mMapUpDirection = true;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
break;
|
||||
}
|
||||
case MAP_EVENT_SAVE_OBJ: {
|
||||
mCurrentMapMode = dLytMapGlobal_c::MAPMODE_PROVINCE;
|
||||
mMapUpDirection = true;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3300,13 +3299,13 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
mNextMapMode = mCurrentMapMode;
|
||||
if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE ||
|
||||
mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) {
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
}
|
||||
|
||||
if (mDoCameraTransition) {
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093380();
|
||||
if (mCameraTransitionPossible) {
|
||||
dScGame_c::getCamera(0)->getMapCam()->setCameraTransition();
|
||||
} else {
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093360();
|
||||
dScGame_c::getCamera(0)->getMapCam()->setNoCameraTransition();
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093340();
|
||||
}
|
||||
dScGame_c::getCamera(0)->enterMap();
|
||||
@@ -3349,27 +3348,27 @@ void dLytMapMain_c::setupEvent(s32 event, s32 arg1, s32 arg2) {
|
||||
|
||||
void dLytMapMain_c::close() {
|
||||
dBase_c::s_DrawControlFlags &= ~dBase_c::BASE_PROP_0x10;
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
if (mMapEvent == MAP_EVENT_NONE) {
|
||||
if (mRoomType == ROOMTYPE_FIELD || mRoomType == ROOMTYPE_SKYLOFT) {
|
||||
if (!field_0x8CAE && !mMapUpDirection) {
|
||||
mDoCameraTransition = true;
|
||||
mCameraTransitionPossible = true;
|
||||
}
|
||||
} else if (mRoomType == ROOMTYPE_DUNGEON && !field_0x8CAE && !mMapUpDirection) {
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093340();
|
||||
}
|
||||
}
|
||||
|
||||
if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE ||
|
||||
mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) {
|
||||
mDoCameraTransition = false;
|
||||
mCameraTransitionPossible = false;
|
||||
}
|
||||
|
||||
if (mDoCameraTransition) {
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093380();
|
||||
if (mCameraTransitionPossible) {
|
||||
dScGame_c::getCamera(0)->getMapCam()->setCameraTransition();
|
||||
} else {
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093360();
|
||||
dScGame_c::getCamera(0)->getMapCam()->setNoCameraTransition();
|
||||
}
|
||||
|
||||
if (mMapEvent == MAP_EVENT_NONE) {
|
||||
@@ -4088,6 +4087,10 @@ void dLytMapMain_c::setupFlags() {
|
||||
}
|
||||
}
|
||||
|
||||
void dLytMapMain_c::fn_8013B350() {
|
||||
field_0x8C84 = 1;
|
||||
}
|
||||
|
||||
void dLytMapMain_c::initializeState_In() {
|
||||
if (mMapEvent == MAP_EVENT_SAVE_OBJ) {
|
||||
displaySaveObjs();
|
||||
@@ -4096,7 +4099,7 @@ void dLytMapMain_c::initializeState_In() {
|
||||
}
|
||||
}
|
||||
|
||||
if (mDoCameraTransition || mMapEvent == MAP_EVENT_MAP_INTRO) {
|
||||
if (mCameraTransitionPossible || mMapEvent == MAP_EVENT_MAP_INTRO) {
|
||||
mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_IN];
|
||||
} else {
|
||||
mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_IN_NO_CAM];
|
||||
@@ -4108,10 +4111,11 @@ void dLytMapMain_c::initializeState_In() {
|
||||
mPinIconAggregate.setScale(getGlobal()->getZoomFrame());
|
||||
}
|
||||
void dLytMapMain_c::executeState_In() {
|
||||
mIsVisible = 1;
|
||||
mIsVisible = true;
|
||||
|
||||
dLytMapGlobal_c *global = getGlobal();
|
||||
if ((!mDoCameraTransition || !field_0x8C84) && mDoCameraTransition) {
|
||||
// ???
|
||||
if ((!mCameraTransitionPossible || !field_0x8C84) && mCameraTransitionPossible) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4596,7 +4600,7 @@ void dLytMapMain_c::initializeState_Out() {
|
||||
mPopupInfo.mStateMgr.changeState(StateID_Out);
|
||||
}
|
||||
dLytMeter_c::GetInstance()->setMeterMode(dLytMeterMain_c::MODE_MAP_INIT);
|
||||
if (mDoCameraTransition || mMapEvent == MAP_EVENT_MAP_INTRO) {
|
||||
if (mCameraTransitionPossible || mMapEvent == MAP_EVENT_MAP_INTRO) {
|
||||
mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT];
|
||||
} else {
|
||||
mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT_NO_CAM];
|
||||
@@ -4604,7 +4608,7 @@ void dLytMapMain_c::initializeState_Out() {
|
||||
|
||||
mpInOutAnmGroup->bind(false);
|
||||
mpInOutAnmGroup->setFrame(0.0f);
|
||||
field_0x8C8C = mpInOutAnmGroup->getLastFrame();
|
||||
mOutDuration = mpInOutAnmGroup->getLastFrame();
|
||||
|
||||
if (fn_80141530()) {
|
||||
dBase_c::s_NextExecuteControlFlags &= ~dBase_c::BASE_PROP_0x10;
|
||||
@@ -4620,7 +4624,7 @@ void dLytMapMain_c::executeState_Out() {
|
||||
dBase_c::s_NextExecuteControlFlags &= ~dBase_c::BASE_PROP_0x10;
|
||||
mLyt.calc();
|
||||
mpInOutAnmGroup->unbind();
|
||||
mIsVisible = 0;
|
||||
mIsVisible = false;
|
||||
mStateMgr.changeState(StateID_Invisible);
|
||||
}
|
||||
}
|
||||
@@ -5047,7 +5051,7 @@ void dLytMapMain_c::forceOut() {
|
||||
mAnmGroups[MAP_MAIN_ANIM_OUT].unbind();
|
||||
dBase_c::s_NextExecuteControlFlags &= ~dBase_c::BASE_PROP_0x10;
|
||||
dBase_c::s_DrawControlFlags &= ~dBase_c::BASE_PROP_0x10;
|
||||
dScGame_c::getCamera(0)->getMapCam()->fn_80093360();
|
||||
dScGame_c::getCamera(0)->getMapCam()->setNoCameraTransition();
|
||||
dScGame_c::getCamera(0)->leaveMap();
|
||||
mStateMgr.changeState(StateID_Invisible);
|
||||
}
|
||||
|
||||
+102
-13
@@ -6,6 +6,8 @@
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_lin_chk.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/lyt/d_lyt_map.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "toBeSorted/d_camera_math.h"
|
||||
#include "toBeSorted/deg_angle_util.h"
|
||||
@@ -86,12 +88,67 @@ mVec3_c fn_800929C0(const mVec3_c &p2, const mVec3_c &p3, dAcObjBase_c *obj) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::execute() {
|
||||
s16 unk = sHio.field_0x28;
|
||||
void dCameraMap_c::onBecomeActive() {
|
||||
mTimer = 0;
|
||||
mSourceView = mView;
|
||||
mTargetView = mView;
|
||||
if (!(sHio.field_0x3C & 0x100)) {
|
||||
mTargetView.mPosition = mTargetView.mTarget;
|
||||
}
|
||||
mTargetView.mPosition.y += sHio.field_0x08;
|
||||
mTargetView.mFov = sHio.field_0x24;
|
||||
mTargetView.mTilt = 0.0f;
|
||||
dLytMap_c::GetInstance()->doFn_8013B350();
|
||||
dPolar polar(mView.mPosition - mView.mTarget);
|
||||
field_0xC4 = polar.V.value;
|
||||
mIsMovingOut = false;
|
||||
mIsActiveOrAnimating = true;
|
||||
}
|
||||
|
||||
if ((sHio.field_0x3C & 0x200) && field_0xAC) {
|
||||
void dCameraMap_c::onBecomeInactive() {
|
||||
mIsMovingOut = true;
|
||||
dScGame_c::getCamera()->getGameCam1()->setView(mView);
|
||||
}
|
||||
|
||||
bool dCameraMap_c::create() {
|
||||
dAcPy_c *link = dAcPy_c::GetLinkM();
|
||||
if (link == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
field_0x44 = link;
|
||||
mView.mTarget = link->mPosition + mVec3_c(0.0f, 100.0f, 0.0f);
|
||||
|
||||
mVec3_c v(0.0f, 200.0f, 500.0f);
|
||||
v.rotY(link->mRotation.y - 0x8000);
|
||||
|
||||
mView.mPosition = mView.mTarget + v;
|
||||
mView.mFov = 55.0f;
|
||||
mView1 = mView;
|
||||
|
||||
field_0x3C = sHio.field_0x04;
|
||||
field_0x40 = 0.0f;
|
||||
field_0x38 = 0.0f;
|
||||
|
||||
field_0x2C = mVec3_c::Zero;
|
||||
mIsActiveOrAnimating = false;
|
||||
mIsMovingOut = true;
|
||||
field_0xB0 = 0;
|
||||
mTimer = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::remove() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::execute() {
|
||||
s16 duration = sHio.field_0x28;
|
||||
|
||||
if ((sHio.field_0x3C & 0x200) && mIsMovingOut) {
|
||||
// TODO no-op
|
||||
unk = sHio.field_0x28;
|
||||
duration = sHio.field_0x28;
|
||||
}
|
||||
field_0x40 = 1.0f;
|
||||
|
||||
@@ -107,28 +164,29 @@ bool dCameraMap_c::execute() {
|
||||
|
||||
if (sHio.field_0x3C & 0x10) {
|
||||
if (sHio.field_0x3E == 1) {
|
||||
// Reorients the main camera to point to north when opening the map without a transition... unused
|
||||
dPolar polar(mSourceView.mPosition - mSourceView.mTarget);
|
||||
polar.V.Set(0.0f);
|
||||
mSourceView.mPosition = mSourceView.mTarget + polar.toCartesian();
|
||||
}
|
||||
mTargetView = mSourceView;
|
||||
field_0xB8 = 1;
|
||||
mTimer = 1;
|
||||
}
|
||||
|
||||
if (field_0xAC != 0) {
|
||||
if (field_0xB8 > 0) {
|
||||
field_0xB8--;
|
||||
if (field_0xB8 == 0) {
|
||||
field_0xB4 = 0;
|
||||
if (mIsMovingOut) {
|
||||
if (mTimer > 0) {
|
||||
mTimer--;
|
||||
if (mTimer == 0) {
|
||||
mIsActiveOrAnimating = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (field_0xB8 < unk) {
|
||||
field_0xB8++;
|
||||
if (mTimer < duration) {
|
||||
mTimer++;
|
||||
}
|
||||
}
|
||||
|
||||
f32 f = (f32)field_0xB8 / (f32)unk;
|
||||
f32 f = (f32)mTimer / (f32)duration;
|
||||
f32 f5 = camEaseInOut(f, sHio.field_0x2C);
|
||||
f32 f6 = camEaseInOut(f, sHio.field_0x30);
|
||||
f32 f8 = f5 * 0.99f;
|
||||
@@ -146,6 +204,37 @@ bool dCameraMap_c::execute() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::vt_0x34() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::draw() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dCameraMap_c::isActiveOrAnimating() const {
|
||||
return mIsActiveOrAnimating;
|
||||
}
|
||||
|
||||
void dCameraMap_c::startOut() {
|
||||
mIsMovingOut = true;
|
||||
if (sHio.field_0x3C & 0x200) {
|
||||
mTimer = dLytMap_c::GetInstance()->getOutDuration() + 0.1f;
|
||||
}
|
||||
}
|
||||
|
||||
void dCameraMap_c::fn_80093340() {
|
||||
sHio.field_0x3E = 2;
|
||||
}
|
||||
|
||||
void dCameraMap_c::setNoCameraTransition() {
|
||||
sHio.field_0x3C |= 0x10 | 0x8;
|
||||
}
|
||||
|
||||
void dCameraMap_c::setCameraTransition() {
|
||||
sHio.field_0x3C &= ~(0x10 | 0x8);
|
||||
}
|
||||
|
||||
void dCameraMap_c::setView(const CamView &view) {
|
||||
mView1 = view;
|
||||
mView = view;
|
||||
|
||||
Reference in New Issue
Block a user