AllocateTempModel will just return null if there are no free tempmodels

Removed timealive parameter
Using T_SPHERE instead of T_INWARDSPHERE
Using T2_RELATIVEANGLES
This commit is contained in:
smallmodel 2023-07-22 15:22:54 +02:00
parent e97250875c
commit 751283aeb5
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512

View file

@ -49,13 +49,12 @@ ctempmodel_t *ClientGameCommandManager::AllocateTempModel(void)
{ {
ctempmodel_t *p; ctempmodel_t *p;
if (!m_free_tempmodels) { p = m_free_tempmodels;
// no free entities, so free the one at the end of the chain if (!p) {
// remove the oldest active entity // no free entities
FreeTempModel(m_active_tempmodels.prev); return NULL;
} }
p = m_free_tempmodels;
m_free_tempmodels = m_free_tempmodels->next; m_free_tempmodels = m_free_tempmodels->next;
// link into the active list // link into the active list
@ -953,7 +952,7 @@ void ClientGameCommandManager::SpawnTempModel(int count, spawnthing_t *sp)
//================= //=================
// SpawnTempModel // SpawnTempModel
//================= //=================
void ClientGameCommandManager::SpawnTempModel(int mcount, int timeAlive) void ClientGameCommandManager::SpawnTempModel(int mcount)
{ {
int i; int i;
ctempmodel_t *p; ctempmodel_t *p;
@ -1047,7 +1046,7 @@ void ClientGameCommandManager::SpawnTempModel(int mcount, int timeAlive)
newForward = p->cgd.origin - m_spawnthing->cgd.origin; newForward = p->cgd.origin - m_spawnthing->cgd.origin;
newForward.normalize(); newForward.normalize();
} }
} else if (m_spawnthing->cgd.flags & T_INWARDSPHERE) { } else if (m_spawnthing->cgd.flags & T_SPHERE) {
// Project the origin along a random ray, and set the forward // Project the origin along a random ray, and set the forward
// vector pointing back to the origin // vector pointing back to the origin
Vector dir, end; Vector dir, end;
@ -1217,11 +1216,7 @@ void ClientGameCommandManager::SpawnTempModel(int mcount, int timeAlive)
// If createTime is specified, the use it. Otherwise use the createTime // If createTime is specified, the use it. Otherwise use the createTime
// from the spawnthing. // from the spawnthing.
if (timeAlive > 0) { p->aliveTime = 0;
p->aliveTime = timeAlive;
} else {
p->aliveTime = 0;
}
// If animateonce is set, set the life = to the length of the anim // If animateonce is set, set the life = to the length of the anim
if ((m_spawnthing->cgd.flags & T_ANIMATEONCE) && (p->ent.frameInfo[0].index > 0)) { if ((m_spawnthing->cgd.flags & T_ANIMATEONCE) && (p->ent.frameInfo[0].index > 0)) {
@ -1414,5 +1409,15 @@ void ClientGameCommandManager::SpawnTempModel(int mcount, int timeAlive)
FreeTempModel(p); FreeTempModel(p);
break; break;
} }
if (m_spawnthing->cgd.flags2 & T2_RELATIVEANGLES) {
float mat[3][3];
MatrixMultiply(m_spawnthing->axis, p->ent.axis, mat);
VectorCopy(mat[0], p->ent.axis[0]);
VectorCopy(mat[1], p->ent.axis[1]);
VectorCopy(mat[2], p->ent.axis[2]);
MatrixToEulerAngles(p->ent.axis, p->cgd.angles);
}
} }
} }