mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
180 lines
5.1 KiB
JavaScript
180 lines
5.1 KiB
JavaScript
/* typehints:start */
|
|
import { Application } from "../application";
|
|
/* typehints:end */
|
|
|
|
export const IS_DEBUG =
|
|
G_IS_DEV &&
|
|
typeof window !== "undefined" &&
|
|
window.location.port === "3005" &&
|
|
(window.location.host.indexOf("localhost:") >= 0 || window.location.host.indexOf("192.168.0.") >= 0) &&
|
|
window.location.search.indexOf("nodebug") < 0;
|
|
|
|
export const SUPPORT_TOUCH = false;
|
|
|
|
const smoothCanvas = true;
|
|
|
|
export const THIRDPARTY_URLS = {
|
|
discord: "https://discord.gg/HN7EVzV",
|
|
github: "https://github.com/tobspr-games/shapez.io",
|
|
reddit: "https://www.reddit.com/r/shapezio",
|
|
shapeViewer: "https://viewer.shapez.io",
|
|
|
|
twitter: "https://twitter.com/tobspr",
|
|
patreon: "https://www.patreon.com/tobsprgames",
|
|
privacyPolicy: "https://tobspr.io/privacy.html",
|
|
|
|
standaloneCampaignLink: "https://get.shapez.io/bundle/$campaign",
|
|
puzzleDlcStorePage: "https://get.shapez.io/mm_puzzle_dlc?target=dlc",
|
|
|
|
levelTutorialVideos: {
|
|
21: "https://www.youtube.com/watch?v=0nUfRLMCcgo&",
|
|
25: "https://www.youtube.com/watch?v=7OCV1g40Iew&",
|
|
26: "https://www.youtube.com/watch?v=gfm6dS1dCoY",
|
|
},
|
|
|
|
modBrowser: "https://shapez.mod.io/",
|
|
};
|
|
|
|
/**
|
|
* @param {Application} app
|
|
* @param {string} campaign
|
|
*/
|
|
export function openStandaloneLink(app, campaign) {
|
|
const discount = globalConfig.currentDiscount > 0 ? "_discount" + globalConfig.currentDiscount : "";
|
|
const steamSuffix = G_IS_STEAM_DEMO ? "_steamdemo" : "";
|
|
const event = campaign + discount + steamSuffix;
|
|
app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneCampaignLink.replace("$campaign", event));
|
|
app.gameAnalytics.noteMinor("g.stdlink." + event);
|
|
}
|
|
|
|
export const globalConfig = {
|
|
// Size of a single tile in Pixels.
|
|
// NOTICE: Update webpack.production.config too!
|
|
tileSize: 32,
|
|
halfTileSize: 16,
|
|
|
|
// Which dpi the assets have
|
|
assetsDpi: 192 / 32,
|
|
assetsSharpness: 1.5,
|
|
shapesSharpness: 1.3,
|
|
|
|
// Achievements
|
|
achievementSliceDuration: 10, // Seconds
|
|
|
|
// Production analytics
|
|
statisticsGraphDpi: 2.5,
|
|
statisticsGraphSlices: 100,
|
|
analyticsSliceDurationSeconds: G_IS_DEV ? 1 : 10,
|
|
|
|
minimumTickRate: 25,
|
|
maximumTickRate: 500,
|
|
|
|
// Map
|
|
mapChunkSize: 16,
|
|
chunkAggregateSize: 4,
|
|
mapChunkOverviewMinZoom: 0.9,
|
|
mapChunkWorldSize: null, // COMPUTED
|
|
|
|
maxBeltShapeBundleSize: 20,
|
|
|
|
// Belt speeds
|
|
// NOTICE: Update webpack.production.config too!
|
|
beltSpeedItemsPerSecond: 2,
|
|
minerSpeedItemsPerSecond: 0, // COMPUTED
|
|
|
|
defaultItemDiameter: 20,
|
|
|
|
itemSpacingOnBelts: 0.63,
|
|
|
|
wiresSpeedItemsPerSecond: 6,
|
|
|
|
undergroundBeltMaxTilesByTier: [5, 9],
|
|
|
|
readerAnalyzeIntervalSeconds: 10,
|
|
|
|
goalAcceptorItemsRequired: 12,
|
|
goalAcceptorsPerProducer: 5,
|
|
puzzleModeSpeed: 3,
|
|
puzzleMinBoundsSize: 2,
|
|
puzzleMaxBoundsSize: 20,
|
|
puzzleValidationDurationSeconds: 30,
|
|
|
|
buildingSpeeds: {
|
|
cutter: 1 / 4,
|
|
cutterQuad: 1 / 4,
|
|
rotater: 1 / 1,
|
|
rotaterCCW: 1 / 1,
|
|
rotater180: 1 / 1,
|
|
painter: 1 / 6,
|
|
painterDouble: 1 / 8,
|
|
painterQuad: 1 / 2,
|
|
mixer: 1 / 5,
|
|
stacker: 1 / 8,
|
|
},
|
|
|
|
// Zooming
|
|
initialZoom: 1.9,
|
|
minZoomLevel: 0.1,
|
|
maxZoomLevel: 3,
|
|
|
|
// Global game speed
|
|
gameSpeed: 1,
|
|
|
|
warmupTimeSecondsFast: 0.25,
|
|
warmupTimeSecondsRegular: 0.25,
|
|
|
|
smoothing: {
|
|
smoothMainCanvas: smoothCanvas && true,
|
|
quality: "low", // Low is CRUCIAL for mobile performance!
|
|
},
|
|
|
|
rendering: {},
|
|
debug: require("./config.local").default,
|
|
|
|
currentDiscount: 0,
|
|
|
|
// Secret vars
|
|
info: {
|
|
// Binary file salt
|
|
file: "Ec'])@^+*9zMevK3uMV4432x9%iK'=",
|
|
|
|
// Savegame salt
|
|
sgSalt: "}95Q3%8/.837Lqym_BJx%q7)pAHJbF",
|
|
|
|
// Analytics key
|
|
analyticsApiKey: "baf6a50f0cc7dfdec5a0e21c88a1c69a4b34bc4a",
|
|
},
|
|
};
|
|
|
|
export const IS_MOBILE = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
|
|
|
// Automatic calculations
|
|
globalConfig.minerSpeedItemsPerSecond = globalConfig.beltSpeedItemsPerSecond / 5;
|
|
|
|
globalConfig.mapChunkWorldSize = globalConfig.mapChunkSize * globalConfig.tileSize;
|
|
|
|
// Dynamic calculations
|
|
if (globalConfig.debug.disableMapOverview) {
|
|
globalConfig.mapChunkOverviewMinZoom = 0;
|
|
}
|
|
|
|
// Stuff for making the trailer
|
|
if (G_IS_DEV && globalConfig.debug.renderForTrailer) {
|
|
globalConfig.debug.framePausesBetweenTicks = 32;
|
|
// globalConfig.mapChunkOverviewMinZoom = 0.0;
|
|
// globalConfig.debug.instantBelts = true;
|
|
// globalConfig.debug.instantProcessors = true;
|
|
// globalConfig.debug.instantMiners = true;
|
|
globalConfig.debug.disableSavegameWrite = true;
|
|
// globalConfig.beltSpeedItemsPerSecond *= 2;
|
|
}
|
|
|
|
if (globalConfig.debug.fastGameEnter) {
|
|
globalConfig.debug.noArtificialDelays = true;
|
|
}
|
|
|
|
if (G_IS_DEV && globalConfig.debug.noArtificialDelays) {
|
|
globalConfig.warmupTimeSecondsFast = 0;
|
|
globalConfig.warmupTimeSecondsRegular = 0;
|
|
}
|