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

156 lines
4.1 KiB
C++

#include "MAXProxyHeaders.hpp"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
FindMAXErrors::FindMAXErrors(Stuff::NotationFile *data_file,
Interface *i,
int p,
bool bSuppress,
LPVOID fcn
):
FindErrorsProcess(data_file,bSuppress,fcn),
autoSelect(false),
iPointer(i),
progress(p)
{
Check_Object(data_file);
Page *page = data_file->FindPage("FindErrors");
if (page) {
page->GetEntry("Verbose", &suppress);
suppress = !suppress;
}
}
typedef int (*LPERROR_CALLBACKFN)(char *,bool);
void
FindMAXErrors::FindErrorsCallback(
Proxies::GenericProxy *proxy,
int type
)
{
Check_Object(this);
Check_Object(proxy);
//
//--------------------------------------------
// Do what we can based upon the type of error
//--------------------------------------------
//
MString name;
char buffer[200];
switch (type)
{
case StatusCheck:
//
//----------------------------
// Print the name of the proxy
//----------------------------
//
proxy->GetName(&name);
if (!suppress)
{
sprintf(buffer, "Checking %s for errors...", (char*)name);
iPointer->ProgressUpdate(++progress,false,_T(buffer));
}
//
//-------------------------------------------------------------
// If this is a polygon mesh, we need to clear out the tags and
// selections prior to it running
//-------------------------------------------------------------
//
if (autoSelect && proxy->IsDerivedFrom(MAXPolygonMesh::DefaultData))
{
//
//--------------------------------------------
// Clear all the tagged vertices from the mesh
//--------------------------------------------
//
MAXPolygonMesh *mesh = Cast_Object(MAXPolygonMesh*, proxy);
const INode *scene = mesh->GetSceneProxy()->GetProxiedScene();
Check_Pointer(scene);
}
return;
//
//-------------------------------------------------------------------------
// Handle the texture problem. For now, we will just print out the info to
// the status line
//-------------------------------------------------------------------------
//
case ERROR_Bad_Texture_Size:
{
Proxies::TextureProxy *texture = Cast_Object(Proxies::TextureProxy*, proxy);
texture->GetName(&name);
sprintf(buffer, "%s: Missing or has bad textures size!", (char*)name);
}
break;
//
//--------------------------------------------------
// For polygon errors, we need to select the polygon
//--------------------------------------------------
//
case ERROR_Bad_Normal:
{
sprintf(buffer, "%s: Has bad normals", name);
}
break;
case ERROR_Mismatched_Vertex_Colors:
{
sprintf(buffer, "%s: Has mismatched vertex colors", (char*)name);
}
break;
case ERROR_Mismatched_UVs:
{
sprintf(buffer, "%s: Has mismatched UVs", (char*)name);
}
break;
case ERROR_Mismatched_Normals:
{
sprintf(buffer, "%s: Has mismatched normals", (char*)name);
}
break;
case ERROR_Duplicate_Vertex:
{
MAXProxies::MAXPolygon *polygon = Cast_Object(MAXProxies::MAXPolygon*, proxy);
MAXProxies::MAXPolygonMesh *mesh = polygon->GetPolygonMeshProxy();
INode *pNode = mesh->GetProxiedMesh();
char *name = pNode->GetName();
sprintf(buffer, "%s: Has duplicate vertex", (char*)name);
}
break;
case ERROR_Degenerate_Polygon:
{
MAXProxies::MAXPolygon *polygon = Cast_Object(MAXProxies::MAXPolygon*, proxy);
MAXProxies::MAXPolygonMesh *mesh = polygon->GetPolygonMeshProxy();
INode *pNode = mesh->GetProxiedMesh();
char *name = pNode->GetName();
sprintf(buffer, "%s: Has degenerate polygon", (char*)name);
}
break;
case ERROR_Noncoplanar_Polygon:
{
sprintf(buffer, "%s: Has noncoplanar polygon", (char*)name);
}
break;
case ERROR_Nonconvex_Polygon:
{
sprintf(buffer, "%s: Has nonconvex polygon", (char*)name);
}
break;
}
if (errorfn)
{
LPERROR_CALLBACKFN fcn = (LPERROR_CALLBACKFN)errorfn;
fcn(buffer,suppress);
}
else
MessageBox(iPointer->GetMAXHWnd(),_T(buffer),_T("Oh Shit!"),MB_OK);
}