Merge pull request #1737 from GriffinRichards/lock-unlock
Clean up lock/unlock anim movement
This commit is contained in:
@@ -8746,13 +8746,13 @@ static void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite *
|
||||
FieldEffectStart(FLDEFF_RIPPLE);
|
||||
}
|
||||
|
||||
u8 (*const gMovementActionFuncs_StoreAndLockAnim[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_StoreAndLockAnim_Step0,
|
||||
u8 (*const gMovementActionFuncs_LockAnim[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_LockAnim_Step0,
|
||||
MovementAction_Finish,
|
||||
};
|
||||
|
||||
u8 (*const gMovementActionFuncs_FreeAndUnlockAnim[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_FreeAndUnlockAnim_Step0,
|
||||
u8 (*const gMovementActionFuncs_UnlockAnim[])(struct ObjectEvent *, struct Sprite *) = {
|
||||
MovementAction_UnlockAnim_Step0,
|
||||
MovementAction_Finish,
|
||||
};
|
||||
|
||||
@@ -8768,36 +8768,36 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *
|
||||
MovementAction_Fly_Finish,
|
||||
};
|
||||
|
||||
u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
u8 MovementAction_LockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
bool32 ableToStore = FALSE;
|
||||
if (sLockedAnimObjectEvents == NULL)
|
||||
{
|
||||
sLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents));
|
||||
sLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId;
|
||||
sLockedAnimObjectEvents->localIds[0] = objectEvent->localId;
|
||||
sLockedAnimObjectEvents->count = 1;
|
||||
ableToStore = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 i;
|
||||
u8 firstFreeSlot;
|
||||
bool32 found;
|
||||
for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
|
||||
u8 firstFreeSlot = OBJECT_EVENTS_COUNT;
|
||||
bool32 found = FALSE;
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (firstFreeSlot == 16 && sLockedAnimObjectEvents->objectEventIds[i] == 0)
|
||||
if (firstFreeSlot == OBJECT_EVENTS_COUNT && sLockedAnimObjectEvents->localIds[i] == 0)
|
||||
firstFreeSlot = i;
|
||||
|
||||
if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId)
|
||||
if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId)
|
||||
{
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found && firstFreeSlot != 16)
|
||||
if (!found && firstFreeSlot != OBJECT_EVENTS_COUNT)
|
||||
{
|
||||
sLockedAnimObjectEvents->objectEventIds[firstFreeSlot] = objectEvent->localId;
|
||||
sLockedAnimObjectEvents->localIds[firstFreeSlot] = objectEvent->localId;
|
||||
sLockedAnimObjectEvents->count++;
|
||||
ableToStore = TRUE;
|
||||
}
|
||||
@@ -8813,7 +8813,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
u8 MovementAction_UnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
bool32 ableToStore;
|
||||
u8 index;
|
||||
@@ -8823,9 +8823,9 @@ u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struc
|
||||
{
|
||||
ableToStore = FALSE;
|
||||
index = FindLockedObjectEventIndex(objectEvent);
|
||||
if (index != 16)
|
||||
if (index != OBJECT_EVENTS_COUNT)
|
||||
{
|
||||
sLockedAnimObjectEvents->objectEventIds[index] = 0;
|
||||
sLockedAnimObjectEvents->localIds[index] = 0;
|
||||
sLockedAnimObjectEvents->count--;
|
||||
ableToStore = TRUE;
|
||||
}
|
||||
@@ -8848,7 +8848,7 @@ u8 FindLockedObjectEventIndex(struct ObjectEvent *objectEvent)
|
||||
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId)
|
||||
if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId)
|
||||
return i;
|
||||
}
|
||||
return OBJECT_EVENTS_COUNT;
|
||||
|
||||
Reference in New Issue
Block a user