This commit is contained in:
Schluffe
2026-04-14 21:39:59 +02:00
parent 910c2bb435
commit 9b75d41bea
3 changed files with 27 additions and 15 deletions
+5 -5
View File
@@ -6,6 +6,7 @@ import {
createVector, createVector,
getDotProduct, getDotProduct,
invScale, invScale,
scale,
type Vector, type Vector,
} from "#/engine/Vector.ts"; } from "#/engine/Vector.ts";
@@ -527,9 +528,9 @@ export function moveAndSlide(
break; break;
} }
const scale = Math.max(0, time - 0.001); const scalar = Math.max(0, time - 0.001) * delta * timeLeft;
position.x += velocity.x * delta * timeLeft * scale; position.x += velocity.x * scalar;
position.y += velocity.y * delta * timeLeft * scale; position.y += velocity.y * scalar;
const dot = getDotProduct(velocity, closest.normal); const dot = getDotProduct(velocity, closest.normal);
velocity.x -= closest.normal.x * dot; velocity.x -= closest.normal.x * dot;
@@ -538,6 +539,5 @@ export function moveAndSlide(
timeLeft *= 1 - time; timeLeft *= 1 - time;
} }
velocity.x *= timeLeft; scale(velocity, timeLeft);
velocity.y *= timeLeft;
} }
+3 -3
View File
@@ -10,11 +10,11 @@ import { createVector } from "#/engine/Vector.ts";
import portal from "#/game/assets/portal.png"; import portal from "#/game/assets/portal.png";
const portalSrc = await defineSpriteSheet(portal, 3, 1); const portalSrc = await defineSpriteSheet(portal, 3, 1);
const position = createVector();
defineEntity("portal", { defineEntity("portal", {
position, position: createVector(),
velocity: createVector(),
collider: createCollider(Shape.Circle, createCircle(8)),
sprite: createSprite(portalSrc, createVector(-8, -8)), sprite: createSprite(portalSrc, createVector(-8, -8)),
animation: createSpriteAnimation(400, 0), animation: createSpriteAnimation(400, 0),
collider: createCollider(Shape.Circle, createCircle(8)),
}); });
+19 -7
View File
@@ -1,4 +1,5 @@
import { defineEntity } from "#/engine/Entity.ts"; import { defineEntity } from "#/engine/Entity.ts";
import { createRect } from "#/engine/Rect.ts";
import $ from "#/engine/Scene.ts"; import $ from "#/engine/Scene.ts";
import { import {
createSpriteAnimation, createSpriteAnimation,
@@ -6,6 +7,11 @@ import {
type Sprite, type Sprite,
type SpriteAnimation, type SpriteAnimation,
} from "#/engine/Sprite.ts"; } from "#/engine/Sprite.ts";
import {
type Collider,
createCollider,
Shape,
} from "#/engine/system/physics.ts";
import { createVector, type Vector } from "#/engine/Vector.ts"; import { createVector, type Vector } from "#/engine/Vector.ts";
import { viewport } from "#/engine/Viewport.ts"; import { viewport } from "#/engine/Viewport.ts";
import charIdle from "#/game/assets/char-idle.png"; import charIdle from "#/game/assets/char-idle.png";
@@ -40,10 +46,10 @@ const animations = {
walk: createSpriteAnimation(250, 2), walk: createSpriteAnimation(250, 2),
}; };
const position = createVector();
const process = defineEntity<{ const process = defineEntity<{
position: Vector; position: Vector;
velocity: Vector;
collider: Collider;
animation: SpriteAnimation; animation: SpriteAnimation;
animations: { animations: {
idle: SpriteAnimation; idle: SpriteAnimation;
@@ -56,7 +62,9 @@ const process = defineEntity<{
}; };
stuff: number; stuff: number;
}>("testEntity", { }>("testEntity", {
position, position: createVector(),
velocity: createVector(),
collider: createCollider(Shape.Rect, createRect(16, 16)),
animation: animations.idle, animation: animations.idle,
animations: animations, animations: animations,
sprite: sprites.idle, sprite: sprites.idle,
@@ -65,17 +73,21 @@ const process = defineEntity<{
}); });
process((id, _delta) => { process((id, _delta) => {
const position = $<Vector>("position").get(id)!; const position = $<Vector>("position").get(id)!.value;
const velocity = $<Vector>("velocity").get(id)!.value;
const collider = $<Collider>("collider").get(id)!.value;
const stuff = $<number>("stuff").get(id)!; const stuff = $<number>("stuff").get(id)!;
const sprite = $<Sprite>("sprite").get(id)!; const sprite = $<Sprite>("sprite").get(id)!;
const animation = $<SpriteAnimation>("animation").get(id)!; const animation = $<SpriteAnimation>("animation").get(id)!;
position.value.x += stuff.value * 0.5; velocity.x = stuff.value * 0.5;
if (position.value.x > viewport.canvas.width - 16) { position.x += velocity.x;
if (position.x + collider.offset.x > viewport.canvas.width - 16) {
stuff.value = -1; stuff.value = -1;
animation.value = animations.walk; animation.value = animations.walk;
sprite.value = sprites.walk; sprite.value = sprites.walk;
} else if (position.value.x < 0) { } else if (position.x + collider.offset.x < 0) {
stuff.value = 1; stuff.value = 1;
animation.value = animations.idle; animation.value = animations.idle;
sprite.value = sprites.idle; sprite.value = sprites.idle;