mirror of
https://github.com/electronicarts/CnC_Generals_Zero_Hour.git
synced 2025-12-16 23:51:41 -05:00
Initial commit of Command & Conquer Generals and Command & Conquer Generals Zero Hour source code.
This commit is contained in:
162
GeneralsMD/Code/Tools/WW3D/max2w3d/skindata.h
Normal file
162
GeneralsMD/Code/Tools/WW3D/max2w3d/skindata.h
Normal file
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
** Command & Conquer Generals Zero Hour(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/>.
|
||||
*/
|
||||
|
||||
/* $Header: /Commando/Code/Tools/max2w3d/skindata.h 6 10/28/97 6:08p Greg_h $ */
|
||||
/***********************************************************************************************
|
||||
*** Confidential - Westwood Studios ***
|
||||
***********************************************************************************************
|
||||
* *
|
||||
* Project Name : Commando Tools - WWSkin *
|
||||
* *
|
||||
* $Archive:: /Commando/Code/Tools/max2w3d/skindata.h $*
|
||||
* *
|
||||
* $Author:: Greg_h $*
|
||||
* *
|
||||
* $Modtime:: 10/21/97 2:04p $*
|
||||
* *
|
||||
* $Revision:: 6 $*
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
|
||||
#ifndef SKINDATA_H
|
||||
#define SKINDATA_H
|
||||
|
||||
#include "Max.h"
|
||||
#include "namedsel.h"
|
||||
|
||||
/*
|
||||
** InfluenceStruct - structure which stores the bone
|
||||
** influence information for a single vertex.
|
||||
*/
|
||||
struct InfluenceStruct
|
||||
{
|
||||
/*
|
||||
** vertices can be influenced by up to two bones.
|
||||
*/
|
||||
int BoneIdx[2];
|
||||
float BoneWeight[2];
|
||||
|
||||
InfluenceStruct(void) { BoneIdx[0] = -1; BoneIdx[1] = -1; BoneWeight[0] = 1.0f; BoneWeight[1] = 0.0f; }
|
||||
|
||||
void Set_Influence(int boneidx) {
|
||||
// TODO: make this actually let you set two bones with
|
||||
// weighting values. Need UI to furnish this info...
|
||||
BoneIdx[0] = boneidx;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
** SkinDataClass - a class which contains the bone influence data
|
||||
** for the modifier. One of these will be hung off of the
|
||||
** ModContext...
|
||||
*/
|
||||
class SkinDataClass : public LocalModData
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
SkinDataClass(void) { Held = FALSE; Valid = FALSE; }
|
||||
|
||||
SkinDataClass(Mesh *mesh)
|
||||
{
|
||||
VertSel = mesh->vertSel;
|
||||
VertData.SetCount(mesh->getNumVerts());
|
||||
for (int i=0; i<VertData.Count(); i++) {
|
||||
VertData[i].BoneIdx[0] = VertData[i].BoneIdx[1] = -1;
|
||||
VertData[i].BoneWeight[0] = 1.0f;
|
||||
VertData[i].BoneWeight[1] = 0.0f;
|
||||
}
|
||||
Valid = TRUE;
|
||||
Held = FALSE;
|
||||
}
|
||||
|
||||
void Invalidate() { Valid = FALSE; }
|
||||
|
||||
BOOL IsValid() { return Valid; }
|
||||
|
||||
void Validate(Mesh *mesh)
|
||||
{
|
||||
if (!Valid)
|
||||
{
|
||||
VertSel.SetSize(mesh->vertSel.GetSize(),1);
|
||||
VertData.SetCount(mesh->getNumVerts());
|
||||
Valid = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
virtual LocalModData * Clone(void)
|
||||
{
|
||||
SkinDataClass * newdata = new SkinDataClass();
|
||||
newdata->VertSel = VertSel;
|
||||
newdata->VertData = VertData;
|
||||
return newdata;
|
||||
}
|
||||
|
||||
void Add_Influence(int boneidx)
|
||||
{
|
||||
/*
|
||||
** Make this INode influence all currently selected vertices
|
||||
*/
|
||||
for (int i=0; i<VertData.Count(); i++) {
|
||||
if (VertSel[i]) {
|
||||
VertData[i].Set_Influence(boneidx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IOResult Save(ISave *isave);
|
||||
IOResult Load(ILoad *iload);
|
||||
|
||||
public:
|
||||
|
||||
BOOL Valid;
|
||||
BOOL Held;
|
||||
|
||||
/*
|
||||
** Current selection
|
||||
*/
|
||||
BitArray VertSel;
|
||||
|
||||
/*
|
||||
** Named selection sets
|
||||
*/
|
||||
NamedSelSetList VertSelSets;
|
||||
|
||||
/*
|
||||
** Vertex influence data
|
||||
*/
|
||||
Tab<InfluenceStruct> VertData;
|
||||
|
||||
/*
|
||||
** Load/Save chunk ID's
|
||||
*/
|
||||
enum {
|
||||
FLAGS_CHUNK = 0x0000,
|
||||
VERT_SEL_CHUNK = 0x0010,
|
||||
NAMED_SEL_SETS_CHUNK = 0x0020,
|
||||
INFLUENCE_DATA_CHUNK = 0x0030
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user