#include "jump_include"
#include "jump_inc_pattern"

// =====================================
// ? Cookie Trail Spawner
// =====================================
void Jump_CookieCrumbleTrail(int iInterval = 20, float fDelay = 0.02, float fCookieDuration = 2.0)
{
    float fDistanceLocal = GetDistanceBetweenLocations(lPC, lTarget);
    float fSkip = fDistanceLocal / IntToFloat(iInterval);
    float fDSkip = 0.0;
    float fIncrement = 0.0;
    float fFacing = GetFacing(oPC);

    int i, j;
    for (i = 0; i < iInterval; i++)
    {
        fIncrement += fSkip;
        fDSkip += fDelay;

        vector vBase = GetPositionFromLocation(GenerateNewLocationFromLocation(lPC, fIncrement, fFacing, 0.0));

        for (j = 0; j < 3; j++) // 3 cookies per step
        {
            float fOffsetX = (IntToFloat(Random(1000)) / 1000.0) * 1.5 - 0.75;
            float fOffsetY = (IntToFloat(Random(1000)) / 1000.0) * 1.5 - 0.75;

            vector vCookie = Vector(vBase.x + fOffsetX, vBase.y + fOffsetY, vBase.z);
            location lDrop = Location(oArea, vCookie, fFacing);

            // ? Spawn cookie
            DelayCommand(fDSkip, Jump_SpawnPlaceableDeleyable("cas_cookieplc", lDrop, fCookieDuration));
        }
    }
}

// =====================================
// ? Main jumper logic
// =====================================
void main()
{
    float fDelay = 1.0;
    int bTurnToTarget = TRUE;

    if (ActivateJumper(fDelay, bTurnToTarget))
    {
        // ? Apply VFX 1596 at start and end
        DelayCommand(fDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(1596), lPC));
        DelayCommand(fDelay, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(1596), lTarget));

        // ? Spawn cookie trail
        Jump_CookieCrumbleTrail(); // Uses default params
    }
}
