diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-12 03:25:20 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-12 03:25:20 +0800 |
| commit | ca1f5cd724644aee01d01b4d12d52f8893e01e54 (patch) | |
| tree | 676cc0d8d3a32f3192c6d6397860e7597d5cb8d9 /kon/kon2d.c | |
| parent | dbe7d0e0eeeabf6a4df16ef98d0a1f8d53b62d8b (diff) | |
split platformer out of 2d so 2d is only camera and animation
Diffstat (limited to 'kon/kon2d.c')
| -rw-r--r-- | kon/kon2d.c | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/kon/kon2d.c b/kon/kon2d.c index 2cc9fdd..8ce56d8 100644 --- a/kon/kon2d.c +++ b/kon/kon2d.c @@ -27,72 +27,6 @@ #include <math.h> -#define STEP (1.0 / 120.0) -#define MAX_FRAME 0.25 - -/*** platformer ***/ - -void kon_platformerInit(kon_platformer_t *p, kon_box2_t box) -{ - kon_platformer_t zero = {0}; - - *p = zero; - p->box = box; - p->runSpeed = 120.0f; - p->groundAccel = 18.0f; - p->airAccel = 8.0f; - p->gravity = 700.0f; - p->jumpSpeed = 260.0f; - p->jumpCut = 60.0f; - p->maxFall = 400.0f; - p->coyoteTime = 0.08f; - p->bufferTime = 0.1f; -} - -int kon_platformerStep(kon_platformer_t *p, const kon_tilemap_t *map, const uint8_t *solid, int solidCount, float dt) -{ - float run = (float)p->moveX * p->runSpeed; - float ease = (p->onGround ? p->groundAccel : p->airAccel) * dt; - int flags; - - if (ease > 1.0f) ease = 1.0f; - p->velocity.x += (run - p->velocity.x) * ease; - p->velocity.y += p->gravity * dt; - if (p->velocity.y > p->maxFall) p->velocity.y = p->maxFall; - - if (p->jumpHeld && !p->jumpWas) p->buffer = p->bufferTime; - p->jumpWas = p->jumpHeld; - if (p->buffer > 0.0f) p->buffer -= dt; - if (p->coyote > 0.0f) p->coyote -= dt; - - if (p->buffer > 0.0f && p->coyote > 0.0f) { - p->velocity.y = -p->jumpSpeed; - p->buffer = 0.0f; - p->coyote = 0.0f; - } - if (!p->jumpHeld && p->velocity.y < -p->jumpCut) p->velocity.y = -p->jumpCut; - - flags = kon_tilemapMove(map, &p->box, p->velocity.x * dt, p->velocity.y * dt, solid, solidCount); - - if (flags & (KON_HIT_LEFT | KON_HIT_RIGHT)) p->velocity.x = 0.0f; - if (flags & (KON_HIT_UP | KON_HIT_DOWN)) p->velocity.y = 0.0f; - p->onGround = (flags & KON_HIT_DOWN) != 0; - if (p->onGround) p->coyote = p->coyoteTime; - return flags; -} - -void kon_platformerUpdate(kon_platformer_t *p, const kon_tilemap_t *map, const uint8_t *solid, int solidCount, double dt) -{ - if (!(dt > 0.0)) return; - if (dt > MAX_FRAME) dt = MAX_FRAME; - - p->leftover += (float)dt; - while (p->leftover >= (float)STEP) { - kon_platformerStep(p, map, solid, solidCount, (float)STEP); - p->leftover -= (float)STEP; - } -} - /*** camera ***/ static float clampAxis(float value, float view, float bounds) |
