mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-22 19:25:16 +00:00
73 lines
2.5 KiB
C++
73 lines
2.5 KiB
C++
|
#include "server/Client.hpp"
|
||
|
#include "logger.hpp"
|
||
|
#include "main.hpp"
|
||
|
|
||
|
al::LiveActor *createPuppetActorFromFactory(al::ActorInitInfo const &rootInitInfo, al::PlacementInfo const &rootPlacementInfo, bool isDebug) {
|
||
|
al::ActorInitInfo actorInitInfo = al::ActorInitInfo();
|
||
|
actorInitInfo.initViewIdSelf(&rootPlacementInfo, rootInitInfo);
|
||
|
|
||
|
al::createActor createActor = actorInitInfo.mActorFactory->getCreator("PuppetActor");
|
||
|
|
||
|
if(createActor) {
|
||
|
PuppetActor *newActor = (PuppetActor*)createActor("PuppetActor");
|
||
|
|
||
|
if(!isDebug) {
|
||
|
if(Client::tryAddPuppet(newActor)) {
|
||
|
PuppetInfo *curInfo = Client::getLatestInfo();
|
||
|
if(!curInfo) {
|
||
|
Logger::log("Puppet Info is Null!\n");
|
||
|
}else {
|
||
|
|
||
|
newActor->initOnline(curInfo); // set puppet info first before calling init so we can get costume info from the info
|
||
|
|
||
|
newActor->init(actorInitInfo);
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
|
||
|
Logger::log("Creating Test Puppet.\n");
|
||
|
|
||
|
newActor->initOnline(Client::getDebugPuppetInfo());
|
||
|
|
||
|
newActor->init(actorInitInfo);
|
||
|
|
||
|
newActor->mIsDebug = true;
|
||
|
|
||
|
newActor->makeActorAlive();
|
||
|
|
||
|
if (Client::tryAddDebugPuppet(newActor)) {
|
||
|
Logger::log("Debug Puppet Created!\n");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return newActor;
|
||
|
}else {
|
||
|
return nullptr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Hooks
|
||
|
|
||
|
void initPuppetActors(al::Scene *scene, al::ActorInitInfo const &rootInfo, char const *listName) {
|
||
|
al::StageInfo *stageInfo = al::getStageInfoMap(scene, 0);
|
||
|
|
||
|
int placementCount = 0;
|
||
|
al::PlacementInfo rootPlacement = al::PlacementInfo();
|
||
|
al::tryGetPlacementInfoAndCount(&rootPlacement, &placementCount, stageInfo, "PlayerList");
|
||
|
// check if default placement count for PlayerList is greater than 0 (so we can use the placement info of the player to init our custom puppet actors)
|
||
|
if(placementCount > 0) {
|
||
|
al::PlacementInfo playerPlacement = al::PlacementInfo();
|
||
|
al::getPlacementInfoByIndex(&playerPlacement, rootPlacement, 0);
|
||
|
|
||
|
for (size_t i = 0; i < Client::sInstance->maxPuppets; i++)
|
||
|
{
|
||
|
createPuppetActorFromFactory(rootInfo, playerPlacement, false);
|
||
|
}
|
||
|
|
||
|
// create a debug puppet for testing purposes
|
||
|
// createPuppetActorFromFactory(rootInfo, playerPlacement, true);
|
||
|
}
|
||
|
|
||
|
al::initPlacementObjectMap(scene, rootInfo, listName); // run init for ObjectList after we init our puppet actors
|
||
|
}
|