rodecomp/Source/Contents/WorldModelPlacement.cpp
2026-10-24 00:35:19 +00:00

47 lines
1.3 KiB
C++

#include "Contents/ModelActor.h"
#include "Contents/WorldModelPlacement.h"
#include "Resource/WorldResource.h"
#include <cstring>
// OFFSET: 0x00AC94C0
// FUNCTION: fn_17684
// OFFSET: 0x00AC8BF0
// FUNCTION: fn_17680
// Movie registration precedes node suitability.
C3dActor* CreatePlacedWorldModel(
const WorldModelRecord& placement,
C3dModelRes& resource,
BinkMovies& movies,
ModelLightingContext& lighting
) {
resource.RegisterMovies(movies, placement.position);
if (!resource.FindNode(placement.node) && resource.nodes.empty()) {
return nullptr;
}
C3dActor* actor = nullptr;
if (resource.major == 1) {
actor = new C3dActorV1;
} else if (resource.major == 2) {
actor = new C3dActorV2;
}
actor->CopyVolumes(resource.volumes);
actor->SetSpeed(placement.animationSpeed);
actor->playback = placement.animation;
std::memcpy(actor->position, placement.position, sizeof(actor->position));
actor->dirty = 1;
std::memcpy(actor->rotation, placement.rotation, sizeof(actor->rotation));
actor->dirty = 1;
std::memcpy(actor->scale, placement.scale, sizeof(actor->scale));
actor->dirty = 1;
actor->commandMode = placement.flag;
actor->color = static_cast<std::uint32_t>(placement.index);
actor->Assign(resource);
actor->occlusionEnabled = 0;
actor->Prepare(lighting);
return actor;
}