Files
firestorm/Gameleap/code/mw4/Libraries/Adept/ScalableShapeComponent_Tool.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

94 lines
2.7 KiB
C++

#include "AdeptHeaders.hpp"
#include "VideoHeaders.hpp"
#include "Tool.hpp"
using namespace ElementRenderer;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
ScalableShapeComponent::ClassData*
ScalableShapeComponent::CreateFactoryRequest(
FactoryRequestParameters *parameters
)
{
Check_Object(parameters);
Check_Object(Resource::ParentFileDependencies);
//
//-------------------------------------------------------------------------
// Allocate enough room for what we need to write out, then call our parent
//-------------------------------------------------------------------------
//
MemoryStream *component_stream = parameters->m_stream;
Check_Object(component_stream);
component_stream->AllocateBytes(sizeof(ShapeComponent));
//
//------------------------------------
// Find the parent object for the mesh
//------------------------------------
//
Page *page = parameters->m_page;
Check_Object(page);
//
//-------------------------
// Deal with the instancing
//-------------------------
//
bool instance = false;
page->GetEntry("Unique", &instance);
*component_stream << instance;
//
//-----------------------------------------------
// Check to see if an alpha property is being set
//-----------------------------------------------
//
const char* geometry_name;
page->GetEntry("Geometry", &geometry_name, true);
FileStream file_stream(geometry_name);
const char* file_name = file_stream.GetFileName();
//
//----------------------------------------------------------
// If the resource doesn't need to be built, just get its ID
//----------------------------------------------------------
//
Resource shape_res(file_name);
if (!shape_res.DoesResourceExist() || !shape_res.IsResourceUpToDate())
{
FileDependencies erf_dependencies;
erf_dependencies.AddDependency(&file_stream);
shape_res.Save(&file_stream, &erf_dependencies);
if (!shape_res.IsRegistered())
Resource::ParentFileDependencies->AddDependencies(&erf_dependencies);
}
else if (!shape_res.IsRegistered())
shape_res.AddFileDependenciesTo(Resource::ParentFileDependencies);
*component_stream << shape_res.GetResourceID();
//
//-----------------------
// Find the initial scale
//-----------------------
//
bool result = BaseClass::CreateFactoryRequest(parameters) != NULL;
Scalar scale = 1.0f;
page->GetEntry("Scale", &scale);
if (scale < 0.01f)
{
STOP((
"%s: {[%s]Scale=%f}: Scale must be >= 0.01!",
page->GetNotationFile()->GetFileName(),
page->GetName(),
scale
));
result = false;
}
*component_stream << scale;
Check_Object(DefaultData);
return (result) ? DefaultData : NULL;
}