diff options
| author | MonsterDruide1 <5958456@gmail.com> | 2021-07-08 18:48:11 +0200 |
|---|---|---|
| committer | MonsterDruide1 <5958456@gmail.com> | 2021-07-08 19:28:00 +0200 |
| commit | 0750a987ac72157945bc5affa14e8a96e6198dfb (patch) | |
| tree | 93978d091ebc1e3a46b6de72462089cb495c0d1c /src | |
| parent | 41d724e17e635e61f0d6efad795620ac14781c2b (diff) | |
ksys/act: Add InfoData::InvalidLifeConditions
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/ActorSystem/actInfoData.cpp | 33 | ||||
| -rw-r--r-- | src/KingSystem/ActorSystem/actInfoData.h | 4 | ||||
| -rw-r--r-- | src/KingSystem/World/worldManager.h | 3 | ||||
| -rw-r--r-- | src/KingSystem/World/worldTimeMgr.h | 1 |
4 files changed, 41 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actInfoData.cpp b/src/KingSystem/ActorSystem/actInfoData.cpp index 5c7ef40c..94fb092d 100644 --- a/src/KingSystem/ActorSystem/actInfoData.cpp +++ b/src/KingSystem/ActorSystem/actInfoData.cpp @@ -11,6 +11,7 @@ #include "KingSystem/Utils/Byaml/ByamlArrayIter.h" #include "KingSystem/Utils/Byaml/ByamlData.h" #include "KingSystem/Utils/Byaml/ByamlHashIter.h" +#include "KingSystem/World/worldManager.h" namespace ksys::act { @@ -717,4 +718,36 @@ bool InfoData::getName(al::ByamlIter* iter, const char** name, s32 idx) const { return iter->tryConvertString(name, &data); } +bool InfoData::InvalidLifeConditions::containsCurrentTimeOrWeather( + const sead::Vector3f& pos) const { + return containsCurrentTime() || containsCurrentWeather(pos); +} + +bool InfoData::InvalidLifeConditions::containsCurrentTime() const { + if (num_times < 1 || !world::Manager::instance() || world::Manager::instance()->isAocField()) { + return false; + } + const char* time_type_name = + world::TimeType::text(world::Manager::instance()->getTimeMgr()->getTimeType()); + for (int i = 0; i < num_times; i++) { + if (times[i] == time_type_name) + return true; + } + return false; +} + +bool InfoData::InvalidLifeConditions::containsCurrentWeather(const sead::Vector3f& pos) const { + if (num_weathers < 1 || !world::Manager::instance() || + world::Manager::instance()->isAocField()) { + return false; + } + auto current_weather = world::WeatherType(world::Manager::instance()->sub_71010F337C(pos)); + const char* current_weather_name = world::Manager::getWeatherTypeString(current_weather); + for (int i = 0; i < num_weathers; i++) { + if (weathers[i] == current_weather_name) + return true; + } + return false; +} + } // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actInfoData.h b/src/KingSystem/ActorSystem/actInfoData.h index b4f20b63..bd23551c 100644 --- a/src/KingSystem/ActorSystem/actInfoData.h +++ b/src/KingSystem/ActorSystem/actInfoData.h @@ -74,6 +74,10 @@ public: sead::SafeArray<sead::SafeString, 16> times; s32 num_weathers; sead::SafeArray<sead::SafeString, 16> weathers; + + bool containsCurrentTimeOrWeather(const sead::Vector3f& pos) const; + bool containsCurrentTime() const; + bool containsCurrentWeather(const sead::Vector3f& pos) const; }; KSYS_CHECK_SIZE_NX150(InvalidLifeConditions, 0x210); diff --git a/src/KingSystem/World/worldManager.h b/src/KingSystem/World/worldManager.h index 2eb13ac0..7b40cb03 100644 --- a/src/KingSystem/World/worldManager.h +++ b/src/KingSystem/World/worldManager.h @@ -208,6 +208,9 @@ public: bool worldInfoLoaded() const { return mWorldInfoLoadStatus != WorldInfoLoadStatus::NotLoaded; } + u8 sub_71010F337C(const sead::Vector3f& pos); // TODO implement this : 0x71010F337C - maybe has + // a different parameter type + private: enum class WorldInfoLoadStatus : u8 { NotLoaded, diff --git a/src/KingSystem/World/worldTimeMgr.h b/src/KingSystem/World/worldTimeMgr.h index 107b5836..ba374793 100644 --- a/src/KingSystem/World/worldTimeMgr.h +++ b/src/KingSystem/World/worldTimeMgr.h @@ -91,6 +91,7 @@ public: bool isTimeFlowingNormally() const; int getTimeDivision() const { return mTimeDivision; } + int getTimeType() const { return mTimeType; } sead::DelegateEvent<const NewDayEvent&>& getNewDaySignal() { return mNewDaySignal; } float getTimeStep() const { return mTimeStep; } float getBloodMoonTimer() const { return mBloodMoonTimer; } |
