mirror of https://github.com/zeldaret/botw.git
ksys/act: Implement act::acquireProc
This commit is contained in:
parent
7e96f826c0
commit
c9207a3cc3
|
@ -48,6 +48,7 @@ add_executable(uking
|
||||||
|
|
||||||
src/KingSystem/Terrain/teraSystem.h
|
src/KingSystem/Terrain/teraSystem.h
|
||||||
|
|
||||||
|
src/KingSystem/Utils/Debug.h
|
||||||
src/KingSystem/Utils/StrTreeMap.h
|
src/KingSystem/Utils/StrTreeMap.h
|
||||||
src/KingSystem/Utils/Types.h
|
src/KingSystem/Utils/Types.h
|
||||||
)
|
)
|
||||||
|
|
|
@ -74114,7 +74114,7 @@
|
||||||
0x0000007100dca6d4,_ZN15ActorInstParams3BufaSERS0_,56,
|
0x0000007100dca6d4,_ZN15ActorInstParams3BufaSERS0_,56,
|
||||||
0x0000007100dca70c,_ZN13ActorAccessorD2Ev,56,_ZN4ksys3act24ActorLinkConstDataAccessD1Ev
|
0x0000007100dca70c,_ZN13ActorAccessorD2Ev,56,_ZN4ksys3act24ActorLinkConstDataAccessD1Ev
|
||||||
0x0000007100dca744,ActorAccessor::acquire,88,_ZN4ksys3act24ActorLinkConstDataAccess7acquireEPNS0_8BaseProcE
|
0x0000007100dca744,ActorAccessor::acquire,88,_ZN4ksys3act24ActorLinkConstDataAccess7acquireEPNS0_8BaseProcE
|
||||||
0x0000007100dca79c,act::acquireActorFromGameOrHavokThread,256,
|
0x0000007100dca79c,act::acquireActorFromGameOrHavokThread,256,_ZN4ksys3act11acquireProcEPNS0_24ActorLinkConstDataAccessEPNS0_8BaseProcERKN4sead14SafeStringBaseIcEE
|
||||||
0x0000007100dca89c,GameFramework::ctor,96,
|
0x0000007100dca89c,GameFramework::ctor,96,
|
||||||
0x0000007100dca8fc,GameFramework::dtor,64,
|
0x0000007100dca8fc,GameFramework::dtor,64,
|
||||||
0x0000007100dca93c,GameFramework::dtorDelete,72,
|
0x0000007100dca93c,GameFramework::dtorDelete,72,
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -1,5 +1,7 @@
|
||||||
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
|
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
|
||||||
#include "KingSystem/ActorSystem/actBaseProc.h"
|
#include "KingSystem/ActorSystem/actBaseProc.h"
|
||||||
|
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
|
||||||
|
#include "KingSystem/Utils/Debug.h"
|
||||||
|
|
||||||
namespace ksys::act {
|
namespace ksys::act {
|
||||||
|
|
||||||
|
@ -20,9 +22,7 @@ bool ActorLinkConstDataAccess::acquire(BaseProc* proc) {
|
||||||
mProc = nullptr;
|
mProc = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proc)
|
return proc && proc->acquire(*this);
|
||||||
return proc->acquire(*this);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ActorLinkConstDataAccess::hasProc(BaseProc* proc) const {
|
bool ActorLinkConstDataAccess::hasProc(BaseProc* proc) const {
|
||||||
|
@ -33,4 +33,24 @@ void ActorLinkConstDataAccess::debugLog(s32, const sead::SafeString&) {
|
||||||
// Intentionally left empty.
|
// Intentionally left empty.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool acquireProc(ActorLinkConstDataAccess* accessor, BaseProc* proc, const sead::SafeString& from) {
|
||||||
|
bool acquired = false;
|
||||||
|
|
||||||
|
if (accessor) {
|
||||||
|
acquired = accessor->acquire(proc);
|
||||||
|
if (!acquired)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acquired || BaseProcMgr::instance()->isHighPriorityThread())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
sead::FixedSafeString<256> message;
|
||||||
|
// (%s)Acquiring from a low priority thread. Please change via ActorLinkConstDataAccess
|
||||||
|
message.format("(%s)低スレッドからの取得です。ActorLinkConstDataAccess経由に変更お願いします",
|
||||||
|
from.cstr());
|
||||||
|
util::PrintDebug(message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ksys::act
|
} // namespace ksys::act
|
||||||
|
|
|
@ -21,16 +21,22 @@ public:
|
||||||
/// If an actor was already acquired, it is released.
|
/// If an actor was already acquired, it is released.
|
||||||
bool acquire(BaseProc* proc);
|
bool acquire(BaseProc* proc);
|
||||||
|
|
||||||
|
void release() { acquire(nullptr); }
|
||||||
|
|
||||||
/// Checks whether the acquired BaseProc is `proc`.
|
/// Checks whether the acquired BaseProc is `proc`.
|
||||||
bool hasProc(BaseProc* proc) const;
|
bool hasProc(BaseProc* proc) const;
|
||||||
|
|
||||||
private:
|
|
||||||
void debugLog(s32, const sead::SafeString& method_name);
|
void debugLog(s32, const sead::SafeString& method_name);
|
||||||
|
|
||||||
|
private:
|
||||||
bool mAcquired = false;
|
bool mAcquired = false;
|
||||||
BaseProc* mProc = nullptr;
|
BaseProc* mProc = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Acquire the specified BaseProc using `accessor`. Using ActorLinkConstDataAccess is mandatory
|
||||||
|
/// when acquiring from a low priority thread (see BaseProcMgr for a definition).
|
||||||
|
bool acquireProc(ActorLinkConstDataAccess* accessor, BaseProc* proc, const sead::SafeString& from);
|
||||||
|
|
||||||
} // namespace act
|
} // namespace act
|
||||||
|
|
||||||
} // namespace ksys
|
} // namespace ksys
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <prim/seadSafeString.h>
|
||||||
|
|
||||||
|
namespace ksys::util {
|
||||||
|
|
||||||
|
inline void PrintDebug([[maybe_unused]] const sead::SafeString& message) {}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue