mirror of https://github.com/zeldaret/botw.git
shootingStarMgr
This commit is contained in:
parent
710c91eeff
commit
0eef5b3933
|
@ -89296,20 +89296,20 @@
|
||||||
0x00000071010dcd18,WorldMgr::Remains::ctor,276,_ZN4ksys5world6EnvMgr7RemainsC2Ev
|
0x00000071010dcd18,WorldMgr::Remains::ctor,276,_ZN4ksys5world6EnvMgr7RemainsC2Ev
|
||||||
0x00000071010dce2c,sub_71010DCE2C,12,
|
0x00000071010dce2c,sub_71010DCE2C,12,
|
||||||
0x00000071010dce38,sub_71010DCE38,12,
|
0x00000071010dce38,sub_71010DCE38,12,
|
||||||
0x00000071010dce44,wm::ShootingStarMgr::ctor,60,
|
0x00000071010dce44,wm::ShootingStarMgr::ctor,60,_ZN4ksys5world15ShootingStarMgrC1Ev
|
||||||
0x00000071010dce80,wm::ShootingStarMgr::dtor,4,
|
0x00000071010dce80,wm::ShootingStarMgr::dtor,4,_ZN4ksys5world15ShootingStarMgrD1Ev
|
||||||
0x00000071010dce84,wm::ShootingStarMgr::dtorDelete,36,
|
0x00000071010dce84,wm::ShootingStarMgr::dtorDelete,36,_ZN4ksys5world15ShootingStarMgrD0Ev
|
||||||
0x00000071010dcea8,wm::ShootingStarMgr::init,36,
|
0x00000071010dcea8,wm::ShootingStarMgr::init,36,_ZN4ksys5world15ShootingStarMgr5init_EPN4sead4HeapE
|
||||||
0x00000071010dcecc,wm::ShootingStarMgr::init_,620,
|
0x00000071010dcecc,wm::ShootingStarMgr::init_,620,_ZN4ksys5world15ShootingStarMgr12initScheduleEv!
|
||||||
0x00000071010dd138,wm::ShootingStarMgr::calc_,368,
|
0x00000071010dd138,wm::ShootingStarMgr::calc_,368,_ZN4ksys5world15ShootingStarMgr5calc_Ev
|
||||||
0x00000071010dd2a8,sub_71010DD2A8,116,
|
0x00000071010dd2a8,sub_71010DD2A8,116,_ZN4ksys5world15ShootingStarMgr15isScheduledTimeEv
|
||||||
0x00000071010dd31c,sub_71010DD31C,308,
|
0x00000071010dd31c,sub_71010DD31C,308,
|
||||||
0x00000071010dd450,spawnShootingStar,412,
|
0x00000071010dd450,spawnShootingStar,412,
|
||||||
0x00000071010dd5ec,sub_71010DD5EC,84,
|
0x00000071010dd5ec,sub_71010DD5EC,84,_ZN4ksys5world15ShootingStarMgr17resetStarPositionEv
|
||||||
0x00000071010dd640,wm::ShootingStarMgr::spawnStar,340,
|
0x00000071010dd640,wm::ShootingStarMgr::spawnStar,340,_ZN4ksys5world15ShootingStarMgr9spawnStarEv
|
||||||
0x00000071010dd794,sub_71010DD794,160,
|
0x00000071010dd794,sub_71010DD794,160,_ZN4ksys5world15ShootingStarMgr19isStarPositionValidEv
|
||||||
0x00000071010dd834,sub_71010DD834,108,
|
0x00000071010dd834,sub_71010DD834,108,_ZNK4ksys5world15ShootingStarMgr18tryGetStarPositionEPN4sead7Vector3IfEE
|
||||||
0x00000071010dd8a0,sub_71010DD8A0,88,
|
0x00000071010dd8a0,sub_71010DD8A0,88,_ZN4ksys5world15ShootingStarMgr15setStarPositionEfff
|
||||||
0x00000071010dd8f8,sub_71010DD8F8,36,
|
0x00000071010dd8f8,sub_71010DD8F8,36,
|
||||||
0x00000071010dd91c,wm::CloudMgr::ctor,16892,_ZN4ksys5world6SkyMgrC1Ev
|
0x00000071010dd91c,wm::CloudMgr::ctor,16892,_ZN4ksys5world6SkyMgrC1Ev
|
||||||
0x00000071010e1b18,sub_71010E1B18,196,_ZN4sead9SafeArrayIN4ksys5world6SkyMgr10SkyPaletteELi8EEC2Ev
|
0x00000071010e1b18,sub_71010E1B18,196,_ZN4sead9SafeArrayIN4ksys5world6SkyMgr10SkyPaletteELi8EEC2Ev
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -190,6 +190,7 @@ public:
|
||||||
mScalingMode == ScalingMode::Disabled;
|
mScalingMode == ScalingMode::Disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isDemo() const { return mIsDemo; }
|
||||||
StageType getStageType() const { return mStageType; }
|
StageType getStageType() const { return mStageType; }
|
||||||
FieldType getFieldType() const { return mFieldType; }
|
FieldType getFieldType() const { return mFieldType; }
|
||||||
ScalingMode getScalingMode() const { return mScalingMode; }
|
ScalingMode getScalingMode() const { return mScalingMode; }
|
||||||
|
|
|
@ -1 +1,160 @@
|
||||||
#include "KingSystem/World/worldShootingStarMgr.h"
|
#include "KingSystem/World/worldShootingStarMgr.h"
|
||||||
|
#include <container/seadObjArray.h>
|
||||||
|
#include <random/seadGlobalRandom.h>
|
||||||
|
#include "KingSystem/ActorSystem/actActorCreator.h"
|
||||||
|
#include "KingSystem/ActorSystem/actBaseProcHeapMgr.h"
|
||||||
|
#include "KingSystem/ActorSystem/actInstParamPack.h"
|
||||||
|
#include "KingSystem/GameData/gdtManager.h"
|
||||||
|
#include "KingSystem/World/worldManager.h"
|
||||||
|
|
||||||
|
namespace ksys::world {
|
||||||
|
|
||||||
|
static bool sScheduled = true;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
int end = 3;
|
||||||
|
int start = 21;
|
||||||
|
int unk = 4;
|
||||||
|
} sHours;
|
||||||
|
|
||||||
|
static sead::Vector3f sStarProperty{};
|
||||||
|
|
||||||
|
ShootingStarMgr::ShootingStarMgr() = default;
|
||||||
|
|
||||||
|
ShootingStarMgr::~ShootingStarMgr() = default;
|
||||||
|
|
||||||
|
void ShootingStarMgr::init_(sead::Heap* heap) {
|
||||||
|
if (Manager::instance()->isDemo())
|
||||||
|
sScheduled = false;
|
||||||
|
else
|
||||||
|
initSchedule();
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
void ShootingStarMgr::initSchedule() {
|
||||||
|
if (sHours.start >= sHours.end) {
|
||||||
|
sead::FixedObjArray<u32, 24> validHours;
|
||||||
|
|
||||||
|
if (sHours.start <= 23) {
|
||||||
|
for (int i = 0; i < 24; ++i) {
|
||||||
|
validHours.emplaceBack(sHours.start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sHours.end > 1) {
|
||||||
|
for (int i = 0; i < 23; ++i) {
|
||||||
|
validHours.emplaceBack(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto rand = sead::Random();
|
||||||
|
validHours.shuffle(&rand);
|
||||||
|
mFallHour = *validHours[0];
|
||||||
|
} else {
|
||||||
|
mFallHour = sead::GlobalRandom::instance()->getS32Range(sHours.start, sHours.end - 1);
|
||||||
|
}
|
||||||
|
mFallMinute = sead::GlobalRandom::instance()->getU32(59);
|
||||||
|
mInitialised = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::calc_() {
|
||||||
|
if (Manager::instance() != nullptr) {
|
||||||
|
if (!mIsMainField)
|
||||||
|
return;
|
||||||
|
if (sScheduled) {
|
||||||
|
if (Manager::instance()->isDemo()) {
|
||||||
|
sScheduled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
TimeMgr* tm = Manager::instance()->getTimeMgr();
|
||||||
|
if (tm != nullptr) {
|
||||||
|
int hour = tm->getHour();
|
||||||
|
if (mInitialised) {
|
||||||
|
if (hour == mFallHour && mFallMinute < tm->getMinute())
|
||||||
|
mNeedSpawnStar = true;
|
||||||
|
} else if (Manager::instance() != nullptr) {
|
||||||
|
if (isScheduledTime())
|
||||||
|
initSchedule();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mNeedSpawnStar && checkCamera()) {
|
||||||
|
spawnShootingStar();
|
||||||
|
mInitialised = false;
|
||||||
|
mNeedSpawnStar = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShootingStarMgr::isScheduledTime() {
|
||||||
|
bool result = false;
|
||||||
|
if (Manager::instance() != nullptr) {
|
||||||
|
auto* tm = Manager::instance()->getTimeMgr();
|
||||||
|
if (tm != nullptr) {
|
||||||
|
int hour = tm->getHour();
|
||||||
|
if (sHours.start > sHours.unk) {
|
||||||
|
result = sHours.unk < hour && hour < sHours.start;
|
||||||
|
} else {
|
||||||
|
result = sHours.unk < hour || hour < sHours.start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::resetStarPosition() {
|
||||||
|
if (gdt::Manager::instance() != nullptr)
|
||||||
|
gdt::Manager::instance()->setVec3f(sead::Vector3f::zero, "ShootingStarPosition");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::spawnStar() {
|
||||||
|
if (gdt::Manager::instance() == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!isStarPositionValid())
|
||||||
|
return;
|
||||||
|
|
||||||
|
act::InstParamPack pack;
|
||||||
|
sead::Vector3f pos;
|
||||||
|
tryGetStarPosition(&pos);
|
||||||
|
|
||||||
|
pack.getBuffer().add(pos, "@P");
|
||||||
|
act::ActorCreator::instance()->requestCreateActor("FldObj_ShootingStar",
|
||||||
|
act::BaseProcHeapMgr::instance()->getHeap(),
|
||||||
|
nullptr, &pack, nullptr, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShootingStarMgr::isStarPositionValid() {
|
||||||
|
if (gdt::Manager::instance() == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sead::Vector3f pos;
|
||||||
|
if (!gdt::Manager::instance()->getParam().get().getVec3f(&pos, "ShootingStarPosition"))
|
||||||
|
return false;
|
||||||
|
return !(pos.x == 0 && pos.y == 0 && pos.z == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShootingStarMgr::tryGetStarPosition(sead::Vector3f* out) const {
|
||||||
|
bool result = false;
|
||||||
|
if (gdt::Manager::instance())
|
||||||
|
result = gdt::Manager::instance()->getParam().get().getVec3f(out, "ShootingStarPosition");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::setStarPosition(f32 x, f32 y, f32 z) {
|
||||||
|
sead::Vector3f pos(x, y, z);
|
||||||
|
|
||||||
|
if (gdt::Manager::instance()) {
|
||||||
|
gdt::Manager::instance()->setVec3f(pos, "ShootingStarPosition");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::setScheduled(bool enable) {
|
||||||
|
sScheduled = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShootingStarMgr::setShootingStarHours(int start, int end, int hr_unk) {
|
||||||
|
sHours.start = start;
|
||||||
|
sHours.end = end;
|
||||||
|
sHours.unk = hr_unk;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ksys::world
|
||||||
|
|
|
@ -1,20 +1,44 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
#include <thread/seadAtomic.h>
|
||||||
#include "KingSystem/Utils/Types.h"
|
#include "KingSystem/Utils/Types.h"
|
||||||
#include "KingSystem/World/worldJob.h"
|
#include "KingSystem/World/worldJob.h"
|
||||||
|
|
||||||
namespace ksys::world {
|
namespace ksys::world {
|
||||||
|
|
||||||
// TODO
|
|
||||||
class ShootingStarMgr : public Job {
|
class ShootingStarMgr : public Job {
|
||||||
public:
|
public:
|
||||||
ShootingStarMgr();
|
ShootingStarMgr();
|
||||||
|
virtual ~ShootingStarMgr();
|
||||||
|
|
||||||
JobType getType() const override { return JobType::ShootingStar; }
|
JobType getType() const override { return JobType::ShootingStar; }
|
||||||
|
|
||||||
|
virtual void init_(sead::Heap* heap) override;
|
||||||
|
virtual void calc_() override;
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
u8 _20[0x30 - 0x20];
|
static void setScheduled(bool enable);
|
||||||
|
void initSchedule();
|
||||||
|
static bool isScheduledTime();
|
||||||
|
|
||||||
|
bool tryGetStarPosition(sead::Vector3f* out) const;
|
||||||
|
static void setStarPosition(f32 x, f32 y, f32 z);
|
||||||
|
static void spawnShootingStar();
|
||||||
|
void spawnStar();
|
||||||
|
|
||||||
|
static bool checkCamera();
|
||||||
|
bool isStarPositionValid();
|
||||||
|
static void setShootingStarHours(int start, int end, int hr_unk);
|
||||||
|
static void resetStarPosition();
|
||||||
|
static void resetStarProperty();
|
||||||
|
|
||||||
|
s32 mFallHour = 0;
|
||||||
|
s32 mFallMinute = 0;
|
||||||
|
bool mInitialised = false;
|
||||||
|
bool mNeedSpawnStar = false;
|
||||||
|
bool mIsMainField = false;
|
||||||
|
bool _2b = false;
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(ShootingStarMgr, 0x30);
|
KSYS_CHECK_SIZE_NX150(ShootingStarMgr, 0x30);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue