mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-05-10 12:36:38 +03:00
Added new ScriptModel functions from mohaas 2.0 and above
This commit is contained in:
parent
6616bfe53e
commit
3a6be342ce
2 changed files with 80 additions and 8 deletions
|
@ -1819,12 +1819,41 @@ Event EV_ScriptModel_SetAnim
|
||||||
"Sets the script model's animation",
|
"Sets the script model's animation",
|
||||||
EV_NORMAL
|
EV_NORMAL
|
||||||
);
|
);
|
||||||
|
Event EV_ScriptModel_AnimDone
|
||||||
|
(
|
||||||
|
"animdone",
|
||||||
|
EV_ZERO,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
"Script model animation has finished.",
|
||||||
|
EV_NORMAL
|
||||||
|
);
|
||||||
|
Event EV_ScriptModel_MoveAnim
|
||||||
|
(
|
||||||
|
"moveanim",
|
||||||
|
EV_DEFAULT,
|
||||||
|
"s",
|
||||||
|
"animName",
|
||||||
|
"Makes the script model play an animation and move with the deltas contained in the animation",
|
||||||
|
EV_NORMAL
|
||||||
|
);
|
||||||
|
Event EV_ScriptModel_MovingAnim
|
||||||
|
(
|
||||||
|
"moving_from_anim",
|
||||||
|
EV_DEFAULT,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
"The script model is moving based on an animation",
|
||||||
|
EV_NORMAL
|
||||||
|
);
|
||||||
|
|
||||||
CLASS_DECLARATION(ScriptSlave, ScriptModel, "script_model") {
|
CLASS_DECLARATION(ScriptSlave, ScriptModel, "script_model") {
|
||||||
{&EV_Gib, &ScriptModel::GibEvent },
|
|
||||||
{&EV_SetAngle, &ScriptModel::SetAngleEvent },
|
{&EV_SetAngle, &ScriptModel::SetAngleEvent },
|
||||||
{&EV_ScriptModel_SetAnim, &ScriptModel::SetAnimEvent },
|
{&EV_ScriptModel_SetAnim, &ScriptModel::SetAnimEvent },
|
||||||
{&EV_Model, &ScriptModel::SetModelEvent },
|
{&EV_Model, &ScriptModel::SetModelEvent },
|
||||||
|
{&EV_ScriptModel_AnimDone, &ScriptModel::AnimDoneEvent },
|
||||||
|
{&EV_ScriptModel_MoveAnim, &ScriptModel::MoveAnimEvent },
|
||||||
|
{&EV_ScriptModel_MovingAnim, &ScriptModel::MovingFromAnimEvent},
|
||||||
{NULL, NULL },
|
{NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1837,7 +1866,6 @@ ScriptModel::ScriptModel()
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptModel::SetModelEvent(Event *ev)
|
void ScriptModel::SetModelEvent(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
ScriptSlave::SetModelEvent(ev);
|
ScriptSlave::SetModelEvent(ev);
|
||||||
|
|
||||||
|
@ -1861,8 +1889,50 @@ void ScriptModel::SetAnimEvent(Event *ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptModel::SetAngleEvent(Event *ev)
|
void ScriptModel::AnimDoneEvent(Event *ev)
|
||||||
|
{
|
||||||
|
CancelEventsOfType(EV_ScriptModel_MovingAnim);
|
||||||
|
Unregister(STRING_ANIMDONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptModel::MoveAnimEvent(Event *ev)
|
||||||
|
{
|
||||||
|
str animName;
|
||||||
|
int animNum;
|
||||||
|
|
||||||
|
animName = ev->GetString(1);
|
||||||
|
|
||||||
|
if (!animName.length()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
animNum = gi.Anim_NumForName(edict->tiki, animName.c_str());
|
||||||
|
if (animNum < 0) {
|
||||||
|
ScriptError("ScriptModel could not find animation %s.", animName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
NewAnim(animNum, EV_ScriptModel_AnimDone);
|
||||||
|
RestartAnimSlot(0);
|
||||||
|
PostEvent(EV_ScriptModel_MovingAnim, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptModel::MovingFromAnimEvent(Event *ev)
|
||||||
|
{
|
||||||
|
Vector newOrigin;
|
||||||
|
Vector newAngles;
|
||||||
|
|
||||||
|
// calculate velocity
|
||||||
|
newOrigin = origin + frame_delta;
|
||||||
|
velocity = (newOrigin - origin) / level.frametime;
|
||||||
|
|
||||||
|
// calculate angular velocity
|
||||||
|
newAngles = angles + Vector(0, angular_delta, 0);
|
||||||
|
avelocity = (newAngles - angles) / level.frametime;
|
||||||
|
|
||||||
|
PostEvent(EV_ScriptModel_MovingAnim, level.frametime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptModel::SetAngleEvent(Event *ev)
|
||||||
{
|
{
|
||||||
float angle;
|
float angle;
|
||||||
|
|
||||||
|
@ -1882,7 +1952,6 @@ void ScriptModel::SetAngleEvent(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptModel::GibEvent(Event *ev)
|
void ScriptModel::GibEvent(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
int num, power;
|
int num, power;
|
||||||
float scale;
|
float scale;
|
||||||
|
|
|
@ -234,6 +234,9 @@ public:
|
||||||
void SetAngleEvent(Event *ev);
|
void SetAngleEvent(Event *ev);
|
||||||
void SetModelEvent(Event *ev);
|
void SetModelEvent(Event *ev);
|
||||||
void SetAnimEvent(Event *ev);
|
void SetAnimEvent(Event *ev);
|
||||||
|
void AnimDoneEvent(Event* ev);
|
||||||
|
void MoveAnimEvent(Event* ev);
|
||||||
|
void MovingFromAnimEvent(Event* ev);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ScriptOrigin : public ScriptSlave
|
class ScriptOrigin : public ScriptSlave
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue