PropData: Add Nuclide specific extension that allows developers to specify which submodels to use when spawning 'BreakModel' gibs.
This commit is contained in:
parent
39854c0740
commit
1b6cb974ed
|
@ -123,7 +123,6 @@ int g_breakmodel_count;
|
||||||
var hashtable g_hashbreakmodel;
|
var hashtable g_hashbreakmodel;
|
||||||
|
|
||||||
void BreakModel_Spawn(vector pos, vector dir, vector spread, float speed, int count, string type);
|
void BreakModel_Spawn(vector pos, vector dir, vector spread, float speed, int count, string type);
|
||||||
void BreakModel_SpawnUnit(vector pos, vector dir, vector spread, float speed, string type);
|
|
||||||
|
|
||||||
/* necessary API functions */
|
/* necessary API functions */
|
||||||
//void BreakModel_Init(void);
|
//void BreakModel_Init(void);
|
||||||
|
|
|
@ -470,7 +470,7 @@ BreakModel_Spawn(vector smins, vector smaxs, vector dir, float speed, int count,
|
||||||
index = (int)hash_get(g_hashbreakmodel, type, -1);
|
index = (int)hash_get(g_hashbreakmodel, type, -1);
|
||||||
|
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
crossprint(sprintf("^1 BreakModel_Spawn: type %s is not defined\n", type));
|
crossprint(sprintf("^1BreakModel_Spawn: type %s is not defined\n", type));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,8 +481,10 @@ BreakModel_Spawn(vector smins, vector smaxs, vector dir, float speed, int count,
|
||||||
vector endpos;
|
vector endpos;
|
||||||
string mname;
|
string mname;
|
||||||
float fadetime;
|
float fadetime;
|
||||||
entity gib;
|
NSRenderableEntity gib;
|
||||||
int r;
|
int r;
|
||||||
|
int p;
|
||||||
|
int bodygroup = 0;
|
||||||
|
|
||||||
/* pick a model between 0 and num) */
|
/* pick a model between 0 and num) */
|
||||||
r = floor(random(0, modelcount));
|
r = floor(random(0, modelcount));
|
||||||
|
@ -490,81 +492,37 @@ BreakModel_Spawn(vector smins, vector smaxs, vector dir, float speed, int count,
|
||||||
/* two entries, always have to skip by 2 */
|
/* two entries, always have to skip by 2 */
|
||||||
mname = argv((r * 2));
|
mname = argv((r * 2));
|
||||||
fadetime = stof(argv((r * 2) + 1));
|
fadetime = stof(argv((r * 2) + 1));
|
||||||
|
p = tokenizebyseparator(mname, "#");
|
||||||
|
|
||||||
|
/* special char # detected to designate model submodel count */
|
||||||
|
if (p == 2) {
|
||||||
|
mname = argv(0);
|
||||||
|
bodygroup = (int)floor(random(0, stof(argv(1)) + 1));
|
||||||
|
}
|
||||||
|
|
||||||
endpos[0] = smins[0] + ( random() * ( smaxs[0] - smins[0] ) );
|
endpos[0] = smins[0] + ( random() * ( smaxs[0] - smins[0] ) );
|
||||||
endpos[1] = smins[1] + ( random() * ( smaxs[1] - smins[1] ) );
|
endpos[1] = smins[1] + ( random() * ( smaxs[1] - smins[1] ) );
|
||||||
endpos[2] = smins[2] + ( random() * ( smaxs[2] - smins[2] ) );
|
endpos[2] = smins[2] + ( random() * ( smaxs[2] - smins[2] ) );
|
||||||
|
|
||||||
gib = spawn();
|
gib = spawn(NSRenderableEntity);
|
||||||
setmodel(gib, mname);
|
gib.SetModel(mname);
|
||||||
setsize(gib, [0,0,0], [0,0,0]);
|
gib.SetBody(bodygroup);
|
||||||
setorigin(gib, endpos);
|
gib.SetSize([0,0,0], [0,0,0]);
|
||||||
|
gib.SetOrigin(endpos);
|
||||||
makevectors(dir);
|
makevectors(dir);
|
||||||
gib.velocity = (v_forward * speed) * 0.75;
|
gib.velocity = (v_forward * speed) * 0.75;
|
||||||
gib.velocity[0] += (random() - 0.5) * (speed * 0.25);
|
gib.velocity[0] += (random() - 0.5) * (speed * 0.25);
|
||||||
gib.velocity[1] += (random() - 0.5) * (speed * 0.25);
|
gib.velocity[1] += (random() - 0.5) * (speed * 0.25);
|
||||||
gib.velocity[2] += (random() - 0.5) * (speed * 0.25);
|
gib.velocity[2] += (random() - 0.5) * (speed * 0.25);
|
||||||
gib.avelocity = vectoangles(gib.velocity);
|
gib.SetAngularVelocity(vectoangles(gib.velocity));
|
||||||
gib.movetype = MOVETYPE_BOUNCE;
|
gib.SetMovetype(MOVETYPE_BOUNCE);
|
||||||
gib.think = Util_Destroy;
|
gib.ScheduleThink(Util_Destroy, fadetime);
|
||||||
gib.nextthink = time + fadetime;
|
|
||||||
|
|
||||||
#ifdef CLIENT
|
#ifdef CLIENT
|
||||||
gib.drawmask = MASK_ENGINE;
|
gib.drawmask = MASK_ENGINE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* re-calculate the tokenization */
|
||||||
|
x = tokenize(g_breakmodel[index].data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
BreakModel_SpawnUnit(vector smins, vector smaxs, vector dir, float speed, string type)
|
|
||||||
{
|
|
||||||
int index;
|
|
||||||
index = (int)hash_get(g_hashbreakmodel, type, -1);
|
|
||||||
|
|
||||||
if (index < 0) {
|
|
||||||
crossprint(sprintf("^1 BreakModel_Spawn: type %s is not defined\n", type));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float x = tokenize(g_breakmodel[index].data);
|
|
||||||
int modelcount = x / 2;
|
|
||||||
|
|
||||||
for (int i = 0; i < modelcount; i++) {
|
|
||||||
vector endpos;
|
|
||||||
string mname;
|
|
||||||
float fadetime;
|
|
||||||
entity gib;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
/* pick a model between 0 and num) */
|
|
||||||
r = i;
|
|
||||||
|
|
||||||
/* two entries, always have to skip by 2 */
|
|
||||||
mname = argv((r * 2));
|
|
||||||
fadetime = stof(argv((r * 2) + 1));
|
|
||||||
|
|
||||||
endpos[0] = smins[0] + ( random() * ( smaxs[0] - smins[0] ) );
|
|
||||||
endpos[1] = smins[1] + ( random() * ( smaxs[1] - smins[1] ) );
|
|
||||||
endpos[2] = smins[2] + ( random() * ( smaxs[2] - smins[2] ) );
|
|
||||||
|
|
||||||
gib = spawn();
|
|
||||||
setmodel(gib, mname);
|
|
||||||
setsize(gib, [0,0,0], [0,0,0]);
|
|
||||||
setorigin(gib, endpos);
|
|
||||||
makevectors(dir);
|
|
||||||
gib.velocity = (v_forward * speed) * 0.75;
|
|
||||||
gib.velocity[0] += (random() - 0.5) * (speed * 0.25);
|
|
||||||
gib.velocity[1] += (random() - 0.5) * (speed * 0.25);
|
|
||||||
gib.velocity[2] += (random() - 0.5) * (speed * 0.25);
|
|
||||||
gib.avelocity = vectoangles(gib.velocity);
|
|
||||||
gib.movetype = MOVETYPE_BOUNCE;
|
|
||||||
gib.think = Util_Destroy;
|
|
||||||
gib.nextthink = time + fadetime;
|
|
||||||
|
|
||||||
#ifdef CLIENT
|
|
||||||
gib.drawmask = MASK_ENGINE;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue