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.
598 lines
12 KiB
C++
598 lines
12 KiB
C++
#include "ProxyHeaders.hpp"
|
|
|
|
//
|
|
//############################################################################
|
|
//########################### StateProxy ############################
|
|
//############################################################################
|
|
//
|
|
|
|
StateProxy::ClassData*
|
|
StateProxy::DefaultData = NULL;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateProxy::InitializeClass()
|
|
{
|
|
Verify(!DefaultData);
|
|
DefaultData =
|
|
new ClassData(
|
|
StateProxyClassID,
|
|
"StateProxy",
|
|
GenericProxy::DefaultData
|
|
);
|
|
Register_Object(DefaultData);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateProxy::TerminateClass()
|
|
{
|
|
Unregister_Object(DefaultData);
|
|
delete DefaultData;
|
|
DefaultData = NULL;
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
StateProxy::StateProxy(
|
|
ClassData *class_data,
|
|
StateLibrary *library
|
|
):
|
|
GenericProxy(class_data),
|
|
libraryProxy(library)
|
|
{
|
|
Check_Pointer(this);
|
|
Check_Object(libraryProxy);
|
|
libraryProxy->AttachStateProxy(this);
|
|
Check_Object(this);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
StateProxy::~StateProxy()
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(libraryProxy);
|
|
libraryProxy->DetachReference();
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
bool
|
|
StateProxy::IsEqualTo(StateProxy *state)
|
|
{
|
|
Check_Object(this);
|
|
Check_Object(state);
|
|
|
|
//
|
|
//-------------------------------
|
|
// We are always equal to ourself
|
|
//-------------------------------
|
|
//
|
|
if (this == state)
|
|
return true;
|
|
|
|
//
|
|
//-------------------------------------
|
|
// Compare the specular color and value
|
|
//-------------------------------------
|
|
//
|
|
RGBColor color, other_color;
|
|
bool them = state->GetSpecularColor(&other_color);
|
|
bool us = GetSpecularColor(&color);
|
|
if (them != us)
|
|
return false;
|
|
if (them && us)
|
|
{
|
|
if (
|
|
!Close_Enough(color, other_color)
|
|
||
|
|
!Close_Enough(
|
|
GetSpecularShininess(),
|
|
state->GetSpecularShininess()
|
|
)
|
|
)
|
|
return false;
|
|
}
|
|
|
|
bool themOnOff, usOnOff;
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the alpha proxies
|
|
//-----------------------------
|
|
//
|
|
AlphaMode themAlpha, usAlpha;
|
|
|
|
themOnOff = state->GetAlpha(&themAlpha);
|
|
usOnOff = GetAlpha(&usAlpha);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themAlpha != usAlpha) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetAlphaChildPermission();
|
|
usOnOff = GetAlphaChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the Filter proxies
|
|
//-----------------------------
|
|
//
|
|
FilterMode themFilter, usFilter;
|
|
|
|
themOnOff = state->GetFilter(&themFilter);
|
|
usOnOff = GetFilter(&usFilter);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themFilter != usFilter) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetFilterChildPermission();
|
|
usOnOff = GetFilterChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the Fog proxies
|
|
//-----------------------------
|
|
//
|
|
FogMode themFog, usFog;
|
|
|
|
themOnOff = state->GetFog(&themFog);
|
|
usOnOff = GetFog(&usFog);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themFog != usFog) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetFogChildPermission();
|
|
usOnOff = GetFogChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the Dither proxies
|
|
//-----------------------------
|
|
//
|
|
bool themDither, usDither;
|
|
|
|
themOnOff = state->GetDither(&themDither);
|
|
usOnOff = GetDither(&usDither);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themDither != usDither) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetDitherChildPermission();
|
|
usOnOff = GetDitherChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the Specular proxies
|
|
//-----------------------------
|
|
//
|
|
bool themSpecular, usSpecular;
|
|
|
|
themOnOff = state->GetSpecular(&themSpecular);
|
|
usOnOff = GetSpecular(&usSpecular);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themSpecular != usSpecular) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetSpecularChildPermission();
|
|
usOnOff = GetSpecularChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the TextureCorrection proxies
|
|
//-----------------------------
|
|
//
|
|
bool themTextureCorrection, usTextureCorrection;
|
|
|
|
themOnOff = state->GetTextureCorrection(&themTextureCorrection);
|
|
usOnOff = GetTextureCorrection(&usTextureCorrection);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themTextureCorrection != usTextureCorrection) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetTextureCorrectionChildPermission();
|
|
usOnOff = GetTextureCorrectionChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the TextureWrap proxies
|
|
//-----------------------------
|
|
//
|
|
TextureWrapMode themTextureWrap, usTextureWrap;
|
|
|
|
themOnOff = state->GetTextureWrap(&themTextureWrap);
|
|
usOnOff = GetTextureWrap(&usTextureWrap);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themTextureWrap != usTextureWrap) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetTextureWrapChildPermission();
|
|
usOnOff = GetTextureWrapChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the WireFrame proxies
|
|
//-----------------------------
|
|
//
|
|
WireFrameMode themWireFrame, usWireFrame;
|
|
|
|
themOnOff = state->GetWireFrame(&themWireFrame);
|
|
usOnOff = GetWireFrame(&usWireFrame);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themWireFrame != usWireFrame) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetWireFrameChildPermission();
|
|
usOnOff = GetWireFrameChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the ZBufferCompare proxies
|
|
//-----------------------------
|
|
//
|
|
bool themZBufferCompare, usZBufferCompare;
|
|
|
|
themOnOff = state->GetZBufferCompare(&themZBufferCompare);
|
|
usOnOff = GetZBufferCompare(&usZBufferCompare);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themZBufferCompare != usZBufferCompare) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetZBufferCompareChildPermission();
|
|
usOnOff = GetZBufferCompareChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Write the ZBufferWrite proxies
|
|
//-----------------------------
|
|
//
|
|
bool themZBufferWrite, usZBufferWrite;
|
|
|
|
themOnOff = state->GetZBufferWrite(&themZBufferWrite);
|
|
usOnOff = GetZBufferWrite(&usZBufferWrite);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themZBufferWrite != usZBufferWrite) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetZBufferWriteChildPermission();
|
|
usOnOff = GetZBufferWriteChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Write the FlatColoring proxies
|
|
//-----------------------------
|
|
//
|
|
bool themFlatColoring, usFlatColoring;
|
|
|
|
themOnOff = state->GetFlatColoring(&themFlatColoring);
|
|
usOnOff = GetFlatColoring(&usFlatColoring);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themFlatColoring != usFlatColoring) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetFlatColoringChildPermission();
|
|
usOnOff = GetFlatColoringChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the two-sided proxies
|
|
//-----------------------------
|
|
//
|
|
bool themTSoverride, usTSoverride;
|
|
|
|
themOnOff = state->GetMatTwoSided(&themTSoverride);
|
|
usOnOff = GetMatTwoSided(&usTSoverride);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themTSoverride != usTSoverride) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetMatTwoSidedChildPermission();
|
|
usOnOff = GetMatTwoSidedChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Compare the backface proxies
|
|
//-----------------------------
|
|
//
|
|
bool themBFoverride, usBFoverride;
|
|
|
|
themOnOff = state->GetBackface(&themBFoverride);
|
|
usOnOff = GetBackface(&usBFoverride);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themBFoverride != usBFoverride) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetBackfaceChildPermission();
|
|
usOnOff = GetBackfaceChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Write the Priority proxies
|
|
//-----------------------------
|
|
//
|
|
int themPriority, usPriority;
|
|
|
|
themOnOff = state->GetPriority(&themPriority);
|
|
usOnOff = GetPriority(&usPriority);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themPriority != usPriority) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetPriorityChildPermission();
|
|
usOnOff = GetPriorityChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//-----------------------------
|
|
// Write the Lighting proxies
|
|
//-----------------------------
|
|
//
|
|
int themLighting, usLighting;
|
|
|
|
themOnOff = state->GetLighting(&themLighting);
|
|
usOnOff = GetLighting(&usLighting);
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
if(usOnOff && (themLighting != usLighting) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
themOnOff = state->GetLightingChildPermission();
|
|
usOnOff = GetLightingChildPermission();
|
|
|
|
if(themOnOff != usOnOff)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//
|
|
//----------------------------
|
|
// Compare the texture proxies
|
|
//----------------------------
|
|
//
|
|
TextureProxy *texture = state->UseTextureProxy();
|
|
TextureProxy *our_texture = UseTextureProxy();
|
|
if (!texture && !our_texture)
|
|
return true;
|
|
bool result = false;
|
|
if (texture && our_texture)
|
|
result = texture->IsEqualTo(our_texture);
|
|
if (our_texture)
|
|
our_texture->DetachReference();
|
|
if (texture)
|
|
texture->DetachReference();
|
|
return result;
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateProxy::TestInstance() const
|
|
{
|
|
Verify(IsDerivedFrom(DefaultData));
|
|
}
|
|
|
|
//
|
|
//############################################################################
|
|
//###################### StateLibrary ##########################
|
|
//############################################################################
|
|
//
|
|
|
|
StateLibrary::ClassData*
|
|
StateLibrary::DefaultData = NULL;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateLibrary::InitializeClass()
|
|
{
|
|
Verify(!DefaultData);
|
|
DefaultData =
|
|
new ClassData(
|
|
StateLibraryClassID,
|
|
"StateLibrary",
|
|
GenericProxy::DefaultData
|
|
);
|
|
Register_Object(DefaultData);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateLibrary::TerminateClass()
|
|
{
|
|
Unregister_Object(DefaultData);
|
|
delete DefaultData;
|
|
DefaultData = NULL;
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
StateLibrary::StateLibrary(
|
|
ClassData *class_data,
|
|
SceneProxy *scene
|
|
):
|
|
GenericProxy(class_data),
|
|
sceneProxy(scene),
|
|
activeStateProxies(NULL)
|
|
{
|
|
Check_Object(this);
|
|
textureLibrary = NULL;
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
StateLibrary::~StateLibrary()
|
|
{
|
|
Check_Object(this);
|
|
Verify(activeStateProxies.IsEmpty());
|
|
Verify(!textureLibrary);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
StateLibrary::TestInstance() const
|
|
{
|
|
Verify(IsDerivedFrom(DefaultData));
|
|
}
|