HL2: Shove the modelevent .events override in there
This commit is contained in:
parent
697035476b
commit
d89d7aa8be
1 changed files with 70 additions and 0 deletions
|
@ -827,6 +827,72 @@ static void Mod_HL2_ReadPose(hl2parsecontext_t *ctx, const hl2mdlanim_t *anim, i
|
||||||
pose = (const hl2mdlpose_t*)((const qbyte*)pose + pose->next);
|
pose = (const hl2mdlpose_t*)((const qbyte*)pose + pose->next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// matches engine Mod_InsertEvent from parses a foo.mdl.events file and inserts the events into the relevant animations
|
||||||
|
static void Mod_InsertEvent(zonegroup_t *mem, galiasanimation_t *anims, unsigned int numanimations, unsigned int eventanimation, float eventpose, int eventcode, const char *eventdata)
|
||||||
|
{
|
||||||
|
galiasevent_t *ev, **link;
|
||||||
|
if (eventanimation >= numanimations)
|
||||||
|
{
|
||||||
|
Con_Printf("Mod_InsertEvent: invalid frame index\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ev = plugfuncs->GMalloc(mem, sizeof(*ev) + strlen(eventdata)+1);
|
||||||
|
ev->data = (char*)(ev+1);
|
||||||
|
|
||||||
|
ev->timestamp = eventpose;
|
||||||
|
ev->timestamp /= anims[eventanimation].rate;
|
||||||
|
ev->code = eventcode;
|
||||||
|
strcpy(ev->data, eventdata);
|
||||||
|
link = &anims[eventanimation].events;
|
||||||
|
while (*link && (*link)->timestamp <= ev->timestamp)
|
||||||
|
link = &(*link)->next;
|
||||||
|
ev->next = *link;
|
||||||
|
*link = ev;
|
||||||
|
}
|
||||||
|
|
||||||
|
// matches engine Mod_ParseModelEvents
|
||||||
|
static qboolean Mod_ParseModelEvents(model_t *mod, galiasanimation_t *anims, unsigned int numanimations)
|
||||||
|
{
|
||||||
|
unsigned int anim;
|
||||||
|
float pose;
|
||||||
|
int eventcode;
|
||||||
|
|
||||||
|
const char *modelname = mod->name;
|
||||||
|
zonegroup_t *mem = &mod->memgroup;
|
||||||
|
char fname[MAX_QPATH], tok[2048];
|
||||||
|
size_t fsize;
|
||||||
|
char *line, *file, *eol;
|
||||||
|
Q_snprintfz(fname, sizeof(fname), "%s.events", modelname);
|
||||||
|
line = file = filefuncs->LoadFile(fname, &fsize);
|
||||||
|
if (!file)
|
||||||
|
return false;
|
||||||
|
while(line && *line)
|
||||||
|
{
|
||||||
|
eol = strchr(line, '\n');
|
||||||
|
if (eol)
|
||||||
|
*eol = 0;
|
||||||
|
|
||||||
|
line = cmdfuncs->ParseToken(line, tok, sizeof(tok), 0);
|
||||||
|
anim = strtoul(tok, NULL, 0);
|
||||||
|
line = cmdfuncs->ParseToken(line, tok, sizeof(tok), 0);
|
||||||
|
pose = strtod(tok, NULL);
|
||||||
|
line = cmdfuncs->ParseToken(line, tok, sizeof(tok), 0);
|
||||||
|
eventcode = (long)strtol(tok, NULL, 0);
|
||||||
|
line = cmdfuncs->ParseToken(line, tok, sizeof(tok), 0);
|
||||||
|
Mod_InsertEvent(mem, anims, numanimations, anim, pose, eventcode, tok);
|
||||||
|
|
||||||
|
if (eol)
|
||||||
|
line = eol+1;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
plugfuncs->Free(file);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
qboolean QDECL Mod_LoadHL2Model (model_t *mod, void *buffer, size_t fsize)
|
qboolean QDECL Mod_LoadHL2Model (model_t *mod, void *buffer, size_t fsize)
|
||||||
{
|
{
|
||||||
hl2parsecontext_t ctx = {mod, buffer};
|
hl2parsecontext_t ctx = {mod, buffer};
|
||||||
|
@ -928,6 +994,8 @@ qboolean QDECL Mod_LoadHL2Model (model_t *mod, void *buffer, size_t fsize)
|
||||||
|
|
||||||
VectorCopy(ctx.header->mins, mod->mins);
|
VectorCopy(ctx.header->mins, mod->mins);
|
||||||
VectorCopy(ctx.header->maxs, mod->maxs);
|
VectorCopy(ctx.header->maxs, mod->maxs);
|
||||||
|
galiasinfo_t *galias = (galiasinfo_t*)mod->meshinfo;
|
||||||
|
Mod_ParseModelEvents(mod, galias->ofsanimations, galias->numanimations);
|
||||||
|
|
||||||
mod->type = mod_alias;
|
mod->type = mod_alias;
|
||||||
mod->radius = RadiusFromBounds(mod->mins, mod->maxs);
|
mod->radius = RadiusFromBounds(mod->mins, mod->maxs);
|
||||||
|
@ -939,6 +1007,8 @@ qboolean MDL_Init(void)
|
||||||
{
|
{
|
||||||
filefuncs = plugfuncs->GetEngineInterface(plugfsfuncs_name, sizeof(*filefuncs));
|
filefuncs = plugfuncs->GetEngineInterface(plugfsfuncs_name, sizeof(*filefuncs));
|
||||||
modfuncs = plugfuncs->GetEngineInterface(plugmodfuncs_name, sizeof(*modfuncs));
|
modfuncs = plugfuncs->GetEngineInterface(plugmodfuncs_name, sizeof(*modfuncs));
|
||||||
|
cmdfuncs = plugfuncs->GetEngineInterface(plugcmdfuncs_name, sizeof(*cmdfuncs));
|
||||||
|
|
||||||
if (modfuncs && modfuncs->version != MODPLUGFUNCS_VERSION)
|
if (modfuncs && modfuncs->version != MODPLUGFUNCS_VERSION)
|
||||||
modfuncs = NULL;
|
modfuncs = NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue