From 5076c03dabe655b0290f6a10c5fc76f0682d05af Mon Sep 17 00:00:00 2001 From: tobspr Date: Fri, 28 Aug 2020 22:25:31 +0200 Subject: [PATCH] Fixed rotated levers not being rendered correctly --- src/js/game/systems/lever.js | 95 +++++++++++++++++------------------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/src/js/game/systems/lever.js b/src/js/game/systems/lever.js index 0d538afc..75b6cf28 100644 --- a/src/js/game/systems/lever.js +++ b/src/js/game/systems/lever.js @@ -1,51 +1,44 @@ -import { GameSystemWithFilter } from "../game_system_with_filter"; -import { LeverComponent } from "../components/lever"; -import { BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON } from "../items/boolean_item"; -import { MapChunkView } from "../map_chunk_view"; -import { globalConfig } from "../../core/config"; -import { Loader } from "../../core/loader"; - -export class LeverSystem extends GameSystemWithFilter { - constructor(root) { - super(root, [LeverComponent]); - - this.spriteOn = Loader.getSprite("sprites/wires/lever_on.png"); - this.spriteOff = Loader.getSprite("sprites/buildings/lever.png"); - } - - update() { - for (let i = 0; i < this.allEntities.length; ++i) { - const entity = this.allEntities[i]; - - const leverComp = entity.components.Lever; - const pinsComp = entity.components.WiredPins; - - // Simply sync the status to the first slot - pinsComp.slots[0].value = leverComp.toggled ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON; - } - } - - /** - * Draws a given chunk - * @param {import("../../core/draw_utils").DrawParameters} parameters - * @param {MapChunkView} chunk - */ - drawChunk(parameters, chunk) { - const contents = chunk.containedEntitiesByLayer.regular; - for (let i = 0; i < contents.length; ++i) { - const entity = contents[i]; - const leverComp = entity.components.Lever; - if (leverComp) { - const sprite = leverComp.toggled ? this.spriteOn : this.spriteOff; - const origin = entity.components.StaticMapEntity.origin; - sprite.drawCached( - parameters, - origin.x * globalConfig.tileSize, - origin.y * globalConfig.tileSize, - globalConfig.tileSize, - globalConfig.tileSize - ); - } - } - } -} +import { GameSystemWithFilter } from "../game_system_with_filter"; +import { LeverComponent } from "../components/lever"; +import { BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON } from "../items/boolean_item"; +import { MapChunkView } from "../map_chunk_view"; +import { globalConfig } from "../../core/config"; +import { Loader } from "../../core/loader"; + +export class LeverSystem extends GameSystemWithFilter { + constructor(root) { + super(root, [LeverComponent]); + + this.spriteOn = Loader.getSprite("sprites/wires/lever_on.png"); + this.spriteOff = Loader.getSprite("sprites/buildings/lever.png"); + } + + update() { + for (let i = 0; i < this.allEntities.length; ++i) { + const entity = this.allEntities[i]; + + const leverComp = entity.components.Lever; + const pinsComp = entity.components.WiredPins; + + // Simply sync the status to the first slot + pinsComp.slots[0].value = leverComp.toggled ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON; + } + } + + /** + * Draws a given chunk + * @param {import("../../core/draw_utils").DrawParameters} parameters + * @param {MapChunkView} chunk + */ + drawChunk(parameters, chunk) { + const contents = chunk.containedEntitiesByLayer.regular; + for (let i = 0; i < contents.length; ++i) { + const entity = contents[i]; + const leverComp = entity.components.Lever; + if (leverComp) { + const sprite = leverComp.toggled ? this.spriteOn : this.spriteOff; + entity.components.StaticMapEntity.drawSpriteOnBoundsClipped(parameters, sprite); + } + } + } +}