You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
3.2 KiB
73 lines
3.2 KiB
4 years ago
|
import { GameSystem } from "../game_system";
|
||
|
import { DrawParameters } from "../../core/draw_parameters";
|
||
|
import { globalConfig } from "../../core/config";
|
||
|
import { MapChunkView } from "../map_chunk_view";
|
||
|
import { Loader } from "../../core/loader";
|
||
|
import { enumDirection } from "../../core/vector";
|
||
|
|
||
|
export class StaticMapEntitySystem extends GameSystem {
|
||
|
constructor(root) {
|
||
|
super(root);
|
||
|
|
||
|
this.beltOverviewSprites = {
|
||
|
[enumDirection.top]: Loader.getSprite("sprites/map_overview/belt_forward.png"),
|
||
|
[enumDirection.right]: Loader.getSprite("sprites/map_overview/belt_right.png"),
|
||
|
[enumDirection.left]: Loader.getSprite("sprites/map_overview/belt_left.png"),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draws the static entities
|
||
|
* @param {DrawParameters} parameters
|
||
|
* @param {MapChunkView} chunk
|
||
|
*/
|
||
|
drawChunk(parameters, chunk) {
|
||
|
if (G_IS_DEV && globalConfig.debug.doNotRenderStatics) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const drawOutlinesOnly = parameters.zoomLevel < globalConfig.mapChunkOverviewMinZoom;
|
||
|
|
||
|
const contents = chunk.contents;
|
||
|
for (let y = 0; y < globalConfig.mapChunkSize; ++y) {
|
||
|
for (let x = 0; x < globalConfig.mapChunkSize; ++x) {
|
||
|
const entity = contents[x][y];
|
||
|
|
||
|
if (entity) {
|
||
|
const staticComp = entity.components.StaticMapEntity;
|
||
|
if (drawOutlinesOnly) {
|
||
|
const rect = staticComp.getTileSpaceBounds();
|
||
|
parameters.context.fillStyle = staticComp.silhouetteColor || "#aaa";
|
||
|
const beltComp = entity.components.Belt;
|
||
|
if (beltComp) {
|
||
|
const sprite = this.beltOverviewSprites[beltComp.direction];
|
||
|
staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 0, false);
|
||
|
} else {
|
||
|
parameters.context.fillRect(
|
||
|
rect.x * globalConfig.tileSize,
|
||
|
rect.y * globalConfig.tileSize,
|
||
|
rect.w * globalConfig.tileSize,
|
||
|
rect.h * globalConfig.tileSize
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
const spriteKey = staticComp.spriteKey;
|
||
|
if (spriteKey) {
|
||
|
// Check if origin is contained to avoid drawing entities multiple times
|
||
|
if (
|
||
|
staticComp.origin.x >= chunk.tileX &&
|
||
|
staticComp.origin.x < chunk.tileX + globalConfig.mapChunkSize &&
|
||
|
staticComp.origin.y >= chunk.tileY &&
|
||
|
staticComp.origin.y < chunk.tileY + globalConfig.mapChunkSize
|
||
|
) {
|
||
|
const sprite = Loader.getSprite(spriteKey);
|
||
|
staticComp.drawSpriteOnFullEntityBounds(parameters, sprite, 2, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|