summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMonsterDruide1 <5958456@gmail.com>2021-07-08 18:48:11 +0200
committerMonsterDruide1 <5958456@gmail.com>2021-07-08 19:28:00 +0200
commit0750a987ac72157945bc5affa14e8a96e6198dfb (patch)
tree93978d091ebc1e3a46b6de72462089cb495c0d1c /src
parent41d724e17e635e61f0d6efad795620ac14781c2b (diff)
ksys/act: Add InfoData::InvalidLifeConditions
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/ActorSystem/actInfoData.cpp33
-rw-r--r--src/KingSystem/ActorSystem/actInfoData.h4
-rw-r--r--src/KingSystem/World/worldManager.h3
-rw-r--r--src/KingSystem/World/worldTimeMgr.h1
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; }