Integrating github/staging through commit ab87ed9

This commit is contained in:
alexpete
2021-04-09 11:27:37 -07:00
parent ae62a97894
commit 1044dc3da1
1582 changed files with 29374 additions and 519051 deletions
+209 -104
View File
@@ -148,8 +148,17 @@ int CStatObj::SetDeformationMorphTarget(IStatObj* pDeformed)
{
((CStatObj*)pDeformed)->MakeRenderMesh();
}
if (!(pMeshA = GetRenderMesh()) || !(pMeshB = pDeformed->GetRenderMesh()) ||
!(pFaceToFace0A = m_pMapFaceToFace0) || !(pFaceToFace0B = ((CStatObj*)pDeformed)->m_pMapFaceToFace0))
if (!(pMeshA = GetRenderMesh()) || !(pMeshB = pDeformed->GetRenderMesh()))
{
return 0;
}
pFaceToFace0A = m_pMapFaceToFace0;
if (!pFaceToFace0A)
{
return 0;
}
pFaceToFace0B = ((CStatObj*)pDeformed)->m_pMapFaceToFace0;
if (!pFaceToFace0B)
{
return 0;
}
@@ -1088,11 +1097,20 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
for (i = 0; i < nObj; i++)
{
if ((pSubObj = GetSubObject(i))->nType == STATIC_SUB_OBJECT_MESH && pSubObj->pStatObj && pSubObj->pStatObj->GetPhysGeom() &&
pSubObj->bHidden &&
(!strncmp(pSubObj->name, "childof_", 8) && (pSubObj1 = FindSubObject((const char*)pSubObj->name + 8)) ||
(pSubObj1 = GetSubObject(pSubObj->nParent)) && strstr(pSubObj1->properties, "group")))
pSubObj->bHidden && (!strncmp(pSubObj->name, "childof_", 8)))
{
pSubObj->bHidden = pSubObj1->bHidden;
pSubObj1 = FindSubObject((const char*)pSubObj->name + 8);
if (pSubObj1)
{
pSubObj1 = GetSubObject(pSubObj->nParent);
if (pSubObj1)
{
if (strstr(pSubObj1->properties, "group"))
{
pSubObj->bHidden = pSubObj1->bHidden;
}
}
}
}
}
@@ -1127,12 +1145,19 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
float mindist = 1e10f, curdist;
for (j = 0, i0 = i; j < nObj; j++)
{
if (j != i && (pSubObj1 = GetSubObject(j)) && pSubObj1->pStatObj && ((CStatObj*)pSubObj1->pStatObj)->m_nRenderTrisCount > 0 &&
(curdist = (pSubObj1->localTM * (((CStatObj*)pSubObj1->pStatObj)->m_vBoxMin +
((CStatObj*)pSubObj1->pStatObj)->m_vBoxMax) * 0.5f - center).len2()) < mindist)
if (j != i)
{
mindist = curdist;
i0 = j;
pSubObj1 = GetSubObject(j);
if (pSubObj1 && pSubObj1->pStatObj && ((CStatObj*)pSubObj1->pStatObj)->m_nRenderTrisCount > 0)
{
curdist = (pSubObj1->localTM * (((CStatObj*)pSubObj1->pStatObj)->m_vBoxMin +
((CStatObj*)pSubObj1->pStatObj)->m_vBoxMax) * 0.5f - center).len2();
if (curdist < mindist)
{
mindist = curdist;
i0 = j;
}
}
}
}
pSubObj->pStatObj->GetPhysGeom()->pGeom->SetForeignData(GetSubObject(i0)->pStatObj, 0);
@@ -1357,7 +1382,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.axisx = pMtx->TransformVector(psj.axisx).normalized();
}
if ((pval = strstr(properties, "limit")) && (pval - 11 < properties - 11 || strncmp(pval - 11, "constraint_", 11)))
pval = strstr(properties, "limit");
if (pval && (pval - 11 < properties - 11 || strncmp(pval - 11, "constraint_", 11)))
{
for (pval += 5; *pval && !isdigit(*pval); pval++)
{
@@ -1373,7 +1399,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
// psj.maxForcePush = psj.maxForcePull*2.5f;
psj.bBreakable = 1;
}
if (pval = strstr(properties, "twist"))
pval = strstr(properties, "twist");
if (pval)
{
for (pval += 5; *pval && !isdigit(*pval); pval++)
{
@@ -1384,7 +1411,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.maxTorqueTwist = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "bend"))
pval = strstr(properties, "bend");
if (pval)
{
for (pval += 4; *pval && !isdigit(*pval); pval++)
{
@@ -1395,7 +1423,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.maxTorqueBend = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "push"))
pval = strstr(properties, "push");
if (pval)
{
for (pval += 4; *pval && !isdigit(*pval); pval++)
{
@@ -1406,7 +1435,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.maxForcePush = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "pull"))
pval = strstr(properties, "pull");
if (pval)
{
for (pval += 4; *pval && !isdigit(*pval); pval++)
{
@@ -1417,7 +1447,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.maxForcePull = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "shift"))
pval = strstr(properties, "shift");
if (pval)
{
for (pval += 5; *pval && !isdigit(*pval); pval++)
{
@@ -1428,7 +1459,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.maxForceShift = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "damage_accum"))
pval = strstr(properties, "damage_accum");
if (pval)
{
for (pval += 5; *pval && !isdigit(*pval); pval++)
{
@@ -1439,7 +1471,8 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.damageAccum = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "damage_accum_threshold"))
pval = strstr(properties, "damage_accum_threshold");
if (pval)
{
for (pval += 5; *pval && !isdigit(*pval); pval++)
{
@@ -1470,50 +1503,101 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
psj.bDirectBreaksOnly = strstr(properties, "hits_only") != 0;
psj.limitConstraint.zero();
psj.bConstraintWillIgnoreCollisions = 1;
if ((len = 16, pval = strstr(properties, "constraint_limit")) || (len = 5, pval = strstr(properties, "C_lmt")))
len = 16;
pval = strstr(properties, "constraint_limit");
if (pval)
{
for (pval += len; *pval && !isdigit(*pval); pval++)
{
;
}
for (pval += len; *pval && !isdigit(*pval); pval++);
if (pval)
{
psj.limitConstraint.z = aznumeric_caster(atof(pval));
}
}
if ((len = 17, pval = strstr(properties, "constraint_minang")) || (len = 5, pval = strstr(properties, "C_min")))
else
{
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++)
len = 5;
pval = strstr(properties, "C_lmt");
if (pval)
{
;
for (pval += len; *pval && !isdigit(*pval); pval++)
;
if (pval)
{
psj.limitConstraint.z = aznumeric_caster(atof(pval));
}
}
}
len = 17;
pval = strstr(properties, "constraint_minang");
if (pval)
{
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++);
if (pval)
{
psj.limitConstraint.x = aznumeric_caster(DEG2RAD(atof(pval)));
}
}
if ((len = 17, pval = strstr(properties, "constraint_maxang")) || (len = 5, pval = strstr(properties, "C_max")))
else
{
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++)
len = 5;
pval = strstr(properties, "C_min");
if (pval)
{
;
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++)
;
if (pval)
{
psj.limitConstraint.x = aznumeric_caster(DEG2RAD(atof(pval)));
}
}
}
len = 17;
pval = strstr(properties, "constraint_maxang");
if (pval)
{
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++);
if (pval)
{
psj.limitConstraint.y = aznumeric_caster(DEG2RAD(atof(pval)));
}
}
if ((len = 18, pval = strstr(properties, "constraint_damping")) || (len = 5, pval = strstr(properties, "C_dmp")))
else
{
for (pval += len; *pval && !isdigit(*pval); pval++)
len = 5;
pval = strstr(properties, "C_max");
if (pval)
{
;
for (pval += len; *pval && !isdigit(*pval) && *pval != '-'; pval++);
if (pval)
{
psj.limitConstraint.y = aznumeric_caster(DEG2RAD(atof(pval)));
}
}
}
len = 18;
pval = strstr(properties, "constraint_damping");
if (pval)
{
for (pval += len; *pval && !isdigit(*pval); pval++);
if (pval)
{
psj.dampingConstraint = aznumeric_caster(atof(pval));
}
}
else
{
len = 5;
pval = strstr(properties, "C_dmp");
if (pval)
{
for (pval += len; *pval && !isdigit(*pval); pval++);
if (pval)
{
psj.dampingConstraint = aznumeric_caster(atof(pval));
}
}
}
if (strstr(properties, "constraint_collides") || strstr(properties, "C_coll"))
{
psj.bConstraintWillIgnoreCollisions = 0;
@@ -1565,94 +1649,107 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
for (i = 0; i < nObj; i++)
{
if ((pSubObj = GetSubObject(i))->nType == STATIC_SUB_OBJECT_MESH && pSubObj->pStatObj && pSubObj->pStatObj->GetPhysGeom() && !pSubObj->bHidden &&
!strncmp(pSubObj->name, "skeleton_", 9) && (pSubObj1 = FindSubObject((const char*)pSubObj->name + 9)))
!strncmp(pSubObj->name, "skeleton_", 9))
{
pe_params_skeleton ps;
properties = szPropsOverride ? szPropsOverride : (const char*)pSubObj->properties;
if (pval = strstr(properties, "stiffness"))
pSubObj1 = FindSubObject((const char*)pSubObj->name + 9);
if (pSubObj1)
{
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
}
pe_params_skeleton ps;
properties = szPropsOverride ? szPropsOverride : (const char*)pSubObj->properties;
pval = strstr(properties, "stiffness");
if (pval)
{
ps.stiffness = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "thickness"))
{
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.stiffness = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "thickness");
if (pval)
{
ps.thickness = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "max_stretch"))
{
for (pval += 11; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.thickness = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "max_stretch");
if (pval)
{
ps.maxStretch = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "max_impulse"))
{
for (pval += 11; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 11; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.maxStretch = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "max_impulse");
if (pval)
{
ps.maxImpulse = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "skin_dist"))
{
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 11; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.maxImpulse = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "skin_dist");
if (pval)
{
pp.minContactDist = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "hardness"))
{
for (pval += 8; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 9; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
pp.minContactDist = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "hardness");
if (pval)
{
ps.hardness = aznumeric_caster(atof(pval));
}
}
if (pval = strstr(properties, "explosion_scale"))
{
for (pval += 15; *pval && !isdigit(*pval); pval++)
{
;
for (pval += 8; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.hardness = aznumeric_caster(atof(pval));
}
}
pval = strstr(properties, "explosion_scale");
if (pval)
{
ps.explosionScale = aznumeric_caster(atof(pval));
for (pval += 15; *pval && !isdigit(*pval); pval++)
{
;
}
if (pval)
{
ps.explosionScale = aznumeric_caster(atof(pval));
}
}
}
pp.partid = ps.partid = aznumeric_cast<int>((pSubObj1 - &m_subObjects[0])) + id0;
pp.idSkeleton = i + id0;
pent->SetParams(&pp);
pent->SetParams(&ps);
((CStatObj*)pSubObj1->pStatObj)->PrepareSkinData(pSubObj1->localTM.GetInverted() * pSubObj->localTM, pSubObj->pStatObj->GetPhysGeom()->pGeom,
is_unused(pp.minContactDist) ? 0.0f : pp.minContactDist);
pp.partid = ps.partid = aznumeric_cast<int>((pSubObj1 - &m_subObjects[0])) + id0;
pp.idSkeleton = i + id0;
pent->SetParams(&pp);
pent->SetParams(&ps);
((CStatObj*)pSubObj1->pStatObj)
->PrepareSkinData(
pSubObj1->localTM.GetInverted() * pSubObj->localTM, pSubObj->pStatObj->GetPhysGeom()->pGeom,
is_unused(pp.minContactDist) ? 0.0f : pp.minContactDist);
}
}
}
}
@@ -1660,14 +1757,22 @@ int CStatObj::PhysicalizeSubobjects(IPhysicalEntity* pent, const Matrix34* pMtx,
new(&pp)pe_params_part;
for (i = 0; i < nObj; i++)
{
if ((pSubObj = GetSubObject(i))->nType == STATIC_SUB_OBJECT_MESH && pSubObj->pStatObj && pSubObj->pStatObj->GetPhysGeom() && !pSubObj->bHidden &&
(!strncmp(pSubObj->name, "childof_", 8) && (pSubObj1 = FindSubObject((const char*)pSubObj->name + 8)) ||
(pSubObj1 = GetSubObject(pSubObj->nParent)) && strstr(pSubObj1->properties, "group")))
pSubObj = GetSubObject(i);
if (pSubObj->nType == STATIC_SUB_OBJECT_MESH && pSubObj->pStatObj && pSubObj->pStatObj->GetPhysGeom() && !pSubObj->bHidden &&
!strncmp(pSubObj->name, "childof_", 8))
{
pp.partid = i + id0;
pp.idParent = aznumeric_caster(pSubObj1 - &m_subObjects[0]);
pent->SetParams(&pp);
pSubObj->bHidden = true;
pSubObj1 = FindSubObject((const char*)pSubObj->name + 8);
if (pSubObj1)
{
pSubObj1 = GetSubObject(pSubObj->nParent);
if (pSubObj1 && strstr(pSubObj1->properties, "group"))
{
pp.partid = i + id0;
pp.idParent = aznumeric_caster(pSubObj1 - &m_subObjects[0]);
pent->SetParams(&pp);
pSubObj->bHidden = true;
}
}
}
}