72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { System } from "$/common/ecs/mod.ts";
|
|
import { Position } from "$/common/components/position.ts";
|
|
import { AnimatedSprite, Sprite } from "$/client/components/sprite.ts";
|
|
import { Dimension } from "../components/dimension.ts";
|
|
import { Camera } from "$/client/components/camera.ts";
|
|
|
|
import { render_animated_sprite, render_sprite } from "./rendering/sprites.ts";
|
|
import { render_dimension } from "./rendering/dimension.ts";
|
|
import { render_player_breaking, render_player_crosshair, render_player_hotbar } from "./rendering/player.ts";
|
|
import { PlayerComponent } from "../player.ts";
|
|
import { begin_mode_3d, end_mode_3d } from "../renderer/core.ts";
|
|
import { ClientWorld } from "../client_world.ts";
|
|
import { render_chat_log, render_remote_players } from "./rendering/network.ts";
|
|
|
|
export class RenderSystem extends System {
|
|
constructor() {
|
|
super();
|
|
}
|
|
|
|
update(world: ClientWorld, _delta: number): void {
|
|
const camera_entity = world.get_entities().values().find((e) => e.get(Camera));
|
|
const camera = camera_entity?.get(Camera);
|
|
|
|
if (!camera) {
|
|
return;
|
|
}
|
|
|
|
begin_mode_3d(camera);
|
|
|
|
for (const entity of world.get_entities()) {
|
|
const dimension = entity.get(Dimension);
|
|
|
|
if (dimension) {
|
|
render_dimension(dimension, camera);
|
|
}
|
|
|
|
const player_component = entity.get(PlayerComponent);
|
|
if (player_component) {
|
|
render_player_breaking(player_component);
|
|
}
|
|
}
|
|
|
|
if (world.connection) {
|
|
render_remote_players(world.connection);
|
|
}
|
|
|
|
end_mode_3d();
|
|
|
|
for (const entity of world.get_entities()) {
|
|
const position = entity.get(Position);
|
|
|
|
const sprite = entity.get(Sprite);
|
|
if (position && sprite) {
|
|
render_sprite(sprite, position);
|
|
}
|
|
|
|
const animated_sprite = entity.get(AnimatedSprite);
|
|
if (position && animated_sprite) {
|
|
render_animated_sprite(animated_sprite, position);
|
|
}
|
|
|
|
const player_component = entity.get(PlayerComponent);
|
|
if (player_component) {
|
|
render_player_hotbar(player_component.inventories);
|
|
render_player_crosshair();
|
|
}
|
|
}
|
|
|
|
render_chat_log(world, false);
|
|
}
|
|
}
|