From 31901f53f7d35d61d308c879daaacf7bd9e8eb1f Mon Sep 17 00:00:00 2001 From: Schluffe Date: Mon, 16 Feb 2026 23:18:14 +0100 Subject: [PATCH] WIP --- bun.lock | 14 +++++++------- engine/Collision.ts | 13 +++++++++++++ game/entities/hero/entity.ts | 30 ++++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 engine/Collision.ts diff --git a/bun.lock b/bun.lock index d30a370..8def1b8 100644 --- a/bun.lock +++ b/bun.lock @@ -5,15 +5,15 @@ "": { "name": "nage", "devDependencies": { - "@biomejs/biome": "latest", - "@types/bun": "latest", - "lz-string": "latest", - "solid-js": "latest", - "vite": "latest", - "vite-plugin-solid": "latest", + "@biomejs/biome": "2.3.14", + "@types/bun": "1.3.8", + "lz-string": "1.5.0", + "solid-js": "1.9.11", + "vite": "7.3.1", + "vite-plugin-solid": "2.11.10", }, "peerDependencies": { - "typescript": "latest", + "typescript": "5.9.3", }, }, }, diff --git a/engine/Collision.ts b/engine/Collision.ts new file mode 100644 index 0000000..32e5b5b --- /dev/null +++ b/engine/Collision.ts @@ -0,0 +1,13 @@ +import type { Vector } from "#/engine/Vector.ts"; + +export type Body = { + shape: T; + offset: Vector; +}; + +export function moveAndCollide( + body: Body, + velocity: Vector, +): void { + return; +} diff --git a/game/entities/hero/entity.ts b/game/entities/hero/entity.ts index e6c3c74..1c6191a 100644 --- a/game/entities/hero/entity.ts +++ b/game/entities/hero/entity.ts @@ -1,16 +1,22 @@ import { createAnimation, playAnimation } from "#/engine/Animation.ts"; +import { createCircle, drawCircle } from "#/engine/Circle"; +import { moveAndCollide } from "#/engine/Collision.ts"; import { defineEntity } from "#/engine/Entity.ts"; import { keyboardInput } from "#/engine/Keyboard.ts"; import { pointer } from "#/engine/Pointer.ts"; import { fromSrc, type Sprite } from "#/engine/Sprite.ts"; +import { createVector } from "#/engine/Vector.ts"; import charIdle from "#/game/assets/char-idle.png"; -// import { moveAndCollide } from "#/some/where.ts"; - const idle: Sprite = await fromSrc(charIdle, 2, 4); const { animate, process } = defineEntity("hero", { animation: createAnimation(idle, 500, 2), + velocity: createVector(), + body: { + shape: createCircle(createVector(), 4), + offset: createVector(8, 10), + }, }); animate((entity, ctx, delta) => { @@ -21,6 +27,7 @@ animate((entity, ctx, delta) => { entity.position.y, delta, ); + drawCircle(ctx, entity.body.shape, "red"); }); process((entity, delta) => { @@ -29,8 +36,19 @@ process((entity, delta) => { entity.position.y = pointer.position.y; } - entity.position.x -= keyboardInput.arrowLeft ? 1 : 0; - entity.position.x += keyboardInput.arrowRight ? 1 : 0; - entity.position.y -= keyboardInput.arrowUp ? 1 : 0; - entity.position.y += keyboardInput.arrowDown ? 1 : 0; + entity.velocity.x -= keyboardInput.arrowLeft ? 0.1 : 0; + entity.velocity.x += keyboardInput.arrowRight ? 0.1 : 0; + entity.velocity.y -= keyboardInput.arrowUp ? 0.1 : 0; + entity.velocity.y += keyboardInput.arrowDown ? 0.1 : 0; + + entity.position.x += entity.velocity.x * delta; + entity.position.y += entity.velocity.y * delta; + + entity.velocity.x = 0; + entity.velocity.y = 0; + + moveAndCollide(entity.body, entity.velocity); + + entity.body.shape.position.x = entity.body.offset.x + entity.position.x; + entity.body.shape.position.y = entity.body.offset.y + entity.position.y; });