1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Merge branch 'copy-paste' into puzzle

This commit is contained in:
Sense101 2021-06-24 15:18:31 +01:00
commit 7667b5e43b
4 changed files with 32 additions and 9 deletions

View File

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

View File

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

View File

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

View File

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