mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-07-05 05:40:32 -04:00
Ivan: Move ActorDB registration into IvanCoop.cpp (#6815)
This commit is contained in:
committed by
GitHub
parent
c76d175526
commit
b09c0733e2
@@ -595,27 +595,6 @@ void ActorDB::Entry::SetDesc(const std::string& newDesc) {
|
||||
entry.desc = desc.c_str();
|
||||
}
|
||||
|
||||
#include "src/overlays/actors/ovl_En_Partner/z_en_partner.h"
|
||||
static ActorDBInit EnPartnerInit = {
|
||||
"En_Partner",
|
||||
"Ivan",
|
||||
ACTORCAT_ITEMACTION,
|
||||
(ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER |
|
||||
ACTOR_FLAG_CAN_PRESS_SWITCHES),
|
||||
OBJECT_GAMEPLAY_KEEP,
|
||||
sizeof(EnPartner),
|
||||
(ActorFunc)EnPartner_Init,
|
||||
(ActorFunc)EnPartner_Destroy,
|
||||
(ActorFunc)EnPartner_Update,
|
||||
(ActorFunc)EnPartner_Draw,
|
||||
nullptr,
|
||||
};
|
||||
extern "C" s16 gEnPartnerId;
|
||||
|
||||
void ActorDB::AddBuiltInCustomActors() {
|
||||
gEnPartnerId = ActorDB::Instance->AddEntry(EnPartnerInit).entry.id;
|
||||
}
|
||||
|
||||
extern "C" ActorDBEntry* ActorDB_Retrieve(const int id) {
|
||||
return &ActorDB::Instance->RetrieveEntry(id).entry;
|
||||
}
|
||||
|
||||
@@ -62,8 +62,6 @@ class ActorDB {
|
||||
Entry& RetrieveEntry(const int id);
|
||||
int RetrieveId(const std::string& name);
|
||||
|
||||
static void AddBuiltInCustomActors();
|
||||
|
||||
int GetEntryCount();
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,16 +1,45 @@
|
||||
#include "soh/ActorDB.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "src/overlays/actors/ovl_En_Partner/z_en_partner.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "functions.h"
|
||||
extern PlayState* gPlayState;
|
||||
extern s16 gEnPartnerId;
|
||||
}
|
||||
|
||||
#define CVAR_NAME CVAR_ENHANCEMENT("IvanCoopModeEnabled")
|
||||
#define CVAR_VALUE CVarGetInteger(CVAR_NAME, 0)
|
||||
|
||||
static s16 ivanActorId = -1;
|
||||
|
||||
static void AddToActorDB() {
|
||||
if (ivanActorId == -1) {
|
||||
ActorDBInit entry = {
|
||||
"En_Partner",
|
||||
"Ivan",
|
||||
ACTORCAT_ITEMACTION,
|
||||
(ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER |
|
||||
ACTOR_FLAG_CAN_PRESS_SWITCHES),
|
||||
OBJECT_GAMEPLAY_KEEP,
|
||||
sizeof(EnPartner),
|
||||
(ActorFunc)EnPartner_Init,
|
||||
(ActorFunc)EnPartner_Destroy,
|
||||
(ActorFunc)EnPartner_Update,
|
||||
(ActorFunc)EnPartner_Draw,
|
||||
nullptr,
|
||||
};
|
||||
ivanActorId = ActorDB::Instance->AddEntry(entry).entry.id;
|
||||
}
|
||||
}
|
||||
|
||||
static Actor* FindIvan(ActorContext* actorCtx) {
|
||||
if (ivanActorId == -1)
|
||||
return nullptr;
|
||||
return Actor_Find(actorCtx, ivanActorId, ACTORCAT_ITEMACTION);
|
||||
}
|
||||
|
||||
static void SpawnIvan() {
|
||||
if (!gPlayState)
|
||||
return;
|
||||
@@ -19,11 +48,13 @@ static void SpawnIvan() {
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (Actor_Find(&gPlayState->actorCtx, gEnPartnerId, ACTORCAT_ITEMACTION))
|
||||
if (FindIvan(&gPlayState->actorCtx))
|
||||
return;
|
||||
|
||||
AddToActorDB();
|
||||
|
||||
PosRot& world = player->actor.world;
|
||||
Actor_Spawn(&gPlayState->actorCtx, gPlayState, gEnPartnerId, world.pos.x,
|
||||
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ivanActorId, world.pos.x,
|
||||
world.pos.y + Player_GetHeight(player) + 5.0f, world.pos.z, 0, world.rot.y, 0, 1);
|
||||
}
|
||||
|
||||
@@ -31,7 +62,7 @@ static void KillIvan() {
|
||||
if (!gPlayState)
|
||||
return;
|
||||
|
||||
Actor* ivan = Actor_Find(&gPlayState->actorCtx, gEnPartnerId, ACTORCAT_ITEMACTION);
|
||||
Actor* ivan = FindIvan(&gPlayState->actorCtx);
|
||||
if (ivan)
|
||||
Actor_Kill(ivan);
|
||||
}
|
||||
@@ -85,8 +116,8 @@ static void PatchDistIfNeeded(Actor* actor) {
|
||||
if (!ShouldPatchDist(actor->id))
|
||||
return;
|
||||
|
||||
Actor* ivan = Actor_Find(&gPlayState->actorCtx, gEnPartnerId, ACTORCAT_ITEMACTION);
|
||||
if (ivan == nullptr)
|
||||
Actor* ivan = FindIvan(&gPlayState->actorCtx);
|
||||
if (!ivan)
|
||||
return;
|
||||
|
||||
f32 ivanDist = Actor_WorldDistXZToActor(actor, ivan);
|
||||
|
||||
@@ -1561,7 +1561,6 @@ extern "C" void InitOTR(int argc, char* argv[]) {
|
||||
VanillaItemTable_Init();
|
||||
DebugConsole_Init();
|
||||
|
||||
ActorDB::AddBuiltInCustomActors();
|
||||
// #region SOH [Randomizer] TODO: Remove these and refactor spoiler file handling for randomizer
|
||||
CVarClear(CVAR_GENERAL("RandomizerNewFileDropped"));
|
||||
CVarClear(CVAR_GENERAL("RandomizerDroppedFile"));
|
||||
|
||||
@@ -33,7 +33,6 @@ Input* D_8012D1F8 = NULL;
|
||||
|
||||
PlayState* gPlayState;
|
||||
s16 firstInit = 0;
|
||||
s16 gEnPartnerId;
|
||||
|
||||
void Play_SpawnScene(PlayState* play, s32 sceneId, s32 spawn);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user