This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/ww3d2/meshdam.cpp

266 lines
No EOL
11 KiB
C++

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : WW3D *
* *
* $Archive:: /Commando/Code/ww3d2/meshdam.cpp $*
* *
* Author:: Greg_h *
* *
* $Modtime:: 1/08/01 10:04a $*
* *
* $Revision:: 1 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#if 0
#include "meshdam.h"
#include "w3d_file.h"
#include "w3derr.h"
#include "chunkio.h"
//#include <sr.hpp>
/***********************************************************************************************
* DamageClass::DamageClass -- constructor *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 10/28/1997 GH : Created. *
*=============================================================================================*/
DamageClass::DamageClass(void):
DamageIndex(0),
NumMaterials(0),
NumVerts(0),
NumColors(0),
Verts(NULL),
Colors(NULL)
{
}
/***********************************************************************************************
* DamageClass::~DamageClass -- destructor *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 10/28/1997 GH : Created. *
*=============================================================================================*/
DamageClass::~DamageClass(void)
{
if (Verts != NULL) {
delete [] Verts;
Verts = NULL;
}
if (Colors != NULL) {
delete[] Colors;
Colors = NULL;
}
}
/***********************************************************************************************
* DamageClass::Load -- load damage data from a W3D file *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 10/28/1997 GH : Created. *
*=============================================================================================*/
WW3DErrorType DamageClass::Load(ChunkLoadClass & cload,MeshModelClass * basemesh)
{
#if 0
/*
** Open the first chunk, it should be the damage header
*/
cload.Open_Chunk();
if (cload.Cur_Chunk_ID() != W3D_CHUNK_DAMAGE_HEADER) {
return WW3D_ERROR_LOAD_FAILED;
}
W3dMeshDamageStruct header;
if (cload.Read(&header,sizeof(W3dMeshDamageStruct)) != sizeof(W3dMeshDamageStruct)) {
return WW3D_ERROR_LOAD_FAILED;
}
cload.Close_Chunk();
/*
** allocate the arrays based on the info in the header
*/
NumVerts = header.NumDamageVerts;
if (NumVerts > 0) {
Verts = new DamageVertexStruct[NumVerts];
}
NumColors = header.NumDamageColors;
if (NumColors > 0) {
Colors = new DamageColorStruct[NumColors];
}
// TODO: allocate materials
/*
** Now read in the rest of the chunks
*/
while (1) {
/*
** Read in the chunk header
** If there are no more chunks within the chunk, we are done.
*/
if (!cload.Open_Chunk()) {
return WW3D_ERROR_OK;
}
/*
** Process the chunk
*/
int error = WW3D_ERROR_OK;
switch (cload.Cur_Chunk_ID()) {
// case W3D_CHUNK_DAMAGE_MATERIALS:
// //TODO: read new set of materials
// break;
case W3D_CHUNK_DAMAGE_VERTICES:
error = read_vertices(cload,basemesh);
break;
case W3D_CHUNK_DAMAGE_COLORS:
error = read_colors(cload,basemesh);
break;
default:
break;
}
cload.Close_Chunk();
if (error != WW3D_ERROR_OK) {
return error;
}
}
#endif
return WW3D_ERROR_OK;
}
/***********************************************************************************************
* DamageClass::read_vertices -- read damage vertices from a W3D file *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 11/04/1997 GH : Created. *
*=============================================================================================*/
WW3DErrorType DamageClass::read_vertices(ChunkLoadClass & cload,MeshModelClass * basemesh)
{
#if 0
W3dMeshDamageVertexStruct dv;
for (int i=0; i<NumVerts; i++) {
if (cload.Read(&dv,sizeof(W3dMeshDamageVertexStruct)) != sizeof(W3dMeshDamageVertexStruct)) {
return WW3D_ERROR_LOAD_FAILED;
}
srVector3 * vert_array = basemesh->getVertexLoc();
srVector3 sr_v;
sr_v = vert_array[dv.VertexIndex];
Verts[i].VertexIdx = dv.VertexIndex;
Verts[i].Vertex0.Set(sr_v[0],sr_v[1],sr_v[2]);
Verts[i].Vertex1.Set(dv.NewVertex.X,dv.NewVertex.Y,dv.NewVertex.Z);
}
#endif
return WW3D_ERROR_OK;
}
/***********************************************************************************************
* DamageClass::read_colors -- read damage colors from a w3d file *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 11/04/1997 GH : Created. *
*=============================================================================================*/
WW3DErrorType DamageClass::read_colors(ChunkLoadClass & cload,MeshModelClass * basemesh)
{
#if 0
W3dMeshDamageColorStruct dc;
for (int i=0; i<NumColors; i++) {
if (cload.Read(&dc,sizeof(W3dMeshDamageColorStruct)) != sizeof(W3dMeshDamageColorStruct)) {
return WW3D_ERROR_LOAD_FAILED;
}
Colors[i].VertexIdx = dc.VertexIndex;
// TODO: check for existing vertex colors, store original here
Colors[i].Color0.R = 255;
Colors[i].Color0.G = 255;
Colors[i].Color0.B = 255;
Colors[i].Color1.R = dc.NewColor.R;
Colors[i].Color1.G = dc.NewColor.G;
Colors[i].Color1.B = dc.NewColor.B;
}
#endif
return WW3D_ERROR_OK;
}
#endif //0