refactor query into yielding api
This commit is contained in:
parent
6bf8f60a45
commit
976a99baa1
5 changed files with 70 additions and 54 deletions
|
@ -1,6 +1,25 @@
|
|||
import { v2 } from "../../common/utils.ts";
|
||||
import { range, Vec2 } from "../../common/utils.ts";
|
||||
import { Engine } from "../engine.ts";
|
||||
import { query_in_rect } from "./world.ts";
|
||||
|
||||
export class CompDisplay {
|
||||
display;
|
||||
constructor(display: string) {
|
||||
this.display = display;
|
||||
}
|
||||
}
|
||||
|
||||
export function sys_render_world(center: Vec2, size: Vec2) {
|
||||
return (engine: Engine) => {
|
||||
const radius = size.scale(0.5);
|
||||
const result = Array.from(range(0, size.y())).map(() => Array.from(range(0, size.x())).map(() => " "));
|
||||
const min = center.sub(radius);
|
||||
const max = center.add(radius).sub(v2(1, 1));
|
||||
for (const [pos, display] of engine.query_all(query_in_rect(min, max).with(CompDisplay))) {
|
||||
const local_pos = pos.position.sub(min);
|
||||
result[local_pos.y()][local_pos.x()] = display.display;
|
||||
}
|
||||
return result.map((line) => line.join("")).toReversed().join("\n");
|
||||
};
|
||||
}
|
||||
|
|
|
@ -61,11 +61,11 @@ Deno.test("test_displacement", () => {
|
|||
});
|
||||
|
||||
export function query_at(pos: Vec2) {
|
||||
return Query.filter(CompPos, (c) => c.position.overlaps(pos));
|
||||
return Query.with(CompPos).filter(([c]) => c.position.overlaps(pos));
|
||||
}
|
||||
|
||||
export function query_in_rect(min: Vec2, max: Vec2) {
|
||||
return Query.filter(CompPos, (c) => c.position.inside(min, max));
|
||||
return Query.with(CompPos).filter(([c]) => c.position.inside(min, max));
|
||||
}
|
||||
|
||||
class CompStructure {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue