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.
94 lines
2.7 KiB
C++
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;
|
|
}
|