diff --git a/electron/index.js b/electron/index.js index 44266f95..d078b649 100644 --- a/electron/index.js +++ b/electron/index.js @@ -10,8 +10,6 @@ const steam = require('./steam'); const isDev = process.argv.indexOf("--dev") >= 0; const isLocal = process.argv.indexOf("--local") >= 0; -steam.init(isDev); - const roamingFolder = process.env.APPDATA || (process.platform == "darwin" @@ -226,4 +224,5 @@ ipcMain.on("fs-sync-job", (event, arg) => { event.returnValue = result; }); +steam.init(isDev); steam.listen(); diff --git a/electron/package-lock.json b/electron/package-lock.json index 3284420d..de108582 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -788,7 +788,8 @@ }, "node_modules/shapez.io-private-artifacts": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#af8d792fe1429af95d990bba4a68362c2aa907c9", + "resolved": "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git", + "integrity": "sha512-Sp3JL2gSJloqkZ5hINBTcrFomwnCD0mguuRMfJb91SkcZfZuySPEtfi7m2S+96GedA1BI6+gLygDRY217ElTFg==", "license": "UNLICENSED", "optional": true }, @@ -1544,7 +1545,8 @@ } }, "shapez.io-private-artifacts": { - "version": "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#af8d792fe1429af95d990bba4a68362c2aa907c9", + "version": "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git", + "integrity": "sha512-Sp3JL2gSJloqkZ5hINBTcrFomwnCD0mguuRMfJb91SkcZfZuySPEtfi7m2S+96GedA1BI6+gLygDRY217ElTFg==", "from": "shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts", "optional": true }, diff --git a/electron/steam.js b/electron/steam.js index 25da383f..08d0a046 100644 --- a/electron/steam.js +++ b/electron/steam.js @@ -8,9 +8,10 @@ let initialized = false; try { greenworks = require("shapez.io-private-artifacts/steam/greenworks"); - appId = fs.readFileSync(path.join(__dirname, "steam_appid.txt"), "utf8"); + appId = parseInt(fs.readFileSync(path.join(__dirname, "steam_appid.txt"), "utf8")); } catch (err) { // greenworks is not installed + // throw err; } function init (isDev) { @@ -26,7 +27,7 @@ function init (isDev) { } if (!greenworks.init()) { - console.error("Failed to initialize greenworks"); + console.log("Failed to initialize greenworks"); process.exit(1); } @@ -36,7 +37,8 @@ function init (isDev) { function listen () { ipcMain.handle("steam:is-initialized", isInitialized); - if (!greenworks) { + if (!greenworks || !initialized) { + console.log("Ignoring Steam IPC events"); return; } diff --git a/electron/yarn.lock b/electron/yarn.lock index 379b201e..14a30cd8 100644 --- a/electron/yarn.lock +++ b/electron/yarn.lock @@ -499,7 +499,8 @@ "type-fest" "^0.13.1" "shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts": - "resolved" "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#af8d792fe1429af95d990bba4a68362c2aa907c9" + "integrity" "sha512-Sp3JL2gSJloqkZ5hINBTcrFomwnCD0mguuRMfJb91SkcZfZuySPEtfi7m2S+96GedA1BI6+gLygDRY217ElTFg==" + "resolved" "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git" "version" "0.1.0" "sprintf-js@^1.1.2": diff --git a/gulp/css.js b/gulp/css.js index 2b51f153..def48388 100644 --- a/gulp/css.js +++ b/gulp/css.js @@ -21,7 +21,7 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) { const plugins = [postcssAssetsPlugin(cachebust)]; if (prod) { plugins.unshift( - $.postcssUnprefix(), +// $.postcssUnprefix(), $.postcssPresetEnv({ browsers: ["> 0.1%"], }) diff --git a/gulp/standalone.js b/gulp/standalone.js index a4441ed7..a70a5b15 100644 --- a/gulp/standalone.js +++ b/gulp/standalone.js @@ -1,5 +1,6 @@ require("colors"); const packager = require("electron-packager"); +const pj = require("../electron/package.json"); const path = require("path"); const { getVersion } = require("./buildutils"); const fs = require("fs"); @@ -20,9 +21,9 @@ function gulptasksStandalone($, gulp) { gulp.task("standalone.prepare.copyPrefab", () => { // const requiredFiles = $.glob.sync("../electron/"); const requiredFiles = [ - path.join(electronBaseDir, "lib", "**", "*.node"), path.join(electronBaseDir, "node_modules", "**", "*.*"), path.join(electronBaseDir, "node_modules", "**", ".*"), +// path.join(electronBaseDir, "steam_appid.txt"), path.join(electronBaseDir, "favicon*"), // fails on platforms which support symlinks @@ -33,18 +34,13 @@ function gulptasksStandalone($, gulp) { }); gulp.task("standalone.prepare.writePackageJson", cb => { - fs.writeFileSync( - path.join(tempDestBuildDir, "package.json"), - JSON.stringify( - { - devDependencies: { - electron: "9.4.3", - }, - }, - null, - 4 - ) - ); + const packageJsonString = JSON.stringify({ + optionalDependencies: pj.optionalDependencies, + devDependencies: pj.devDependencies + }, null, 4); + + fs.writeFileSync(path.join(tempDestBuildDir, "package.json"), packageJsonString); + cb(); }); @@ -100,6 +96,14 @@ function gulptasksStandalone($, gulp) { */ function packageStandalone(platform, arch, cb, isRelease = true) { const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); + const privateArtifactsPath = "node_modules/shapez.io-private-artifacts"; + + let asar; + if (fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) { + asar = { unpackDir: privateArtifactsPath }; + } else { + asar = true; + } packager({ dir: tempDestBuildDir, @@ -108,7 +112,7 @@ function gulptasksStandalone($, gulp) { buildVersion: "1.0.0", arch, platform, - asar: true, + asar: asar, executableName: "shapezio", icon: path.join(electronBaseDir, "favicon"), name: "shapez.io-standalone", diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js index 63989393..66f56623 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -3,6 +3,7 @@ import { DrawParameters } from "../core/draw_parameters"; import { findNiceIntegerValue } from "../core/utils"; import { Vector } from "../core/vector"; import { Entity } from "./entity"; +import { ACHIEVEMENTS } from "../platform/achievements"; import { GameRoot } from "./root"; export class Blueprint { @@ -162,6 +163,11 @@ export class Blueprint { root.entityMgr.registerEntity(clone); anyPlaced = true; } + + if (anyPlaced) { + root.signals.achievementUnlocked.dispatch(ACHIEVEMENTS.blueprints); + } + return anyPlaced; }); } diff --git a/src/js/game/shape_definition_manager.js b/src/js/game/shape_definition_manager.js index 32f5d532..22438ce3 100644 --- a/src/js/game/shape_definition_manager.js +++ b/src/js/game/shape_definition_manager.js @@ -194,6 +194,9 @@ export class ShapeDefinitionManager extends BasicSerializableObject { if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } + + this.root.signals.achievementUnlocked.dispatch(ACHIEVEMENTS.stacking); + const stacked = lowerDefinition.cloneAndStackWith(upperDefinition); return /** @type {ShapeDefinition} */ (this.operationCache[key] = this.registerOrReturnHandle( stacked diff --git a/src/js/platform/electron/steam_achievements.js b/src/js/platform/electron/steam_achievements.js index f19b6ff9..1137e243 100644 --- a/src/js/platform/electron/steam_achievements.js +++ b/src/js/platform/electron/steam_achievements.js @@ -7,10 +7,11 @@ const logger = createLogger("achievements/steam"); const IDS = { painting: "", - cutting: "", + cutting: "achievement_01", // Test ID rotating: "", stacking: "", - blueprints: "" + blueprints: "", + wires: "", } /** @typedef {object} SteamAchievement