Files
firestorm/Gameleap/code/mw4/Libraries/Adept/StateWatcher_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

127 lines
2.9 KiB
C++

#include "AdeptHeaders.hpp"
#include "ComponentHeaders.hpp"
#include "EntityClassData.hpp"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
StateWatcher::ClassData*
StateWatcher::CreateFactoryRequest(
FactoryRequestParameters *parameters,
Entity::ClassData *class_data
)
{
Check_Object(parameters);
bool result = ChannelOf<int>::CreateFactoryRequest(parameters) != NULL;
//
//-------------------------
// Read the attribute field
//-------------------------
//
MemoryStream *component_stream = parameters->m_stream;
Check_Object(component_stream);
Page *page = parameters->m_page;
StateEngine::ClassData *blueprint = NULL;
const char* attribute_name;
page->GetEntry("Attribute", &attribute_name, true);
Check_Object(class_data);
const AttributeEntry *attribute =
class_data->attributeTable.GetAttributeEntry(attribute_name);
if (!attribute)
{
STOP((
"%s: {[%s]Attribute=%s}: Unknown attribute!",
page->GetNotationFile()->GetFileName(),
page->GetName(),
attribute_name
));
result = false;
}
//
//-----------------------------------------------
// Make sure that the attribute is a state engine
//-----------------------------------------------
//
else
{
Check_Object(attribute);
blueprint =
Cast_Pointer(
StateEngine::ClassData*,
FindClassData(attribute->attributeType)
);
if (!blueprint)
{
STOP((
"%s: {[%s]Attribute=%s}: Attribute is not a state engine!",
page->GetNotationFile()->GetFileName(),
page->GetName(),
attribute_name
));
result = false;
}
else
{
Check_Object(blueprint);
*component_stream << attribute->attributeID;
}
}
//
//-----------------------------------------------
// Look up the entries for the old and new states
//-----------------------------------------------
//
if (blueprint)
{
int state_id = -1;
const char *state_name;
const StateEngine::StateEntry* state_entry = NULL;
if (page->GetEntry("OldState", &state_name))
{
state_entry = blueprint->FindStateEntry(state_name);
if (!state_entry)
{
STOP((
"%s: {[%s]OldState=%s}: Not a valid state name!",
page->GetNotationFile()->GetFileName(),
page->GetName(),
state_name
));
result = false;
}
else
{
state_id = state_entry->stateNumber;
}
}
*component_stream << state_id;
state_id = -1;
if (page->GetEntry("NewState", &state_name))
{
state_entry = blueprint->FindStateEntry(state_name);
if (!state_entry)
{
STOP((
"%s: {[%s]NewState=%s}: Not a valid state name!",
page->GetNotationFile()->GetFileName(),
page->GetName(),
state_name
));
result = false;
}
else
{
state_id = state_entry->stateNumber;
}
}
*component_stream << state_id;
}
Check_Object(DefaultData);
return (result) ? DefaultData : NULL;
}