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)
@ -73,10 +73,13 @@ 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)) {
SetPath(m_Enemy->origin, NULL, 0, NULL, 0.0); DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
if (PathExists()) { TransitionState(20);
vec2_t delta;
VectorSub2D(m_Enemy->origin, origin, delta);
if (VectorLength2DSquared(delta) >= 8000) { CheckForThinkStateTransition();
FaceMotion(); PostThink(false);
m_csNextAnimString = STRING_ANIM_DOG_CHASE_SCR; return;
m_eNextAnimMode = ANIM_MODE_PATH; }
} else {
{ SetPath(m_Enemy->origin, NULL, 0, NULL, 0.0);
vec2_t facedir;
facedir[0] = m_Enemy->origin[0] - origin[0]; if (PathExists()) {
facedir[1] = m_Enemy->origin[1] - origin[1]; vec2_t delta;
if (facedir[0] != 0 || facedir[1] != 0) { VectorSub2D(m_Enemy->origin, origin, delta);
SetDesiredYawDir(facedir);
} if (VectorLength2DSquared(delta) >= 8000) {
} FaceMotion();
SetDesiredLookDir(m_Enemy->origin - origin); DesiredAnimation(ANIM_MODE_PATH, STRING_ANIM_DOG_CHASE_SCR);
m_eNextAnimMode = ANIM_MODE_NORMAL; } else {
m_csNextAnimString = STRING_ANIM_DOG_ATTACK_SCR; SetDesiredYawDest(m_Enemy->origin);
} SetDesiredLookDir(m_Enemy->origin - origin);
m_bNextForceStart = false; DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_ATTACK_SCR);
CheckForThinkStateTransition(); }
PostThink(false); } else {
return; SetDesiredYawDest(m_Enemy->origin);
} SetDesiredLookDir(m_Enemy->origin - origin);
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
{ TransitionState(20);
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);
} }
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()) {
UpdateEyeOrigin(); return;
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);
}
SetDesiredLookDir(m_Enemy->origin - origin);
}
m_bNextForceStart = false;
m_eNextAnimMode = ANIM_MODE_NORMAL;
m_csNextAnimString = STRING_ANIM_DOG_CURIOUS_SCR;
CheckForThinkStateTransition();
PostThink(false);
} }
UpdateEyeOrigin();
m_pszDebugState = "Dog_Curious";
if (m_Enemy && !(m_Enemy->flags & FL_NOTARGET)) {
SetDesiredYawDest(m_Enemy->origin);
SetDesiredLookDir(m_Enemy->origin - origin);
}
DesiredAnimation(ANIM_MODE_NORMAL, STRING_ANIM_DOG_CURIOUS_SCR);
CheckForThinkStateTransition();
PostThink(false);
} }