Add back copy/paste in puzzle mode. (#1230)

* added the new splitter

* Update base-en.yaml

* added the new splitter

Update changelog and update translation regarding 20 upgrade tiers, closes #907

* Update base-en.yaml

* Added back copy/paste in puzzle mode

* fixed rotating non-rotatable buildings as blueprints and made blocker non-rotatable
This commit is contained in:
Sense101 2021-06-24 17:45:48 +01:00 committed by GitHub
parent 1c23549b39
commit f7cc313ff4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 39 additions and 14 deletions

View File

@ -101,8 +101,11 @@ export class Blueprint {
const entity = this.entities[i];
const staticComp = entity.components.StaticMapEntity;
staticComp.rotation = (staticComp.rotation + 90) % 360;
staticComp.originalRotation = (staticComp.originalRotation + 90) % 360;
if (staticComp.getMetaBuilding().getIsRotateable()) {
staticComp.rotation = (staticComp.rotation + 90) % 360;
staticComp.originalRotation = (staticComp.originalRotation + 90) % 360;
}
staticComp.origin = staticComp.origin.rotateFastMultipleOf90(90);
}
}

View File

@ -166,8 +166,8 @@ export class GameMode extends BasicSerializableObject {
}
/** @returns {boolean} */
getSupportsCopyPaste() {
return true;
getHasFreeCopyPaste() {
return false;
}
/** @returns {boolean} */

View File

@ -27,6 +27,8 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
}
initialize() {
this.isCopyPasteFree = this.root.gameMode.getHasFreeCopyPaste();
this.root.hud.signals.buildingsSelectedForCopy.add(this.createBlueprintFromBuildings, this);
/** @type {TypedTrackedState<Blueprint?>} */
@ -82,7 +84,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
update() {
const currentBlueprint = this.currentBlueprint.get();
this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0);
this.domAttach.update(!this.isCopyPasteFree && currentBlueprint && currentBlueprint.getCost() > 0);
this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root));
}
@ -114,7 +116,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
return;
}
if (!blueprint.canAfford(this.root)) {
if (!this.isCopyPasteFree && !blueprint.canAfford(this.root)) {
this.root.soundProxy.playUiError();
return;
}
@ -122,8 +124,10 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
const worldPos = this.root.camera.screenToWorld(pos);
const tile = worldPos.toTileSpace();
if (blueprint.tryPlace(this.root, tile)) {
const cost = blueprint.getCost();
this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost);
if (!this.isCopyPasteFree) {
const cost = blueprint.getCost();
this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost);
}
this.root.soundProxy.playUi(SOUNDS.placeBuilding);
}
return STOP_PROPAGATION;
@ -131,7 +135,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
}
/**
* Mose move handler
* Mouse move handler
*/
onMouseMove() {
// Prevent movement while blueprint is selected

View File

@ -1,5 +1,6 @@
import { globalConfig } from "../../../core/config";
import { DrawParameters } from "../../../core/draw_parameters";
import { gMetaBuildingRegistry } from "../../../core/global_registries";
import { createLogger } from "../../../core/logging";
import { STOP_PROPAGATION } from "../../../core/signal";
import { formatBigNumberFull } from "../../../core/utils";
@ -7,6 +8,8 @@ import { Vector } from "../../../core/vector";
import { ACHIEVEMENTS } from "../../../platform/achievement_provider";
import { T } from "../../../translations";
import { Blueprint } from "../../blueprint";
import { MetaBlockBuilding } from "../../buildings/block";
import { MetaConstantProducerBuilding } from "../../buildings/constant_producer";
import { enumMouseButton } from "../../camera";
import { Component } from "../../component";
import { Entity } from "../../entity";
@ -260,7 +263,14 @@ export class HUDMassSelector extends BaseHUDPart {
for (let x = realTileStart.x; x <= realTileEnd.x; ++x) {
for (let y = realTileStart.y; y <= realTileEnd.y; ++y) {
const contents = this.root.map.getLayerContentXY(x, y, this.root.currentLayer);
if (contents && this.root.logic.canDeleteBuilding(contents)) {
const staticComp = contents.components.StaticMapEntity;
if (!staticComp.getMetaBuilding().getIsRemovable(this.root)) {
continue;
}
this.selectedUids.add(contents.uid);
}
}
@ -320,6 +330,11 @@ export class HUDMassSelector extends BaseHUDPart {
renderedUids.add(uid);
const staticComp = contents.components.StaticMapEntity;
if (!staticComp.getMetaBuilding().getIsRemovable(this.root)) {
continue;
}
const bounds = staticComp.getTileSpaceBounds();
parameters.context.beginRoundedRect(
bounds.x * globalConfig.tileSize + boundsBorder,

View File

@ -158,10 +158,9 @@ export class MetaBuilding {
/**
* Returns whether this building is rotateable
* @param {string} variant
* @returns {boolean}
*/
getIsRotateable(variant) {
getIsRotateable() {
return true;
}
@ -243,7 +242,7 @@ export class MetaBuilding {
* @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array<Entity> }}
*/
computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) {
if (!this.getIsRotateable(variant)) {
if (!this.getIsRotateable()) {
return {
rotation: 0,
rotationVariant: 0,

View File

@ -7,6 +7,8 @@ import { types } from "../../savegame/serialization";
import { enumGameModeTypes, GameMode } from "../game_mode";
import { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu";
import { HUDPuzzleDLCLogo } from "../hud/parts/puzzle_dlc_logo";
import { HUDBlueprintPlacer } from "../hud/parts/blueprint_placer";
import { HUDMassSelector } from "../hud/parts/mass_selector";
export class PuzzleGameMode extends GameMode {
static getType() {
@ -30,6 +32,8 @@ export class PuzzleGameMode extends GameMode {
this.additionalHudParts = {
puzzleBackToMenu: HUDPuzzleBackToMenu,
puzzleDlcLogo: HUDPuzzleDLCLogo,
blueprintPlacer: HUDBlueprintPlacer,
massSelector: HUDMassSelector,
};
this.zoneWidth = data.zoneWidth || 8;
@ -79,8 +83,8 @@ export class PuzzleGameMode extends GameMode {
return false;
}
getSupportsCopyPaste() {
return false;
getHasFreeCopyPaste() {
return true;
}
throughputDoesNotMatter() {