Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.
Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#include "Contents/Models/ModelActor.h"
|
|
#include "Contents/World/WorldModelPlacement.h"
|
|
#include "Resource/World/WorldResource.h"
|
|
|
|
#include <cstring>
|
|
|
|
// OFFSET: 0x00AC94C0
|
|
// FUNCTION: fn_17684
|
|
// OFFSET: 0x00AC8BF0
|
|
// FUNCTION: fn_17680
|
|
|
|
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;
|
|
}
|