From 1f136ba89260a51fb1d050e0046a442f54d37838 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:27:39 +0200 Subject: [PATCH 01/14] Minor fixes for dark mode --- src/css/common.scss | 2 +- src/css/ingame_hud/dialogs.scss | 6 ++++-- src/css/main.scss | 2 +- src/css/states/settings.scss | 6 +++--- src/css/textual_game_state.scss | 4 ++-- src/css/variables.scss | 2 ++ src/js/changelog.js | 2 ++ 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/css/common.scss b/src/css/common.scss index f616eace..6a87012e 100644 --- a/src/css/common.scss +++ b/src/css/common.scss @@ -40,7 +40,7 @@ html { background: #dee1ea; @include DarkThemeOverride { - background: #5c606c; + background: $darkModeGameBackground; } } diff --git a/src/css/ingame_hud/dialogs.scss b/src/css/ingame_hud/dialogs.scss index cd681a9e..d72265e7 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -21,15 +21,17 @@ } } + $darkModeDialogBg: darken($darkModeGameBackground, 10); + @include DarkThemeOverride { - background: rgba(#33363d, 0.9); + background: rgba($darkModeDialogBg, 0.9); @include InlineAnimation(0.12s ease-in-out) { 0% { background-color: transparent; opacity: 0.5; } 100% { - background-color: rgba(#33363d, 0.9); + background-color: rgba($darkModeDialogBg, 0.9); } } diff --git a/src/css/main.scss b/src/css/main.scss index 598e9e92..178f398b 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -112,6 +112,6 @@ body.modalDialogActive, body.externalAdOpen, body.ingameDialogOpen { > *:not(.ingameDialog):not(.modalDialogParent):not(.loadingDialog):not(.gameLoadingOverlay):not(#ingame_HUD_ModalDialogs):not(.noBlur) { - filter: blur(5px) !important; + // filter: blur(5px) !important; } } diff --git a/src/css/states/settings.scss b/src/css/states/settings.scss index 6c3df736..f06c9b31 100644 --- a/src/css/states/settings.scss +++ b/src/css/states/settings.scss @@ -92,11 +92,11 @@ @include DarkThemeOverride { .content { .setting { - background: #424345; + background: darken($darkModeGameBackground, 10); .value.enum { // dirty but works - filter: invert(0.8); + filter: invert(0.85); color: #222; } @@ -104,7 +104,7 @@ background-color: #74767b; &.checked { - background-color: #605b7d; + background-color: $colorBlueBright; } } } diff --git a/src/css/textual_game_state.scss b/src/css/textual_game_state.scss index 1f9dc356..a8d7a31f 100644 --- a/src/css/textual_game_state.scss +++ b/src/css/textual_game_state.scss @@ -65,7 +65,7 @@ @include DarkThemeOverride { .headerBar { h1 { - color: #cfceca; + color: #e2e0db; } .backButton { @@ -74,7 +74,7 @@ } > .container > .content { - background: #4b4c50; + background: darken($darkModeGameBackground, 3); color: #eee; } } diff --git a/src/css/variables.scss b/src/css/variables.scss index 5f056a00..c1c69371 100644 --- a/src/css/variables.scss +++ b/src/css/variables.scss @@ -38,6 +38,8 @@ $ingameHudBg: rgba(#333438, 0.9); $text3dColor: #f4ffff; +$darkModeGameBackground: #5c606c; + // Dialog properties $modalDialogBg: rgba(160, 165, 180, 0.8); $dialogBgColor: lighten($mainBgColor, 10); diff --git a/src/js/changelog.js b/src/js/changelog.js index c5be2056..0d980695 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,10 +9,12 @@ export const CHANGELOG = [ "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", "Optimize performance by caching miner items (by Phlosioneer)", + "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", "Fix for exporting screenshots for huge bases (It was showing an empty file) (by xSparfuchs)", "Fix buttons not responding when using right click directly after left click (by davidburhans)", + "Disable dialog background blur since it can cause performance issues", "Added simplified chinese translations", "Update translations (Thanks to all translators!)", ], From 47b3ed5cbffd37f645675184c12507d2aaffa516 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:47:37 +0200 Subject: [PATCH 02/14] Add option to render info boxes compact --- src/css/ingame_hud/building_placer.scss | 13 +++++++++++++ src/js/changelog.js | 1 + src/js/game/hud/parts/building_placer.js | 4 ++++ src/js/profile/application_settings.js | 9 ++++++++- translations/base-en.yaml | 5 +++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/css/ingame_hud/building_placer.scss b/src/css/ingame_hud/building_placer.scss index 99c4d654..e63868ab 100644 --- a/src/css/ingame_hud/building_placer.scss +++ b/src/css/ingame_hud/building_placer.scss @@ -75,6 +75,15 @@ @include StyleBelowWidth(700px) { display: none !important; } + + &.compact { + width: unset !important; + grid-template-columns: 1fr; + .buildingImage, + .description > .text { + display: none; + } + } } #ingame_HUD_PlacerVariants { @@ -86,6 +95,10 @@ flex-direction: column; align-items: flex-end; + &.compact { + @include S(top, 150px); + } + .explanation { text-transform: uppercase; grid-row: 1 / 2; diff --git a/src/js/changelog.js b/src/js/changelog.js index 0d980695..da5ec97c 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,6 +9,7 @@ export const CHANGELOG = [ "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", "Optimize performance by caching miner items (by Phlosioneer)", + "Added setting to enable compact building infos, which only show ratios and hide the image / description", "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index 3a8ed0db..5faec6ab 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -38,6 +38,10 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { this.buildingInfoElements.tutorialImage = makeDiv(this.element, null, ["buildingImage"]); this.variantsElement = makeDiv(parent, "ingame_HUD_PlacerVariants"); + + const compact = this.root.app.settings.getAllSettings().compactBuildingInfo; + this.element.classList.toggle("compact", compact); + this.variantsElement.classList.toggle("compact", compact); } initialize() { diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index d1216c60..964fb885 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -200,6 +200,7 @@ export const allApplicationSettings = [ new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}), new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}), new BoolSetting("vignette", categoryGame, (app, value) => {}), + new BoolSetting("compactBuildingInfo", categoryGame, (app, value) => {}), ]; export function getApplicationSettingById(id) { @@ -223,6 +224,7 @@ class SettingsStorage { this.offerHints = true; this.enableTunnelSmartplace = true; this.vignette = true; + this.compactBuildingInfo = false; /** * @type {Object.} @@ -412,7 +414,7 @@ export class ApplicationSettings extends ReadWriteProxy { } getCurrentVersion() { - return 12; + return 13; } /** @param {{settings: SettingsStorage, version: number}} data */ @@ -459,6 +461,11 @@ export class ApplicationSettings extends ReadWriteProxy { data.version = 12; } + if (data.version < 13) { + data.settings.compactBuildingInfo = false; + data.version = 13; + } + return ExplainedResult.good(); } } diff --git a/translations/base-en.yaml b/translations/base-en.yaml index afe4907d..52f4ab3c 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -686,6 +686,11 @@ settings: description: >- Enables the vignette which darkens the screen corners and makes text easier to read. + compactBuildingInfo: + title: Compact Building Infos + description: >- + Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown. + keybindings: title: Keybindings hint: >- From 0b8f7cdf6557ed3f0a3e6b6ad162ee9f4e549c3c Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:54:48 +0200 Subject: [PATCH 03/14] update artwork --- artwork/steam/announcement.png | Bin 11975 -> 17994 bytes artwork/steam/announcement.psd | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/artwork/steam/announcement.png b/artwork/steam/announcement.png index 9a6b79f5d0c7266ad8da78081a8dc94fa75292c8..85c4f1b05d79df0f1c0a91377abab84abf34a9ff 100644 GIT binary patch literal 17994 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 E0HrSOTL1t6 delta 9418 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 diff --git a/artwork/steam/announcement.psd b/artwork/steam/announcement.psd index 6f0b201c..18f4442f 100644 --- a/artwork/steam/announcement.psd +++ b/artwork/steam/announcement.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c91adcd4e00006ffa4aed4db19d1530bf8c58935b1624d1640fc8e9465a2824 -size 176993 +oid sha256:bbac64f40b2bac1187c87efc97ac718c6e57349d304939c70d99a090e822b6dc +size 235135 From 2ca5dc97158436900294aaa01f35fefa1055f590 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:05:51 +0200 Subject: [PATCH 04/14] Fix hub marker being hidden by building info panel --- src/css/ingame_hud/waypoints.scss | 2 +- src/js/changelog.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/css/ingame_hud/waypoints.scss b/src/css/ingame_hud/waypoints.scss index ab8fed39..fecb2c66 100644 --- a/src/css/ingame_hud/waypoints.scss +++ b/src/css/ingame_hud/waypoints.scss @@ -29,7 +29,7 @@ #ingame_HUD_Waypoints { position: absolute; @include S(right, 10px); - @include S(top, 60px); + @include S(top, 45px); display: flex; flex-direction: column; @include DarkThemeInvert(); diff --git a/src/js/changelog.js b/src/js/changelog.js index da5ec97c..85dbff69 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -8,13 +8,14 @@ export const CHANGELOG = [ "Show keybindings for area-select in the upper left instead", "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", - "Optimize performance by caching miner items (by Phlosioneer)", + "Optimize performance by caching extractor items (by Phlosioneer)", "Added setting to enable compact building infos, which only show ratios and hide the image / description", "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", "Fix for exporting screenshots for huge bases (It was showing an empty file) (by xSparfuchs)", "Fix buttons not responding when using right click directly after left click (by davidburhans)", + "Fix hub marker being hidden by building info panel", "Disable dialog background blur since it can cause performance issues", "Added simplified chinese translations", "Update translations (Thanks to all translators!)", From 38114ff3f62aef13c288808fc8f66878560346ae Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:22:33 +0200 Subject: [PATCH 05/14] Fix right click to delete not working --- artwork/steam/announcement-cover.png | Bin 0 -> 64479 bytes src/css/states/main_menu.scss | 8 ++++---- src/js/game/hud/parts/building_placer_logic.js | 14 +------------- 3 files changed, 5 insertions(+), 17 deletions(-) create mode 100644 artwork/steam/announcement-cover.png diff --git a/artwork/steam/announcement-cover.png b/artwork/steam/announcement-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..60af91006574e8d631108b5a56fd3f1ca15bec4c GIT binary patch literal 64479 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

Jl8>; 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 W``8ud8MzD$3=E#GelF{r5}E*bWY2{F literal 0 HcmV?d00001 diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index f2cf120e..fa9d430c 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -403,7 +403,7 @@ } @include DarkThemeOverride { - background: #53565e center center / cover !important; + background: $darkModeGameBackground center center / cover !important; .topButtons { filter: invert(1); @@ -414,17 +414,17 @@ } .mainContainer { - background: #4b4c50; + background: darken($darkModeGameBackground, 10); .savegames .savegame { - background: #62646a; + background: darken($darkModeGameBackground, 15); color: white; } } .footer { > a { - background: #4b4c50; + background: darken($darkModeGameBackground, 10); color: #eee; } diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 647fe5b9..15564e4d 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -237,18 +237,6 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { } } - /** - * Canvas click handler - * @param {Vector} mousePos - * @param {boolean} cancelAction - */ - onCanvasClick(mousePos, cancelAction = false) { - // Prevent any other canvas clicks - if (this.currentMetaBuilding.get()) { - return STOP_PROPAGATION; - } - } - /** * Tries to place the current building at the given tile * @param {Vector} tile @@ -473,7 +461,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { this.currentlyDragging = true; this.currentlyDeleting = true; this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace(); - this.currentMetaBuilding.set(null); + this.deleteBelowCursor(); return STOP_PROPAGATION; } From 0b31ad0c7bb77cb6d393901428ef793dd3bef97f Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:44:53 +0200 Subject: [PATCH 06/14] Pipette --- src/css/states/ingame.scss | 2 +- src/js/game/hud/hud.js | 2 ++ src/js/game/hud/parts/blueprint_placer.js | 34 +++++++++++++++---- .../game/hud/parts/building_placer_logic.js | 4 +-- src/js/game/hud/parts/keybinding_overlay.js | 9 ++++- src/js/game/hud/parts/pipette_blueprint.js | 23 +++++++++++++ src/js/game/key_action_mapper.js | 4 +-- translations/base-en.yaml | 3 +- 8 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 src/js/game/hud/parts/pipette_blueprint.js diff --git a/src/css/states/ingame.scss b/src/css/states/ingame.scss index 614cdf6a..3f220a5d 100644 --- a/src/css/states/ingame.scss +++ b/src/css/states/ingame.scss @@ -31,7 +31,7 @@ @include DarkThemeOverride { .gameLoadingOverlay { - background: #56565c; + background: $darkModeGameBackground; } } } diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 40338600..5d99194e 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -34,6 +34,7 @@ import { HUDPartTutorialHints } from "./parts/tutorial_hints"; import { HUDWaypoints } from "./parts/waypoints"; import { HUDInteractiveTutorial } from "./parts/interactive_tutorial"; import { HUDScreenshotExporter } from "./parts/screenshot_exporter"; +import { Entity } from "../entity"; export class GameHUD { /** @@ -75,6 +76,7 @@ export class GameHUD { shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()), notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()), buildingsSelectedForCopy: /** @type {TypedSignal<[Array]>} */ (new Signal()), + pipetteExecuted: /** @type {TypedSignal<[Entity]>} */ (new Signal()), pasteBlueprintRequested: new Signal(), }; diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index fa9faca2..3831af99 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -10,6 +10,7 @@ import { makeDiv } from "../../../core/utils"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { blueprintShape } from "../../upgrades"; import { T } from "../../../translations"; +import { PipetteBlueprint } from "./pipette_blueprint"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { @@ -34,11 +35,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const keyActionMapper = this.root.keyMapper; keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); - keyActionMapper - .getBinding(KEYMAPPINGS.placement.abortBuildingPlacement) - .add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.camera.downPreHandler.add(this.onMouseDown, this); this.root.camera.movePreHandler.add(this.onMouseMove, this); @@ -57,15 +56,36 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } } + /** + * Starts the pipette function + */ + startPipette() { + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + const worldPos = this.root.camera.screenToWorld(mousePosition); + const tile = worldPos.toTileSpace(); + const contents = this.root.map.getTileContent(tile); + if (contents) { + const blueprint = PipetteBlueprint.fromEntity(contents); + + // Notice: Order here matters, since pipetteExecuted clears the blueprint + this.root.hud.signals.pipetteExecuted.dispatch(contents); + this.currentBlueprint.set(blueprint); + } + } + onCanAffordChanged(canAfford) { this.costDisplayParent.classList.toggle("canAfford", canAfford); } update() { - this.domAttach.update(this.currentBlueprint.get()); - this.trackedCanAfford.set( - this.currentBlueprint.get() && this.currentBlueprint.get().canAfford(this.root) - ); + const currentBlueprint = this.currentBlueprint.get(); + this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0); + this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root)); } /** diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 15564e4d..3a41a3f2 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -97,15 +97,13 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { keyActionMapper .getBinding(KEYMAPPINGS.placement.switchDirectionLockSide) .add(this.switchDirectionLockSide, this); - keyActionMapper - .getBinding(KEYMAPPINGS.placement.abortBuildingPlacement) - .add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); // BINDINGS TO GAME EVENTS this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); this.root.hud.signals.pasteBlueprintRequested.add(this.abortPlacement, this); + this.root.hud.signals.pipetteExecuted.add(this.abortPlacement, this); this.root.signals.storyGoalCompleted.add(() => this.signals.variantChanged.dispatch()); this.root.signals.upgradePurchased.add(() => this.signals.variantChanged.dispatch()); diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 7aca3722..633dfcef 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -164,10 +164,17 @@ export class HUDKeybindingOverlay extends BaseHUDPart { condition: () => this.mapOverviewActive && !this.blueprintPlacementActive, }, + { + // Pipette + label: T.ingame.keybindingsOverlay.pipette, + keys: [k.placement.pipette], + condition: () => !this.mapOverviewActive, + }, + { // Cancel placement label: T.ingame.keybindingsOverlay.stopPlacement, - keys: [KEYCODE_RMB, DIVIDER_TOKEN, k.placement.abortBuildingPlacement], + keys: [KEYCODE_RMB], condition: () => this.anyPlacementActive, }, diff --git a/src/js/game/hud/parts/pipette_blueprint.js b/src/js/game/hud/parts/pipette_blueprint.js new file mode 100644 index 00000000..3be8a207 --- /dev/null +++ b/src/js/game/hud/parts/pipette_blueprint.js @@ -0,0 +1,23 @@ +import { Vector } from "../../../core/vector"; +import { Entity } from "../../entity"; +import { Blueprint } from "./blueprint"; + +export class PipetteBlueprint extends Blueprint { + /** + * @see Blueprint.getCost + */ + getCost() { + // Its free + return 0; + } + + /** + * Creates a new pipetted blueprint from a given entity + * @param {Entity} entity + */ + static fromEntity(entity) { + const clone = entity.duplicateWithoutContents(); + clone.components.StaticMapEntity.origin = new Vector(0, 0); + return new PipetteBlueprint([clone]); + } +} diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 659f01e6..c514446d 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -24,7 +24,7 @@ export const KEYMAPPINGS = { menuOpenStats: { keyCode: key("G") }, toggleHud: { keyCode: 113 }, // F2 - exportScreenshot: { keyCode: 114 }, // F3 + exportScreenshot: { keyCode: 114 }, // F3PS toggleFPSInfo: { keyCode: 115 }, // F4 }, @@ -56,7 +56,7 @@ export const KEYMAPPINGS = { }, placement: { - abortBuildingPlacement: { keyCode: key("Q") }, + pipette: { keyCode: key("Q") }, rotateWhilePlacing: { keyCode: key("R") }, rotateInverseModifier: { keyCode: 16 }, // SHIFT cycleBuildingVariants: { keyCode: key("T") }, diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 52f4ab3c..0b754e4b 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -288,6 +288,7 @@ ingame: cutSelection: Cut copySelection: Copy clearSelection: Clear Selection + pipette: Pipette # Everything related to placing buildings (I.e. as soon as you selected a building # from the toolbar) @@ -738,7 +739,7 @@ keybindings: painter: *painter trash: *trash - abortBuildingPlacement: Abort Placement + pipette: Pipette rotateWhilePlacing: Rotate rotateInverseModifier: >- Modifier: Rotate CCW instead From 76b619e4e75e837f8df0e631018a39dcd7b6cde1 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:46:20 +0200 Subject: [PATCH 07/14] Allow deselecting with pipette --- src/js/game/hud/parts/blueprint_placer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 3831af99..eb07ae18 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -75,6 +75,8 @@ export class HUDBlueprintPlacer extends BaseHUDPart { // Notice: Order here matters, since pipetteExecuted clears the blueprint this.root.hud.signals.pipetteExecuted.dispatch(contents); this.currentBlueprint.set(blueprint); + } else { + this.root.hud.signals.pipetteExecuted.dispatch(null); } } From ba52edf7a4178c141fc2b550c8dd2190886586da Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:59:35 +0200 Subject: [PATCH 08/14] Fixes for the pipette --- artwork/steam/announcement.png | Bin 17994 -> 17746 bytes artwork/steam/announcement.psd | 4 ++-- src/js/game/hud/parts/blueprint_placer.js | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/artwork/steam/announcement.png b/artwork/steam/announcement.png index 85c4f1b05d79df0f1c0a91377abab84abf34a9ff..1aacc62e82392d1dbd962548936fc6408a526829 100644 GIT binary patch delta 15170 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 diff --git a/artwork/steam/announcement.psd b/artwork/steam/announcement.psd index 18f4442f..30dce1e6 100644 --- a/artwork/steam/announcement.psd +++ b/artwork/steam/announcement.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbac64f40b2bac1187c87efc97ac718c6e57349d304939c70d99a090e822b6dc -size 235135 +oid sha256:ebde52e75e54d2f4add0cf498c85f059082a0745212a23c4de7328a7d78b00a5 +size 238170 diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index eb07ae18..822e5c67 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -60,6 +60,11 @@ export class HUDBlueprintPlacer extends BaseHUDPart { * Starts the pipette function */ startPipette() { + // Disable in overview + if (this.root.camera.getIsMapOverlayActive()) { + return; + } + const mousePosition = this.root.app.mousePosition; if (!mousePosition) { // Not on screen @@ -69,7 +74,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const worldPos = this.root.camera.screenToWorld(mousePosition); const tile = worldPos.toTileSpace(); const contents = this.root.map.getTileContent(tile); - if (contents) { + + // Make sure we selected something, and also make sure it's not a special entity + if (contents && !contents.components.Unremovable) { const blueprint = PipetteBlueprint.fromEntity(contents); // Notice: Order here matters, since pipetteExecuted clears the blueprint From 5b2df00cc7b90839e52685606c289487ec8e7127 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:05:41 +0200 Subject: [PATCH 09/14] Fix pipetting belts --- src/js/game/hud/parts/blueprint_placer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 822e5c67..62ba4df1 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -76,7 +76,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const contents = this.root.map.getTileContent(tile); // Make sure we selected something, and also make sure it's not a special entity - if (contents && !contents.components.Unremovable) { + if (contents && !contents.components.Unremovable && !contents.components.Belt) { const blueprint = PipetteBlueprint.fromEntity(contents); // Notice: Order here matters, since pipetteExecuted clears the blueprint From d907dbb191030835d992db94a0fa22abcedc36b5 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:29:23 +0200 Subject: [PATCH 10/14] Improve pipette --- src/js/game/hud/hud.js | 1 - src/js/game/hud/parts/blueprint_placer.js | 43 +----- .../game/hud/parts/building_placer_logic.js | 123 +++++++++++++++++- src/js/game/hud/parts/pipette_blueprint.js | 23 ---- src/js/game/meta_building.js | 30 ++++- 5 files changed, 150 insertions(+), 70 deletions(-) delete mode 100644 src/js/game/hud/parts/pipette_blueprint.js diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 5d99194e..c322c707 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -76,7 +76,6 @@ export class GameHUD { shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()), notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()), buildingsSelectedForCopy: /** @type {TypedSignal<[Array]>} */ (new Signal()), - pipetteExecuted: /** @type {TypedSignal<[Entity]>} */ (new Signal()), pasteBlueprintRequested: new Signal(), }; diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 62ba4df1..59f8dfc2 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -1,16 +1,15 @@ import { DrawParameters } from "../../../core/draw_parameters"; import { STOP_PROPAGATION } from "../../../core/signal"; import { TrackedState } from "../../../core/tracked_state"; +import { makeDiv } from "../../../core/utils"; import { Vector } from "../../../core/vector"; +import { T } from "../../../translations"; import { enumMouseButton } from "../../camera"; import { KEYMAPPINGS } from "../../key_action_mapper"; -import { BaseHUDPart } from "../base_hud_part"; -import { Blueprint } from "./blueprint"; -import { makeDiv } from "../../../core/utils"; -import { DynamicDomAttach } from "../dynamic_dom_attach"; import { blueprintShape } from "../../upgrades"; -import { T } from "../../../translations"; -import { PipetteBlueprint } from "./pipette_blueprint"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; +import { Blueprint } from "./blueprint"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { @@ -37,7 +36,6 @@ export class HUDBlueprintPlacer extends BaseHUDPart { keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); - keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.camera.downPreHandler.add(this.onMouseDown, this); this.root.camera.movePreHandler.add(this.onMouseMove, this); @@ -56,37 +54,6 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } } - /** - * Starts the pipette function - */ - startPipette() { - // Disable in overview - if (this.root.camera.getIsMapOverlayActive()) { - return; - } - - const mousePosition = this.root.app.mousePosition; - if (!mousePosition) { - // Not on screen - return; - } - - const worldPos = this.root.camera.screenToWorld(mousePosition); - const tile = worldPos.toTileSpace(); - const contents = this.root.map.getTileContent(tile); - - // Make sure we selected something, and also make sure it's not a special entity - if (contents && !contents.components.Unremovable && !contents.components.Belt) { - const blueprint = PipetteBlueprint.fromEntity(contents); - - // Notice: Order here matters, since pipetteExecuted clears the blueprint - this.root.hud.signals.pipetteExecuted.dispatch(contents); - this.currentBlueprint.set(blueprint); - } else { - this.root.hud.signals.pipetteExecuted.dispatch(null); - } - } - onCanAffordChanged(canAfford) { this.costDisplayParent.classList.toggle("canAfford", canAfford); } diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 3a41a3f2..0da81d4a 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -1,5 +1,6 @@ import { Math_abs, Math_degrees, Math_round } from "../../../core/builtins"; import { globalConfig } from "../../../core/config"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { Signal, STOP_PROPAGATION } from "../../../core/signal"; import { TrackedState } from "../../../core/tracked_state"; import { Vector } from "../../../core/vector"; @@ -9,7 +10,6 @@ import { Entity } from "../../entity"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { defaultBuildingVariant, MetaBuilding } from "../../meta_building"; import { BaseHUDPart } from "../base_hud_part"; -import { lerp } from "../../../core/utils"; /** * Contains all logic for the building placer - this doesn't include the rendering @@ -98,12 +98,12 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { .getBinding(KEYMAPPINGS.placement.switchDirectionLockSide) .add(this.switchDirectionLockSide, this); keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); // BINDINGS TO GAME EVENTS this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); this.root.hud.signals.pasteBlueprintRequested.add(this.abortPlacement, this); - this.root.hud.signals.pipetteExecuted.add(this.abortPlacement, this); this.root.signals.storyGoalCompleted.add(() => this.signals.variantChanged.dispatch()); this.root.signals.upgradePurchased.add(() => this.signals.variantChanged.dispatch()); @@ -218,6 +218,125 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { } } + /** + * Starts the pipette function + */ + startPipette() { + // Disable in overview + if (this.root.camera.getIsMapOverlayActive()) { + return; + } + + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + const worldPos = this.root.camera.screenToWorld(mousePosition); + const tile = worldPos.toTileSpace(); + const contents = this.root.map.getTileContent(tile); + + if (!contents) { + this.currentMetaBuilding.set(null); + return; + } + + // Try to extract the building + const extracted = this.hack_reconstructMetaBuildingAndVariantFromBuilding(contents); + if (!extracted) { + this.currentMetaBuilding.set(null); + return; + } + + this.currentMetaBuilding.set(extracted.metaBuilding); + this.currentVariant.set(extracted.variant); + this.currentBaseRotation = contents.components.StaticMapEntity.rotation; + + // Make sure we selected something, and also make sure it's not a special entity + // if (contents && !contents.components.Unremovable) { + + // } + } + + /** + * HACK! + * + * This attempts to reconstruct the meta building and its variant from a given entity + * @param {Entity} entity + * @returns {{ metaBuilding: MetaBuilding, variant: string }} + */ + hack_reconstructMetaBuildingAndVariantFromBuilding(entity) { + if (entity.components.Hub) { + // Hub is not copyable + return null; + } + + const matches = []; + const metaBuildings = gMetaBuildingRegistry.entries; + for (let i = 0; i < metaBuildings.length; ++i) { + const metaBuilding = metaBuildings[i]; + const availableVariants = metaBuilding.getAvailableVariants(this.root); + checkVariant: for (let k = 0; k < availableVariants.length; ++k) { + const variant = availableVariants[k]; + let unplaced = metaBuilding.createEntity({ + root: this.root, + variant, + origin: new Vector(0, 0), + rotation: 0, + originalRotation: 0, + rotationVariant: 0, + }); + + // Compare if both entities share the same components + for (let component in entity.components) { + if ((entity.components[component] == null) !== (unplaced.components[component] == null)) { + continue checkVariant; + } + } + + // Check for same item processor + if ( + entity.components.ItemProcessor && + entity.components.ItemProcessor.type != unplaced.components.ItemProcessor.type + ) { + continue checkVariant; + } + + // Check for underground belt + if ( + entity.components.UndergroundBelt && + entity.components.UndergroundBelt.tier != unplaced.components.UndergroundBelt.tier + ) { + continue checkVariant; + } + + // Check for same sprite key - except for underground belts + // since the sprite may vary here + if ( + !entity.components.UndergroundBelt && + entity.components.StaticMapEntity.spriteKey != + unplaced.components.StaticMapEntity.spriteKey + ) { + continue checkVariant; + } + matches.push({ metaBuilding, variant }); + } + } + + if (matches.length == 1) { + const staticEntity = entity.components.StaticMapEntity; + const key = staticEntity.spriteKey || staticEntity.blueprintSpriteKey; + assert( + key && + key.includes(matches[0].metaBuilding.id) && + (matches[0].variant === defaultBuildingVariant || key.includes(matches[0].variant)) + ); + return matches[0]; + } + return null; + } + switchDirectionLockSide() { this.currentDirectionLockSide = 1 - this.currentDirectionLockSide; } diff --git a/src/js/game/hud/parts/pipette_blueprint.js b/src/js/game/hud/parts/pipette_blueprint.js deleted file mode 100644 index 3be8a207..00000000 --- a/src/js/game/hud/parts/pipette_blueprint.js +++ /dev/null @@ -1,23 +0,0 @@ -import { Vector } from "../../../core/vector"; -import { Entity } from "../../entity"; -import { Blueprint } from "./blueprint"; - -export class PipetteBlueprint extends Blueprint { - /** - * @see Blueprint.getCost - */ - getCost() { - // Its free - return 0; - } - - /** - * Creates a new pipetted blueprint from a given entity - * @param {Entity} entity - */ - static fromEntity(entity) { - const clone = entity.duplicateWithoutContents(); - clone.components.StaticMapEntity.origin = new Vector(0, 0); - return new PipetteBlueprint([clone]); - } -} diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 723e854b..11da28f3 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -147,10 +147,32 @@ export class MetaBuilding { * @param {string} param0.variant */ createAndPlaceEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { + const entity = this.createEntity({ + root, + origin, + rotation, + originalRotation, + rotationVariant, + variant, + }); + root.map.placeStaticEntity(entity); + root.entityMgr.registerEntity(entity); + return entity; + } + + /** + * Creates the entity without placing it + * @param {object} param0 + * @param {GameRoot} param0.root + * @param {Vector} param0.origin Origin tile + * @param {number=} param0.rotation Rotation + * @param {number} param0.originalRotation Original Rotation + * @param {number} param0.rotationVariant Rotation variant + * @param {string} param0.variant + */ + createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { const entity = new Entity(root); - const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant); - entity.addComponent( new StaticMapEntityComponent({ spriteKey: @@ -166,12 +188,8 @@ export class MetaBuilding { blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "", }) ); - this.setupEntityComponents(entity, root); this.updateVariants(entity, rotationVariant, variant); - - root.map.placeStaticEntity(entity); - root.entityMgr.registerEntity(entity); return entity; } From 597eefe968e6f2d481bb8b51a9ad3968a8e8713f Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:51:42 +0200 Subject: [PATCH 11/14] Deselect blueprint on pipette --- src/js/game/hud/parts/blueprint_placer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 59f8dfc2..ef46f101 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -34,6 +34,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const keyActionMapper = this.root.keyMapper; keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); From e660fd2cafb63d8bf6873cc97928bf1baa18d2e2 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:54:50 +0200 Subject: [PATCH 12/14] Update changelog --- src/js/changelog.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 85dbff69..fa41760b 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,8 +1,9 @@ export const CHANGELOG = [ { version: "1.1.16", - date: "unreleased", + date: "21.06.2020", entries: [ + "You can now pickup buildings below your cursor with 'Q'!", "The game soundtrack has been extended! There are now 4 songs with over 13 minutes of playtime from Peppsen!", "Refactor keybindings overlay to show more appropriate keybindings", "Show keybindings for area-select in the upper left instead", From 5e83c4642b4c882a74d26e973aad3e700f696e39 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:56:38 +0200 Subject: [PATCH 13/14] Reduce sound volume --- gulp/sounds.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulp/sounds.js b/gulp/sounds.js index 1b18278d..0e8dee12 100644 --- a/gulp/sounds.js +++ b/gulp/sounds.js @@ -29,7 +29,7 @@ function gulptasksSounds($, gulp, buildFolder) { .audioChannels(1) .audioFrequency(22050) .audioCodec("libmp3lame") - .audioFilters(["volume=0.3"]); + .audioFilters(["volume=0.15"]); }), { name: "music", From 969b7a74d44403e7aba5f8641048b172664bc635 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 23:01:42 +0200 Subject: [PATCH 14/14] Fix belt planner shortcut being shown always --- src/js/game/hud/parts/keybinding_overlay.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 633dfcef..5b7f4a9d 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -44,7 +44,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart { * it supports the belt planner * @returns {boolean} */ - get buildingPlacementBeltPlanner() { + get buildingPlacementSupportsBeltPlanner() { const placer = this.root.hud.parts.buildingPlacer; return ( !this.mapOverviewActive && @@ -225,7 +225,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart { // Belt planner label: T.ingame.keybindingsOverlay.lockBeltDirection, keys: [k.placementModifiers.lockBeltDirection], - condition: () => this.buildingPlacementActive && !this.beltPlannerActive, + condition: () => this.buildingPlacementSupportsBeltPlanner && !this.beltPlannerActive, }, {