mirror of https://github.com/zeldaret/botw.git
AddAutoPlacementCreator action
This commit is contained in:
parent
4758d41d69
commit
20f0a07ab0
|
@ -2474,13 +2474,13 @@ Address,Quality,Size,Name
|
|||
0x000000710008298c,O,000256,_ZN5uking6action23ActorInfoToGameDataVec311loadParams_Ev
|
||||
0x0000007100082a8c,O,000288,_ZNK5uking6action23ActorInfoToGameDataVec327checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x0000007100082bac,O,000092,_ZNK5uking6action23ActorInfoToGameDataVec318getRuntimeTypeInfoEv
|
||||
0x0000007100082c08,U,000084,AI_Action_AddAutoPlacementCreator::ctor
|
||||
0x0000007100082c08,O,000084,_ZN5uking6action23AddAutoPlacementCreatorC1ERKN4ksys3act2ai10ActionBase7InitArgE
|
||||
0x0000007100082c5c,O,000020,_ZN5uking6action23AddAutoPlacementCreatorD1Ev
|
||||
0x0000007100082c70,O,000052,_ZN5uking6action23AddAutoPlacementCreatorD0Ev
|
||||
0x0000007100082ca4,O,000008,_ZN5uking6action23AddAutoPlacementCreator5init_EPN4sead4HeapE
|
||||
0x0000007100082cac,U,000620,_ZN5uking6action23AddAutoPlacementCreator6enter_EPN4ksys3act2ai15InlineParamPackE
|
||||
0x0000007100082cac,m,000620,_ZN5uking6action23AddAutoPlacementCreator6enter_EPN4ksys3act2ai15InlineParamPackE
|
||||
0x0000007100082f18,O,000004,_ZN5uking6action23AddAutoPlacementCreator5calc_Ev
|
||||
0x0000007100082f1c,U,000064,_ZN5uking6action23AddAutoPlacementCreator6leave_Ev
|
||||
0x0000007100082f1c,O,000064,_ZN5uking6action23AddAutoPlacementCreator6leave_Ev
|
||||
0x0000007100082f5c,O,000128,_ZN5uking6action23AddAutoPlacementCreator11loadParams_Ev
|
||||
0x0000007100082fdc,O,000288,_ZNK5uking6action23AddAutoPlacementCreator27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071000830fc,O,000092,_ZNK5uking6action23AddAutoPlacementCreator18getRuntimeTypeInfoEv
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -1,4 +1,8 @@
|
|||
#include "Game/AI/Action/actionAddAutoPlacementCreator.h"
|
||||
#include "KingSystem/ActorSystem/actActor.h"
|
||||
#include "KingSystem/Map/mapAutoPlacementMgr.h"
|
||||
#include "KingSystem/Map/mapDebug.h"
|
||||
#include "KingSystem/Utils/MathUtil.h"
|
||||
|
||||
namespace uking::action {
|
||||
|
||||
|
@ -10,12 +14,54 @@ bool AddAutoPlacementCreator::init_(sead::Heap* heap) {
|
|||
return ksys::act::ai::Action::init_(heap);
|
||||
}
|
||||
|
||||
// NON_MATCHING: dot float regalloc
|
||||
void AddAutoPlacementCreator::enter_(ksys::act::ai::InlineParamPack* params) {
|
||||
ksys::act::ai::Action::enter_(params);
|
||||
|
||||
bool is_box = true;
|
||||
|
||||
if (mInitialised)
|
||||
return;
|
||||
|
||||
ksys::act::Actor* actor = mActor;
|
||||
|
||||
if (mShape_m == "Sphere") {
|
||||
if (!sead::Mathf::equalsEpsilon(actor->getScale().x, actor->getScale().z, 0.01f)) {
|
||||
ksys::map::printDebugMsg(actor, "スケールのXとZは一致していないといけません", nullptr);
|
||||
return;
|
||||
}
|
||||
is_box = false;
|
||||
} else if (mShape_m == "Box") {
|
||||
is_box = true;
|
||||
} else {
|
||||
ksys::map::printDebugMsg(actor, "形状は球か箱以外無効です", nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!sead::Mathf::equalsEpsilon(ksys::util::dot(sead::Vector3f::ey, actor->getMtx(), 1), 1.0f,
|
||||
0.01f)) {
|
||||
ksys::map::printDebugMsg(actor, "回転はY以外無効です", nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ksys::map::AutoPlacementMgr::instance() != nullptr &&
|
||||
ksys::map::AutoPlacementMgr::instance()->sub_7100659E40(mActor, mActorName_m, *mCount_m,
|
||||
is_box)) {
|
||||
actor->setDeleteDistance(actor->getDeleteDistance() + 100.0f);
|
||||
mInitialised = true;
|
||||
}
|
||||
}
|
||||
|
||||
void AddAutoPlacementCreator::leave_() {
|
||||
ksys::act::ai::Action::leave_();
|
||||
|
||||
if (!mInitialised)
|
||||
return;
|
||||
|
||||
if (ksys::map::AutoPlacementMgr::instance() != nullptr)
|
||||
ksys::map::AutoPlacementMgr::instance()->sub_7100659F94(mActor);
|
||||
|
||||
mInitialised = false;
|
||||
}
|
||||
|
||||
void AddAutoPlacementCreator::loadParams_() {
|
||||
|
|
|
@ -24,6 +24,8 @@ protected:
|
|||
sead::SafeString mActorName_m{};
|
||||
// map_unit_param at offset 0x38
|
||||
sead::SafeString mShape_m{};
|
||||
|
||||
bool mInitialised{};
|
||||
};
|
||||
|
||||
} // namespace uking::action
|
||||
|
|
|
@ -136,6 +136,14 @@ public:
|
|||
map::Object* getMapObject() const { return mMapObject; }
|
||||
const map::MubinIter& getMapObjIter() const { return mMapObjIter; }
|
||||
|
||||
const sead::Matrix34f& getMtx() const { return mMtx; }
|
||||
const sead::Vector3f& getVelocity() const { return mVelocity; }
|
||||
const sead::Vector3f& getAngVelocity() const { return mAngVelocity; }
|
||||
const sead::Vector3f& getScale() const { return mScale; }
|
||||
f32 getDeleteDistance() const { return sead::Mathf::sqrt(sead::Mathf::clampMin(mDeleteDistanceSq, 0.0f)); }
|
||||
|
||||
void setDeleteDistance(f32 distance) { mDeleteDistanceSq = sead::Mathf::square(distance); }
|
||||
|
||||
void clearFlag(ActorFlag flag);
|
||||
bool checkFlag(ActorFlag flag) const;
|
||||
void setFlag(ActorFlag flag);
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
|
||||
namespace ksys::act {
|
||||
class Actor;
|
||||
} // namespace ksys::act
|
||||
|
||||
namespace ksys::map {
|
||||
|
||||
class AutoPlacementMgr {
|
||||
SEAD_SINGLETON_DISPOSER(AutoPlacementMgr)
|
||||
public:
|
||||
AutoPlacementMgr();
|
||||
virtual ~AutoPlacementMgr();
|
||||
|
||||
bool sub_7100659E40(ksys::act::Actor* actor, const sead::SafeString& actor_name, int count, bool is_box);
|
||||
void sub_7100659F94(ksys::act::Actor* actor);
|
||||
};
|
||||
|
||||
} // namespace ksys::map
|
|
@ -21,4 +21,9 @@ inline float sqXZDistance(const sead::Vector3f& a, const sead::Vector3f& b) {
|
|||
return sead::Mathf::square(a.x - b.x) + sead::Mathf::square(a.z - b.z);
|
||||
}
|
||||
|
||||
// NON_MATCHING: float regalloc
|
||||
inline float dot(const sead::Vector3f& u, const sead::Matrix34f& mtx, int row) {
|
||||
return u.x * mtx(row, 0) + u.y * mtx(row, 1) + mtx(row, 2) * u.z;
|
||||
}
|
||||
|
||||
} // namespace ksys::util
|
||||
|
|
Loading…
Reference in New Issue