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; const char *m_pszDebugState;
/* currently animating ( used in G_RunFrame ) */ /* currently animating ( used in G_RunFrame ) */
bool m_bAnimating; bool m_bAnimating;
/* Am I a doggo ? */
bool m_bDog;
/* 2.0: ignore bad place? */ /* 2.0: ignore bad place? */
bool m_bIgnoreBadPlace; bool m_bIgnoreBadPlace;
/* 2.0: bad place index? (0=none) */ /* 2.0: bad place index? (0=none) */

View file

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