typedef struct
{
var x;
var y;
var z;
}VERTEX;
typedef struct
{
var weight;
var num_points; //Number of Verts in the Mesh
VERTEX* morph[5000];
}MORPH;
function morph_target(ENTITY* ent)
{
VECTOR Current; //Current Mesh Vert Pos
VECTOR Target0; //Morph1 Vert Pos
VECTOR Target1; //Morph2 Vert Pos
VECTOR Base; //Base or unchanged mesh vert pos
VECTOR Diff;
VECTOR m;
var a;
mt.weight = value;
//Curent Vertex Postion
CONTACT* c = ent_getvertex(pc.mdl_Head,NULL,a);
for(a=1;a<mt.num_points;a++)
{
//Base Model Postions
Base.x = RFMORPH.morph[a].x;
Base.y = RFMORPH.morph[a].y;
Base.z = RFMORPH.morph[a].z;
//Target Morph Postion
Target0.x = MORPH1.morph[a].x;
Target0.y = MORPH1.morph[a].y;
Target0.z = MORPH1.morph[a].z;
Target1.x = MORPH2.morph[a].x;
Target1.y = MORPH2.morph[a].y;
Target1.z = MORPH2.morph[a].z;
vec_set(m.x,Base.x);
vec_lerp(Diff.x,Base.x,Target0.x,MORPH1.weight);
m.x += Diff.x - Base.x;
m.y += Diff.y - Base.y;
m.z += Diff.z - Base.z;
vec_lerp(Diff.x,Base.x,Target1.x,MORPH2.weight);
m.x += Diff.x - Base.x;
m.y += Diff.y - Base.y;
m.z += Diff.z - Base.z;
c.v = NULL;
c.x = m.x;
c.y = m.y;
c.z = m.z;
ent_setvertex(pc.mdl_Head,c,a);
}
ent_fixnormals(pc.mdl_Head,0);
c_updatehull(pc.mdl_Head,0);
}