Files
zenmaid-game/src/actors/player.js
2026-07-27 10:31:31 -04:00

38 lines
1.1 KiB
JavaScript

// The player: input-driven, collides with solid obstacles/walls, cleans shards.
import { PLAYER_SPEED } from "../config.js";
import { visual } from "../sprites.js";
export function addPlayer(k, world) {
const p = world.tc(world.level.playerSpawn);
const player = k.add([
...visual(k, "player"),
k.pos(p),
k.area({ collisionIgnore: ["link", "chicken"] }),
k.body(), // dynamic body: pushed out of static obstacles/walls
"player",
]);
player.onUpdate(() => {
const dir = k.vec2(0, 0);
if (k.isKeyDown("left") || k.isKeyDown("a")) dir.x -= 1;
if (k.isKeyDown("right") || k.isKeyDown("d")) dir.x += 1;
if (k.isKeyDown("up") || k.isKeyDown("w")) dir.y -= 1;
if (k.isKeyDown("down") || k.isKeyDown("s")) dir.y += 1;
if (dir.x !== 0 || dir.y !== 0) {
player.move(dir.unit().scale(PLAYER_SPEED)); // unit() => diagonals aren't faster
}
player.z = player.pos.y; // depth sort
});
// Sweep up shards on contact.
player.onCollide("shard", (s) => {
if (s.cleaned) return;
s.cleaned = true;
s.destroy();
world.onShardsChanged();
});
return player;
}