Bugfix for frequent freezes when doing actions - the main movement state switch statement was actually relying on falling through case statements to work properly

svn-id: r39066
This commit is contained in:
Paul Gilbert 2009-03-02 09:14:36 +00:00
parent f1044e85b2
commit 2d9705311e
2 changed files with 9 additions and 6 deletions

View File

@ -40,7 +40,7 @@ bool isAnimFinished(int overlayIdx, int idx, actorStruct *pStartEntry, int objTy
while (pCurrentEntry) {
if ((pCurrentEntry->overlayNumber == overlayIdx || overlayIdx == -1) &&
(pCurrentEntry->idx == idx || idx == -1) &&
(pCurrentEntry->type == objType || objType == ANIM_WAIT)) {
(pCurrentEntry->type == objType || objType == -1)) {
if (pCurrentEntry->pathId != ANIM_FINISH) {
return false;
}
@ -730,10 +730,11 @@ void processAnimation(void) {
while (currentActor) {
nextActor = currentActor->next;
if (!currentActor->freeze && ((currentActor->type == 0) || (currentActor->type == 1))) {
if (!currentActor->freeze && ((currentActor->type == ATP_MOUSE) || (currentActor->type == 1))) {
getMultipleObjectParam(currentActor->overlayNumber, currentActor->idx, &params);
if (((animationStart && !currentActor->flag) || (!animationStart && currentActor->x_dest != -1 && currentActor->y_dest != -1)) && (currentActor->type == 0)) {
if (((animationStart && !currentActor->flag) || (!animationStart && currentActor->x_dest != -1
&& currentActor->y_dest != -1)) && (currentActor->type == ATP_MOUSE)) {
// mouse animation
if (!animationStart) {
aniX = currentActor->x_dest;
@ -868,7 +869,6 @@ void processAnimation(void) {
break;
}
}
break;
}
// Walk animations
@ -907,8 +907,6 @@ void processAnimation(void) {
currentActor->x, currentActor->y, newA, currentActor->poly);
break;
}
break;
}
case ANIM_PHASE_END:
{

View File

@ -36,6 +36,11 @@ enum animPhase {
ANIM_PHASE_END = 4
};
enum ATP {
ATP_MOUSE = 0,
ATP_TRACK = 1
};
struct actorStruct {
struct actorStruct *next;
struct actorStruct *prev;