NSRenderableEntity: add new overridable method (void) HandleAnimEvent(float, int string)
Also fix the mouth-flapping on NSTalkMonster.
This commit is contained in:
parent
30a482e80e
commit
6c7e3e8c06
5 changed files with 101 additions and 5 deletions
|
@ -743,7 +743,7 @@ NSMonster::Physics(void)
|
|||
frame1time += frametime;
|
||||
|
||||
processmodelevents(modelindex, frame, m_flBaseTime,
|
||||
frame1time, Game_ServerModelEvent);
|
||||
frame1time, HandleAnimEvent);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -147,6 +147,9 @@ class NSRenderableEntity:NSEntity
|
|||
nonvirtual float(void) GetBoneControl4;
|
||||
nonvirtual float(void) GetBoneControl5;
|
||||
|
||||
/* model events */
|
||||
virtual void(float, int, string) HandleAnimEvent;
|
||||
|
||||
#ifdef CLIENT
|
||||
nonvirtual void(void) RenderFXPass;
|
||||
#else
|
||||
|
|
|
@ -510,7 +510,7 @@ NSRenderableEntity::predraw(void)
|
|||
frame1time += frametime;
|
||||
|
||||
processmodelevents(modelindex, frame, m_flBaseTime,
|
||||
frame1time, ClientGame_ModelEvent);
|
||||
frame1time, HandleAnimEvent);
|
||||
|
||||
if (alpha > 0.0) {
|
||||
/* TODO: Move this somewhere more sane */
|
||||
|
@ -660,6 +660,66 @@ NSRenderableEntity::GetBoneControl5(void)
|
|||
return m_flBoneControl5;
|
||||
}
|
||||
|
||||
void
|
||||
NSRenderableEntity::HandleAnimEvent(float flTimeStamp, int iCode, string strData)
|
||||
{
|
||||
switch(iCode) {
|
||||
#ifdef CLIENT
|
||||
case 1004: /* plays a sound on CHAN_BODY */
|
||||
if (substring(strData, 0, 1) == "*")
|
||||
sound(self, CHAN_BODY, substring(strData, 1, -1), 1.0f, ATTN_NORM);
|
||||
else
|
||||
sound(self, CHAN_BODY, strData, 1.0f, ATTN_NORM);
|
||||
break;
|
||||
case 1008: /* plays a sound on CHAN_VOICE */
|
||||
if (substring(strData, 0, 1) == "*")
|
||||
sound(self, CHAN_VOICE, substring(strData, 1, -1), 1.0f, ATTN_NORM);
|
||||
else
|
||||
sound(self, CHAN_VOICE, strData, 1.0f, ATTN_NORM);
|
||||
break;
|
||||
#if 0
|
||||
case 5004: /* view model sound? */
|
||||
localsound(strData, CHAN_AUTO, 1.0);
|
||||
break;
|
||||
case 5001: /* muzzle flash on attachment 0 */
|
||||
pSeat->m_eMuzzleflash.alpha = 1.0f;
|
||||
pSeat->m_eMuzzleflash.scale = 0.25;
|
||||
pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones;
|
||||
break;
|
||||
case 5011: /* muzzle flash on attachment 1 */
|
||||
pSeat->m_eMuzzleflash.alpha = 1.0f;
|
||||
pSeat->m_eMuzzleflash.scale = 0.25;
|
||||
pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 1;
|
||||
break;
|
||||
case 5021: /* muzzle flash on attachment 2 */
|
||||
pSeat->m_eMuzzleflash.alpha = 1.0f;
|
||||
pSeat->m_eMuzzleflash.scale = 0.25;
|
||||
pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 2;
|
||||
break;
|
||||
case 5031: /* muzzle flash on attachment 3 */
|
||||
pSeat->m_eMuzzleflash.alpha = 1.0f;
|
||||
pSeat->m_eMuzzleflash.scale = 0.25;
|
||||
pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 3;
|
||||
break;
|
||||
#endif
|
||||
#else
|
||||
case 1003: /* trigger SSQC entity with specific targetname */
|
||||
for (entity f = world; (f = find(f, ::targetname, strData));) {
|
||||
NSEntity trigger = (NSEntity)f;
|
||||
if (trigger.Trigger != __NULL__) {
|
||||
trigger.Trigger(self, TRIG_TOGGLE);
|
||||
NSLog("^2%s^7::^3ModelEvent^7: " \
|
||||
"Calling trigger '%s'\n",
|
||||
self.classname, strData);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
NSLog("Unknown model event: %f %i %S", flTimeStamp, iCode, strData);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
NSRenderableEntity::Save(float handle)
|
||||
|
|
|
@ -126,6 +126,9 @@ class NSTalkMonster:NSMonster
|
|||
virtual void(void) ProcessWordQue;
|
||||
virtual void(float,float) ReceiveEntity;
|
||||
#endif
|
||||
|
||||
/* model events */
|
||||
virtual void(float, int, string) HandleAnimEvent;
|
||||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
|
|
|
@ -58,6 +58,21 @@ NSTalkMonster::NSTalkMonster(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
NSTalkMonster::HandleAnimEvent(float flTimeStamp, int iCode, string strData)
|
||||
{
|
||||
switch(iCode) {
|
||||
#ifdef SERVER
|
||||
case 1005: /* plays a dialogue sentence. monsters only right now */
|
||||
NSTalkMonster targ = (NSTalkMonster)self;
|
||||
targ.Sentence(strData);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
super::HandleAnimEvent(flTimeStamp, iCode, strData);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
NSTalkMonster::Save(float handle)
|
||||
|
@ -778,11 +793,25 @@ NSTalkMonster::Sentence(string msg)
|
|||
float
|
||||
NSTalkMonster::predraw(void)
|
||||
{
|
||||
float render;
|
||||
render = super::predraw();
|
||||
//float render;
|
||||
//render = super::predraw();
|
||||
|
||||
/* TODO: this is from NSRenderableEntity, shoul make these nonvirtual methods */
|
||||
{
|
||||
RenderFXPass();
|
||||
RenderDebugSkeleton();
|
||||
|
||||
if (serverkeyfloat(SERVERKEY_PAUSESTATE) != 1)
|
||||
frame1time += frametime;
|
||||
|
||||
processmodelevents(modelindex, frame, m_flBaseTime,
|
||||
frame1time, HandleAnimEvent);
|
||||
} /* TODO end */
|
||||
|
||||
/* mouth flapping action */
|
||||
bonecontrol5 = getchannellevel(this, CHAN_VOICE) * 20;
|
||||
print(sprintf("voice: %f\n", bonecontrol5));
|
||||
|
||||
m_flBaseTime = frame1time;
|
||||
ProcessWordQue();
|
||||
|
||||
|
@ -803,7 +832,8 @@ NSTalkMonster::predraw(void)
|
|||
m_bWasPaused = true;
|
||||
}
|
||||
|
||||
return render;
|
||||
addentity(this);
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue