Files
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

537 lines
12 KiB
C++

#include "ProxyHeaders.hpp"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
TextureProxy::Copy(
CopyProcess *process,
TextureProxy *texture
)
{
Check_Object(this);
Check_Object(process);
Check_Object(texture);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(texture);
if (!process->continueProcess)
return;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (texture->GetName(&name))
SetName(name);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
StateProxy::Copy(
CopyProcess *process,
StateProxy *state
)
{
Check_Object(this);
Check_Object(process);
Check_Object(state);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(state);
if (!process->continueProcess)
return;
bool onOff;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (state->GetName(&name))
SetName(name);
AlphaMode alphaMode;
if(state->GetAlpha(&alphaMode))
SetAlpha(alphaMode);
SetAlphaChildPermission(state->GetAlphaChildPermission());
FilterMode filterMode;
if(state->GetFilter(&filterMode))
SetFilter(filterMode);
SetFilterChildPermission(state->GetFilterChildPermission());
FogMode fogMode;
if(state->GetFog(&fogMode))
SetFog(fogMode);
SetFogChildPermission(state->GetFogChildPermission());
if(state->GetDither(&onOff))
SetDither(onOff);
SetDitherChildPermission(state->GetDitherChildPermission());
if(state->GetSpecular(&onOff))
SetSpecular(onOff);
SetSpecularChildPermission(state->GetSpecularChildPermission());
if(state->GetTextureCorrection(&onOff))
SetTextureCorrection(onOff);
SetTextureCorrectionChildPermission(state->GetTextureCorrectionChildPermission());
TextureWrapMode textureWrapMode;
if(state->GetTextureWrap(&textureWrapMode))
SetTextureWrap(textureWrapMode);
SetTextureWrapChildPermission(state->GetTextureWrapChildPermission());
WireFrameMode wireFrameMode;
if(state->GetWireFrame(&wireFrameMode))
SetWireFrame(wireFrameMode);
SetWireFrameChildPermission(state->GetWireFrameChildPermission());
if(state->GetZBufferCompare(&onOff))
SetZBufferCompare(onOff);
SetZBufferCompareChildPermission(state->GetZBufferCompareChildPermission());
if(state->GetZBufferWrite(&onOff))
SetZBufferWrite(onOff);
SetZBufferWriteChildPermission(state->GetZBufferWriteChildPermission());
if(state->GetFlatColoring(&onOff))
SetFlatColoring(onOff);
SetFlatColoringChildPermission(state->GetFlatColoringChildPermission());
if(state->GetBackface(&onOff))
SetBackface(onOff);
SetBackfaceChildPermission(state->GetBackfaceChildPermission());
int priority;
if(state->GetPriority(&priority))
SetPriority(priority);
SetPriorityChildPermission(state->GetPriorityChildPermission());
int lightingMode;
if(state->GetLighting(&lightingMode))
SetLighting(lightingMode);
SetLightingChildPermission(state->GetLightingChildPermission());
bool bFlatColor;
if (state->GetFlatColoring(&bFlatColor))
SetFlatColoring(bFlatColor);
//
//------------------------
// Copy the specular color
//------------------------
//
RGBColor color;
if (state->GetSpecularColor(&color))
{
SetSpecularColor(color);
SetSpecularShininess(state->GetSpecularShininess());
}
//
//-----------------
// Copy the texture
//-----------------
//
TextureProxy *texture = state->UseTextureProxy();
if (texture)
{
TextureProxy *our_texture = SetToMatchTextureProxy(texture);
our_texture->DetachReference();
texture->DetachReference();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
GroupProxy::Copy(
CopyProcess *process,
GroupProxy *group
)
{
Check_Object(this);
Check_Object(process);
Check_Object(group);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(group);
if (!process->continueProcess)
return;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (group->GetName(&name))
SetName(name);
//
//-------------------
// Copy the transform
//-------------------
//
LinearMatrix4D matrix;
if (group->GetLocalToParent(&matrix))
SetLocalToParent(matrix);
//
//---------------------------------------------------------
// For each child in the source, copy it to the destination
//---------------------------------------------------------
//
ChildProxy *child = group->UseFirstChildProxy();
while (child)
{
Check_Object(child);
ChildProxy *proxy = AppendMatchingChildProxy(process, child);
if (proxy)
proxy->DetachReference();
ChildProxy *next = child->UseNextSiblingProxy();
child->DetachReference();
if (process->continueProcess)
child = next;
else if (next)
{
Check_Object(next);
next->DetachReference();
break;
}
else
break;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
LightProxy::Copy(
CopyProcess *process,
LightProxy *light
)
{
Check_Object(this);
Check_Object(process);
Check_Object(light);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(light);
if (!process->continueProcess)
return;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (light->GetName(&name))
SetName(name);
//
//---------------
// Copy the color
//---------------
//
RGBColor color;
light->GetColor(&color);
SetColor(color);
//
//------------------------
// Handle the ambient case
//------------------------
//
if (light->IsAmbient())
SetAmbient(true);
//
//-------------------
// Copy the transform
//-------------------
//
else
{
LinearMatrix4D matrix;
if (light->GetLocalToParent(&matrix))
SetLocalToParent(matrix);
//
//----------------------------------------------------------------------
// Deal with falloff. Only lights with falloff can have a spread angle,
// and if the light has no falloff, it must be infinite
//----------------------------------------------------------------------
//
Scalar n, f;
if (light->GetFalloffDistance(&n, &f))
{
SetFalloffDistance(n, f);
Radian spread;
if (light->GetSpreadAngle(&spread))
SetSpreadAngle(spread);
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
VertexProxy::Copy(
CopyProcess *process,
VertexProxy *vertex
)
{
Check_Object(this);
Check_Object(process);
Check_Object(vertex);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(vertex);
if (!process->continueProcess)
return;
//
//------------------
// Copy the position
//------------------
//
Point3D position;
vertex->GetPosition(&position);
SetPosition(position);
//
//-------------------------------
// Copy the color if there is one
//-------------------------------
//
RGBAColor color;
if (vertex->GetColor(&color))
SetColor(color);
//
//--------------------------------
// Copy the normal if there is one
//--------------------------------
//
Normal3D normal;
if (vertex->GetNormal(&normal))
SetNormal(normal);
//
//--------------------------------
// Copy the uv if there is one
//--------------------------------
//
Stuff::DynamicArrayOf<Stuff::Vector2DOf<Stuff::Scalar> > uv;
if (vertex->GetUVs(&uv))
SetUVs(uv);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
PolygonMeshProxy::Copy(
CopyProcess *process,
PolygonMeshProxy *mesh
)
{
Check_Object(this);
Check_Object(mesh);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(mesh);
if (!process->continueProcess)
return;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (mesh->GetName(&name))
{
SetName(name);
}
//
//-------------------
// Copy the transform
//-------------------
//
LinearMatrix4D matrix;
if (mesh->GetLocalToParent(&matrix))
{
SetLocalToParent(matrix);
}
//
//---------------------------------------------------------------
// Get the polygons of the source mesh, then analyze their states
//---------------------------------------------------------------
//
DynamicArrayOf<PolygonProxy*> source_polygons;
#if defined(_ARMOR)
unsigned total_polys =
#endif
mesh->UsePolygonArray(&source_polygons);
Verify(total_polys == source_polygons.GetLength());
AddPolygons(process, source_polygons);
mesh->DetachArrayReferences(&source_polygons);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
TextureLibrary::Copy(
CopyProcess *process,
TextureLibrary *library
)
{
Check_Object(this);
Check_Object(process);
Check_Object(library);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(this);
if (!process->continueProcess)
return;
//
//------------------------------------------------------------------
// For each texture, copy the source mesh texture to the destination
//------------------------------------------------------------------
//
TextureProxy *other_texture = library->UseFirstTextureProxy();
while (other_texture)
{
Check_Object(other_texture);
TextureProxy *texture = UseMatchingTextureProxy(other_texture);
texture->DetachReference();
TextureProxy *next = other_texture->UseNextTextureProxyInLibrary();
other_texture->DetachReference();
if (process->continueProcess)
other_texture = next;
else if (next)
{
Check_Object(next);
next->DetachReference();
break;
}
else
break;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
SceneProxy::Copy(
CopyProcess *process,
SceneProxy *scene
)
{
Check_Object(this);
Check_Object(process);
Check_Object(scene);
//
//---------------------------------------
// Make sure that the process says its OK
//---------------------------------------
//
process->CopyCallback(scene);
if (!process->continueProcess)
return;
//
//--------------
// Copy the name
//--------------
//
MString name;
if (scene->GetName(&name))
SetName(name);
//
//---------------------------------------------------------
// For each child in the source, copy it to the destination
//---------------------------------------------------------
//
ChildProxy *child = scene->UseFirstChildProxy();
while (child)
{
Check_Object(child);
ChildProxy *proxy = AppendMatchingChildProxy(process, child);
if (proxy)
proxy->DetachReference();
ChildProxy *next = child->UseNextSiblingProxy();
child->DetachReference();
if (process->continueProcess)
child = next;
else if (next)
{
Check_Object(next);
next->DetachReference();
break;
}
else
break;
}
}