shootingStarMgr

This commit is contained in:
theo3 2021-06-24 00:22:55 -07:00
parent 710c91eeff
commit 0eef5b3933
4 changed files with 198 additions and 14 deletions

View File

@ -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.

View File

@ -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; }

View File

@ -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

View File

@ -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);