Files
firestorm/Gameleap/code/mw4/Code/MW4/MaterialEffectHolder.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

219 lines
6.0 KiB
C++

#include "MW4Headers.hpp"
#include "MaterialEffectHolder.hpp"
#include <Adept\Tool.hpp>
//#############################################################################
//########################### MaterialEffectHolder #######################
//#############################################################################
MaterialEffectHolder::ClassData*
MaterialEffectHolder::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MaterialEffectHolder::InitializeClass()
{
Verify(!DefaultData);
DefaultData =
new ClassData(
MaterialEffectHolderClassID,
"MechWarrior4::MaterialEffectHolder",
Plug::DefaultData
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MaterialEffectHolder::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MaterialEffectHolder::MaterialEffectHolder(
ClassData *class_data,
MemoryStream *stream
):
Plug(class_data),
effectChain(NULL, true)
{
Check_Pointer(this);
Check_Object(stream);
LoadEffectsChain(stream);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MaterialEffectHolder::LoadEffectsChain(MemoryStream *stream)
{
Check_Object(this);
Check_Pointer(this);
ResourceID temp_id;
int material_type;
while (stream->GetBytesRemaining() > 0)
{
*stream >> material_type;
*stream >> temp_id;
Stuff::PlugOf<Adept::ResourceID> *plug;
plug = new Stuff::PlugOf<Adept::ResourceID>(temp_id);
effectChain.AddValue(plug, material_type);
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MaterialEffectHolder::ConstructStream(
MemoryStream *stream,
NotationFile *model_file
)
{
Check_Object(model_file);
Stuff::NameList *effects_list;
Stuff::NameList::Entry *effects_entry;
effects_list = model_file->MakeEntryList("EffectList", "Effect");
Register_Object(effects_list);
effects_entry = effects_list->GetFirstEntry();
while (effects_entry != NULL)
{
Check_Object(effects_entry);
const char *effect_data = effects_entry->GetChar();
Check_Pointer(effects_entry);
MString entry_string;
MString effect_file_name;
entry_string = effect_data;
effect_file_name = entry_string.GetNthToken(0, ",");
Check_Object(Tool::Instance);
Check_Object(ResourceManager::Instance);
Resource effect_resource;
Tool::Instance->ConstructDataList(&effect_resource, effect_file_name);
Check_Object(&effect_resource);
Verify(effect_resource.DoesResourceExist());
MString material_name;
material_name = entry_string.GetNthToken(1, ",");
int material_num = MaterialEffectHolder::MaterialTypeTextToAscii(material_name);
*stream << material_num;
*stream << effect_resource.GetResourceID();
effects_entry = effects_entry->GetNextEntry();
}
delete effects_list;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
ResourceID
MaterialEffectHolder::GetEffectResource(int material)
{
Check_Object(this);
Verify(material>=0);
Verify(material<MaterialCount);
PlugOf<ResourceID> *effect_plug = effectChain.Find(material);
if(effect_plug)
return effect_plug->GetItem();
return ResourceID::Null;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MaterialEffectHolder::~MaterialEffectHolder()
{
SortedChainIteratorOf<PlugOf<ResourceID>*, int> iterator(&effectChain);
iterator.DeletePlugs();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
int
MaterialEffectHolder::MaterialTypeTextToAscii(const char *mode_name)
{
if(!_stricmp(mode_name, "Dirt"))
return DirtMaterial;
else if(!_stricmp(mode_name, "Water"))
return WaterMaterial;
else if(!_stricmp(mode_name, "Rock"))
return RockMaterial;
else if(!_stricmp(mode_name, "Steel"))
return SteelMaterial;
else if(!_stricmp(mode_name, "Blacktop"))
return BlacktopMaterial;
else if(!_stricmp(mode_name, "Us"))
return UsMaterial;
else if(!_stricmp(mode_name, "Them"))
return ThemMaterial;
else if(!_stricmp(mode_name, "Vehicle"))
return VehicleMaterial;
else if(!_stricmp(mode_name, "Glass"))
return GlassMaterial;
else if(!_stricmp(mode_name, "Brick"))
return BrickMaterial;
else if(!_stricmp(mode_name, "Grass"))
return GrassMaterial;
else if(!_stricmp(mode_name, "Wood"))
return WoodMaterial;
else if(!_stricmp(mode_name, "Tree"))
return TreeMaterial;
else if(!_stricmp(mode_name, "Swamp"))
return SwampMaterial;
else if(!_stricmp(mode_name, "Concrete"))
return ConcreteMaterial;
else if(!_stricmp(mode_name, "Rough"))
return RoughMaterial;
else if(!_stricmp(mode_name, "Snow"))
return SnowMaterial;
else if(!_stricmp(mode_name, "Underbrush"))
return UnderbrushMaterial;
else if(!_stricmp(mode_name, "ShallowWater"))
return ShallowWaterMaterial;
else if(!_stricmp(mode_name, "MidWater"))
return MidWaterMaterial;
else if(!_stricmp(mode_name, "OceanicWater"))
return OceanicWaterMaterial;
else if(!_stricmp(mode_name, "Desert"))
return DesertMaterial;
else if(!_stricmp(mode_name, "FlatSwamp"))
return FlatSwampMaterial;
// MSL 5.03 Lava
else if (!_stricmp(mode_name,"LightMineral"))
return LightMineralMaterial;
else if (!_stricmp(mode_name,"DarkMineral"))
return DarkMineralMaterial;
else if (!_stricmp(mode_name,"Ash"))
return AshMaterial;
else if (!_stricmp(mode_name,"CrackedLava"))
return CrackedLavaMaterial;
else if (!_stricmp(mode_name,"OpenLava"))
return OpenLavaMaterial;
else
return ThickSwampMaterial;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MaterialEffectHolder::TestInstance() const
{
Verify(IsDerivedFrom(DefaultData));
}