Fixed/finalized actor_dog

This commit is contained in:
smallmodel 2023-10-22 15:03:12 +02:00
parent 50e589f27c
commit ce7dfdd986
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
2 changed files with 50 additions and 68 deletions

View file

@ -639,8 +639,6 @@ public:
const char *m_pszDebugState;
/* currently animating ( used in G_RunFrame ) */
bool m_bAnimating;
/* Am I a doggo ? */
bool m_bDog;
/* 2.0: ignore bad place? */
bool m_bIgnoreBadPlace;
/* 2.0: bad place index? (0=none) */

View file

@ -58,7 +58,7 @@ bool Actor::IsDogState(int state)
void Actor::Begin_Dog(void)
{
m_bDog = true;
m_bIsAnimal = true;
}
void Actor::End_Dog(void)
@ -74,9 +74,12 @@ void Actor::Think_Dog_Idle(void)
UpdateEyeOrigin();
m_pszDebugState = "Dog_Idle";
m_bHasDesiredLookAngles = false;
m_eNextAnimMode = ANIM_MODE_NORMAL;
m_csNextAnimString = STRING_ANIM_DOG_IDLE_SCR;
NoPoint();
ForwardLook();
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_IDLE_SCR);
CheckForThinkStateTransition();
PostThink(false);
}
@ -90,49 +93,35 @@ void Actor::Think_Dog_Attack(void)
UpdateEyeOrigin();
m_pszDebugState = "Dog_Attack";
if (m_Enemy && !(m_Enemy->IsSubclassOfActor())) {
if (!m_Enemy || (m_Enemy->flags & FL_NOTARGET)) {
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
TransitionState(20);
CheckForThinkStateTransition();
PostThink(false);
return;
}
SetPath(m_Enemy->origin, NULL, 0, NULL, 0.0);
if (PathExists()) {
vec2_t delta;
VectorSub2D(m_Enemy->origin, origin, delta);
if (VectorLength2DSquared(delta) >= 8000) {
FaceMotion();
m_csNextAnimString = STRING_ANIM_DOG_CHASE_SCR;
m_eNextAnimMode = ANIM_MODE_PATH;
DesiredAnimation(ANIM_MODE_PATH, STRING_ANIM_DOG_CHASE_SCR);
} else {
{
vec2_t facedir;
facedir[0] = m_Enemy->origin[0] - origin[0];
facedir[1] = m_Enemy->origin[1] - origin[1];
if (facedir[0] != 0 || facedir[1] != 0) {
SetDesiredYawDir(facedir);
}
}
SetDesiredYawDest(m_Enemy->origin);
SetDesiredLookDir(m_Enemy->origin - origin);
m_eNextAnimMode = ANIM_MODE_NORMAL;
m_csNextAnimString = STRING_ANIM_DOG_ATTACK_SCR;
}
m_bNextForceStart = false;
CheckForThinkStateTransition();
PostThink(false);
return;
}
{
vec2_t facedir;
facedir[0] = m_Enemy->origin[0] - origin[0];
facedir[1] = m_Enemy->origin[1] - origin[1];
if (facedir[0] != 0 || facedir[1] != 0) {
SetDesiredYawDir(facedir);
}
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_ATTACK_SCR);
}
} else {
SetDesiredYawDest(m_Enemy->origin);
SetDesiredLookDir(m_Enemy->origin - origin);
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
TransitionState(20);
}
m_bNextForceStart = false;
m_eNextAnimMode = ANIM_MODE_NORMAL;
m_csNextAnimString = STRING_ANIM_DOG_CURIOUS_SCR;
TransitionState(20, 0);
CheckForThinkStateTransition();
PostThink(false);
@ -140,25 +129,20 @@ void Actor::Think_Dog_Attack(void)
void Actor::Think_Dog_Curious(void)
{
if (RequireThink()) {
if (!RequireThink()) {
return;
}
UpdateEyeOrigin();
m_pszDebugState = "Dog_Curious";
if (m_Enemy && !m_Enemy->IsSubclassOfActor()) {
vec2_t vDelta;
VectorSub2D(m_Enemy->origin, origin, vDelta);
if (vDelta[0] != 0 || vDelta[1] != 0) {
SetDesiredYawDir(vDelta);
}
if (m_Enemy && !(m_Enemy->flags & FL_NOTARGET)) {
SetDesiredYawDest(m_Enemy->origin);
SetDesiredLookDir(m_Enemy->origin - origin);
}
m_bNextForceStart = false;
m_eNextAnimMode = ANIM_MODE_NORMAL;
m_csNextAnimString = STRING_ANIM_DOG_CURIOUS_SCR;
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
CheckForThinkStateTransition();
PostThink(false);
}
}