mirror of https://github.com/zeldaret/botw.git
ksys/world: Start adding TimeMgr
This commit is contained in:
parent
461967e278
commit
e5e2427c8b
|
@ -1497,7 +1497,7 @@
|
|||
0x00000071000541d0,ActorObserverBase::m6,8,
|
||||
0x00000071000541d8,sub_71000541D8,372,_ZN5uking6action26CollaboShootingStarAreaTag33checkDerivedRuntimeTypeInfoStaticEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x000000710005434c,_ZNK4sead15RuntimeTypeInfo6DeriveIN5uking6action13AreaTagActionEE9isDerivedEPKNS0_9InterfaceE,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN5uking6action13AreaTagActionEE9isDerivedEPKNS0_9InterfaceE
|
||||
0x00000071000543d8,sub_71000543D8,140,
|
||||
0x00000071000543d8,sub_71000543D8,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys5world3JobEE9isDerivedEPKNS0_9InterfaceE
|
||||
0x0000007100054464,AI_Action_CreateDragonChallengeXLink::ctor,52,_ZN5uking6action26CreateDragonChallengeXLinkC1ERKN4ksys3act2ai10ActionBase7InitArgE
|
||||
0x0000007100054498,_ZN5uking6action26CreateDragonChallengeXLinkD1Ev,20,_ZN5uking6action26CreateDragonChallengeXLinkD1Ev
|
||||
0x00000071000544ac,_ZN5uking6action26CreateDragonChallengeXLinkD0Ev,52,_ZN5uking6action26CreateDragonChallengeXLinkD0Ev
|
||||
|
@ -89357,14 +89357,14 @@
|
|||
0x00000071010e5fc4,wm::TempMgr::rtti1,204,
|
||||
0x00000071010e6090,wm::TempMgr::rtti2,92,
|
||||
0x00000071010e60ec,wm::TempMgr::getType,8,
|
||||
0x00000071010e60f4,wm::TimeMgr::ctor,228,
|
||||
0x00000071010e61d8,wm::TimeMgr::init,36,
|
||||
0x00000071010e61fc,wm::TimeMgr::resetForStageUnload,124,
|
||||
0x00000071010e60f4,wm::TimeMgr::ctor,228,_ZN4ksys5world7TimeMgrC1Ev
|
||||
0x00000071010e61d8,wm::TimeMgr::init,36,_ZN4ksys5world7TimeMgr5init_EPN4sead4HeapE
|
||||
0x00000071010e61fc,wm::TimeMgr::resetForStageUnload,124,_ZN4ksys5world7TimeMgr19resetForStageUnloadEv
|
||||
0x00000071010e6278,wm::TimeMgr::loadInfo,388,
|
||||
0x00000071010e63fc,wm::TimeMgr::loadFlags,1632,
|
||||
0x00000071010e6a5c,wm::TimeMgr::dtor,172,
|
||||
0x00000071010e6b08,sub_71010E6B08,132,
|
||||
0x00000071010e6b8c,wm::TimeMgr::dtorDelete,180,
|
||||
0x00000071010e6a5c,wm::TimeMgr::dtor,172,_ZN4ksys5world7TimeMgrD1Ev
|
||||
0x00000071010e6b08,sub_71010E6B08,132,_ZN4sead13DelegateEventIN4ksys5world7TimeMgr11NewDayEventEED2Ev
|
||||
0x00000071010e6b8c,wm::TimeMgr::dtorDelete,180,_ZN4ksys5world7TimeMgrD0Ev
|
||||
0x00000071010e6c40,wm::TimeMgr::callBloodMoonDemo,104,
|
||||
0x00000071010e6ca8,wm::TimeMgr::isBloodyMoonProhibited,364,
|
||||
0x00000071010e6e14,wm::TimeMgr::isBloodyMoonProhibitionFlagSet,120,
|
||||
|
@ -89373,9 +89373,9 @@
|
|||
0x00000071010e7260,nullsub_4540,4,
|
||||
0x00000071010e7264,wm::TimeMgr::calc,2676,
|
||||
0x00000071010e7cd8,wm::TimeMgr::AnimalMasterFlags::calc,772,
|
||||
0x00000071010e7fdc,wm::TimeMgr::m7_null,4,
|
||||
0x00000071010e7fe0,wm::TimeMgr::m8_null,4,
|
||||
0x00000071010e7fe4,wm::TimeMgr::setNewTime,16,
|
||||
0x00000071010e7fdc,wm::TimeMgr::m7_null,4,_ZN4ksys5world7TimeMgr10calcType1_Ev
|
||||
0x00000071010e7fe0,wm::TimeMgr::m8_null,4,_ZN4ksys5world7TimeMgr10calcType2_Ev
|
||||
0x00000071010e7fe4,wm::TimeMgr::setNewTime,16,_ZN4ksys5world7TimeMgr10setNewTimeEf
|
||||
0x00000071010e7ff4,wm::TimeMgr::setTime,220,
|
||||
0x00000071010e80d0,wm::TimeMgr::isBloodyDay,124,
|
||||
0x00000071010e814c,wm::TimeMgr::getTime,72,
|
||||
|
@ -89385,11 +89385,11 @@
|
|||
0x00000071010e82b0,wm::TimeMgr::bloodMoonTonight,188,
|
||||
0x00000071010e836c,wm::getTimeOfDayTempMultiplier,176,
|
||||
0x00000071010e841c,wm::TimeMgr::getField14F,8,
|
||||
0x00000071010e8424,wm::TimeMgr::rtti1,204,
|
||||
0x00000071010e84f0,wm::TimeMgr::rtti2,92,
|
||||
0x00000071010e854c,wm::TimeMgr::getType,8,
|
||||
0x00000071010e8424,wm::TimeMgr::rtti1,204,_ZNK4ksys5world7TimeMgr27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071010e84f0,wm::TimeMgr::rtti2,92,_ZNK4ksys5world7TimeMgr18getRuntimeTypeInfoEv
|
||||
0x00000071010e854c,wm::TimeMgr::getType,8,_ZNK4ksys5world7TimeMgr7getTypeEv
|
||||
0x00000071010e8554,j__ZdlPv_1202,4,
|
||||
0x00000071010e8558,sub_71010E8558,148,
|
||||
0x00000071010e8558,sub_71010E8558,148,_ZN4sead13DelegateEventIN4ksys5world7TimeMgr11NewDayEventEED0Ev
|
||||
0x00000071010e85ec,wm::getWeatherMgr,56,
|
||||
0x00000071010e8624,sub_71010E8624,12,
|
||||
0x00000071010e8630,sub_71010E8630,12,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -1 +1,61 @@
|
|||
#include "KingSystem/World/worldTimeMgr.h"
|
||||
#include "KingSystem/GameData/gdtManager.h"
|
||||
|
||||
namespace ksys::world {
|
||||
|
||||
static_assert(timeToFloat(0, 0) == 0);
|
||||
static_assert(timeToFloat(5, 15) == 78.75);
|
||||
static_assert(timeToFloat(12, 0) == 180);
|
||||
static_assert(timeToFloat(24, 0) == 360);
|
||||
|
||||
TimeMgr::TimeMgr() {
|
||||
_20 = true;
|
||||
_21 = true;
|
||||
_22 = 0;
|
||||
_24 = false;
|
||||
mForceBloodyDay = false;
|
||||
_14b = false;
|
||||
_cc = {};
|
||||
mMoonType = MoonType::Unknown;
|
||||
}
|
||||
|
||||
void TimeMgr::init_(sead::Heap* heap) {
|
||||
mTime = DefaultTime;
|
||||
mTimeForAocFieldSkyEnv = DefaultTime;
|
||||
mTimeStep = DefaultTimeStep;
|
||||
mTimeUpdateMode = {};
|
||||
mBloodMoonTimer = 0.0;
|
||||
mBloodyEndReserveTimer = 0;
|
||||
}
|
||||
|
||||
void TimeMgr::resetForStageUnload() {
|
||||
mNewTime = -1.0;
|
||||
mNeedToHandleNewDay = false;
|
||||
mWasBloodyDay = false;
|
||||
|
||||
for (auto& entry : _30) {
|
||||
entry._0 = {};
|
||||
entry._4 = -1;
|
||||
}
|
||||
_30[9] = {};
|
||||
_30[9]._4 = -1;
|
||||
|
||||
gdt::Manager::instance()->setBool(false, mAnimalMasterCtrl.appearance_flag);
|
||||
mAnimalMasterCtrl.state = {};
|
||||
mAnimalMasterCtrl.appearance_hour = {};
|
||||
mAnimalMasterCtrl.valid_hour = {};
|
||||
mAnimalMasterCtrl.start_day_of_week = {};
|
||||
}
|
||||
|
||||
TimeMgr::~TimeMgr() = default;
|
||||
|
||||
void TimeMgr::calcType1_() {}
|
||||
|
||||
void TimeMgr::calcType2_() {}
|
||||
|
||||
void TimeMgr::setNewTime(float time) {
|
||||
if (time >= 0.0)
|
||||
mNewTime = time;
|
||||
}
|
||||
|
||||
} // namespace ksys::world
|
||||
|
|
|
@ -1,20 +1,144 @@
|
|||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <prim/seadDelegateEventSlot.h>
|
||||
#include <prim/seadEnum.h>
|
||||
#include <prim/seadSizedEnum.h>
|
||||
#include "KingSystem/GameData/gdtFlagHandle.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
#include "KingSystem/World/worldJob.h"
|
||||
|
||||
namespace ksys::world {
|
||||
|
||||
enum class TimeDivision {
|
||||
Morning_A,
|
||||
Morning_B,
|
||||
Noon_A,
|
||||
Noon_B,
|
||||
Evening_A,
|
||||
Evening_B,
|
||||
Night_A,
|
||||
Night_B,
|
||||
};
|
||||
SEAD_ENUM(TimeDivisionEnum, Morning_A,Morning_B,Noon_A,Noon_B,Evening_A,Evening_B,Night_A,Night_B)
|
||||
|
||||
enum class MoonType {
|
||||
Unknown = 0xff,
|
||||
};
|
||||
|
||||
constexpr float timeToFloat(int h, int m) {
|
||||
return float(h) * 15.0f + float(m) * (15.0f / 60.0f);
|
||||
}
|
||||
|
||||
constexpr float durationToFloat(int h, int m) {
|
||||
return timeToFloat(h, m);
|
||||
}
|
||||
|
||||
// TODO
|
||||
class TimeMgr : public Job {
|
||||
SEAD_RTTI_OVERRIDE(TimeMgr, Job)
|
||||
public:
|
||||
struct NewDayEvent {
|
||||
virtual ~NewDayEvent() = default;
|
||||
};
|
||||
|
||||
TimeMgr();
|
||||
~TimeMgr() override;
|
||||
|
||||
JobType getType() const override { return JobType::Time; }
|
||||
|
||||
void resetForStageUnload();
|
||||
void setNewTime(float time);
|
||||
|
||||
u8 _20[0x158 - 0x20];
|
||||
protected:
|
||||
void init_(sead::Heap* heap) override;
|
||||
void calc_() override;
|
||||
void calcType1_() override;
|
||||
void calcType2_() override;
|
||||
|
||||
private:
|
||||
enum class TimeUpdateMode {
|
||||
|
||||
};
|
||||
|
||||
struct AnimalMasterController {
|
||||
enum class State {
|
||||
|
||||
};
|
||||
|
||||
void calc();
|
||||
|
||||
gdt::FlagHandle appearance_flag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle existence_flag = gdt::InvalidHandle;
|
||||
State state{};
|
||||
int appearance_hour{};
|
||||
int valid_hour{};
|
||||
u8 start_day_of_week{};
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(AnimalMasterController, 0x18);
|
||||
|
||||
static constexpr float DefaultTime = timeToFloat(5, 15);
|
||||
static constexpr float DefaultTimeStep = durationToFloat(0, 1) / 30.0;
|
||||
|
||||
bool _20;
|
||||
bool _21;
|
||||
u16 _22;
|
||||
bool _24;
|
||||
TimeDivision mTimeDivision{};
|
||||
TimeDivision mTimeDivision2{};
|
||||
struct {
|
||||
std::array<bool, 4> _0;
|
||||
int _4;
|
||||
} _30[10];
|
||||
sead::DelegateEvent<NewDayEvent> mNewDaySignal;
|
||||
AnimalMasterController mAnimalMasterCtrl;
|
||||
float mTime = DefaultTime;
|
||||
float mTimeForAocFieldSkyEnv = DefaultTime;
|
||||
float mNewTime = -1.0;
|
||||
float mTimeStep = DefaultTimeStep;
|
||||
float mBloodMoonTimer = 0.0;
|
||||
float _cc;
|
||||
float _d0 = 1.0;
|
||||
gdt::FlagHandle mTimeFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mNumberOfDaysFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mTimeDivisionFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsDaytimeFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsNighttimeFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsPlayedDemo103Flag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mDemo997Flag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mFindDungeonActivatedFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsMorningAFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsMorningBFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsMoonAFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsMoonBFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsEveningAFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsEveningBFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsNightAFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsNightBFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mWaterRelicRainStopFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsGetPlayerStole2Flag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mBloodyDayFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mBloodyMoonTimerFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mBloodyEndReserveTimerFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mIsInHyruleCastleAreaFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mLastBossGanonBeastGenerateFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mWindElectricBattleStartFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mElectricRelicBattleFlag = gdt::InvalidHandle;
|
||||
gdt::FlagHandle mWindRelicBattleTimeFlag = gdt::InvalidHandle;
|
||||
int mNumberOfDays{};
|
||||
gdt::FlagHandle mBloodyMoonProhibitionFlag = gdt::InvalidHandle;
|
||||
int mBloodyEndReserveTimer{};
|
||||
bool mNeedToHandleNewDay{};
|
||||
sead::SizedEnum<TimeUpdateMode, u8> mTimeUpdateMode{};
|
||||
bool mForceBloodyDay;
|
||||
bool _14b;
|
||||
sead::SizedEnum<MoonType, u8> mMoonType;
|
||||
bool mPlayedDemo103Or997{};
|
||||
bool mFindDungeonActivated{};
|
||||
bool _14f{};
|
||||
bool mWasBloodyDayAndDayPassed{};
|
||||
bool mResetGdtOnNextSceneUnloadForBloodMoon{};
|
||||
bool mWasBloodyDay{};
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(TimeMgr, 0x158);
|
||||
|
||||
|
|
Loading…
Reference in New Issue