We are back in rendering land
This commit is contained in:
+21
-2
@@ -5,6 +5,7 @@ import {
|
|||||||
} from "#/engine/Entity.ts";
|
} from "#/engine/Entity.ts";
|
||||||
import { type Graph, getNeighbours } from "#/engine/Graph.ts";
|
import { type Graph, getNeighbours } from "#/engine/Graph.ts";
|
||||||
import { useWithAsyncCache } from "#/engine/lib/cache.ts";
|
import { useWithAsyncCache } from "#/engine/lib/cache.ts";
|
||||||
|
import { playAnimation } from "./Sprite";
|
||||||
|
|
||||||
export type EntityData = {
|
export type EntityData = {
|
||||||
name: string;
|
name: string;
|
||||||
@@ -48,7 +49,7 @@ export const sceneDataMap = new Map<string, SceneData>();
|
|||||||
export const sceneEntiyMap = new Map<string, EntityMap>();
|
export const sceneEntiyMap = new Map<string, EntityMap>();
|
||||||
export const sceneGraph: Graph<string> = new Map();
|
export const sceneGraph: Graph<string> = new Map();
|
||||||
|
|
||||||
const sceneInstancesMap = new Map<string, Array<object>>();
|
const sceneInstancesDrawMap = new Map<string, Array<object>>();
|
||||||
|
|
||||||
export const [loadScene, sceneCache] = useWithAsyncCache(
|
export const [loadScene, sceneCache] = useWithAsyncCache(
|
||||||
async (name: string) => {
|
async (name: string) => {
|
||||||
@@ -103,6 +104,22 @@ function processEntities(delta: number): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type stuff and fixme WIP
|
||||||
|
function processSystems(ctx: CanvasRenderingContext2D, delta: number): void {
|
||||||
|
const drawables = sceneInstancesDrawMap.get(currentScene.data.name)!;
|
||||||
|
for (const drawable of drawables.sort(
|
||||||
|
(a, b) => b.position.y - a.position.y,
|
||||||
|
)) {
|
||||||
|
playAnimation(
|
||||||
|
ctx,
|
||||||
|
drawable.animation,
|
||||||
|
drawable.position.x,
|
||||||
|
drawable.position.y,
|
||||||
|
delta,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function linkScenes(a: string, b: string): void {
|
function linkScenes(a: string, b: string): void {
|
||||||
if (sceneGraph.has(a)) {
|
if (sceneGraph.has(a)) {
|
||||||
sceneGraph.get(a)!.push(b);
|
sceneGraph.get(a)!.push(b);
|
||||||
@@ -136,6 +153,7 @@ export function defineScene(data: SceneData): {
|
|||||||
sceneProcessMap.set(data.name, (ctx, delta) => {
|
sceneProcessMap.set(data.name, (ctx, delta) => {
|
||||||
fn(ctx, delta);
|
fn(ctx, delta);
|
||||||
processEntities(delta);
|
processEntities(delta);
|
||||||
|
processSystems(ctx, delta);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
preProcess(fn) {
|
preProcess(fn) {
|
||||||
@@ -158,7 +176,8 @@ export async function setScene(name: string): Promise<void> {
|
|||||||
const data = sceneDataMap.get(name)!;
|
const data = sceneDataMap.get(name)!;
|
||||||
const process = sceneProcessMap.get(name)!;
|
const process = sceneProcessMap.get(name)!;
|
||||||
const entityInstanceMap = sceneEntiyMap.get(name)!;
|
const entityInstanceMap = sceneEntiyMap.get(name)!;
|
||||||
sceneInstancesMap.set(
|
// TODO: test for drawable first
|
||||||
|
sceneInstancesDrawMap.set(
|
||||||
data.name,
|
data.name,
|
||||||
entityInstanceMap.values().reduce(
|
entityInstanceMap.values().reduce(
|
||||||
(acc, cur) => {
|
(acc, cur) => {
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { defineEntity } from "#/engine/Entity.ts";
|
import { defineEntity } from "#/engine/Entity.ts";
|
||||||
import { createSpriteAnimation, useSpriteSheetSrc } from "#/engine/Sprite.ts";
|
import { createSpriteAnimation, useSpriteSheetSrc } from "#/engine/Sprite.ts";
|
||||||
|
import { createVector } from "#/engine/Vector";
|
||||||
import portal from "#/game/assets/portal.png";
|
import portal from "#/game/assets/portal.png";
|
||||||
|
|
||||||
const portalSheet = await useSpriteSheetSrc(portal, 3, 1);
|
const portalSheet = await useSpriteSheetSrc(portal, 3, 1);
|
||||||
|
|
||||||
defineEntity("portal", {
|
defineEntity("portal", {
|
||||||
|
position: createVector(64, 64),
|
||||||
animation: createSpriteAnimation(portalSheet, 400, 0),
|
animation: createSpriteAnimation(portalSheet, 400, 0),
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user