|
|
|
import { globalConfig } from "../core/config";
|
|
|
|
import { RandomNumberGenerator } from "../core/rng";
|
|
|
|
import { clamp } from "../core/utils";
|
|
|
|
import { BasicSerializableObject, types } from "../savegame/serialization";
|
|
|
|
import { enumColors } from "./colors";
|
|
|
|
import { enumItemProcessorTypes } from "./components/item_processor";
|
|
|
|
import { enumAnalyticsDataSource } from "./production_analytics";
|
|
|
|
import { GameRoot } from "./root";
|
|
|
|
import { enumSubShape, ShapeDefinition } from "./shape_definition";
|
|
|
|
import { enumHubGoalRewards } from "./tutorial_goals";
|
|
|
|
|
Mod Support - 1.5.0 Update (#1361)
* initial modloader draft
* modloader features
* Refactor mods to use signals
* Add support for modifying and registering new transltions
* Minor adjustments
* Support for string building ids for mods
* Initial support for adding new buildings
* Refactor how mods are loaded to resolve circular dependencies and prepare for future mod loading
* Lazy Load mods to make sure all dependencies are loaded
* Expose all exported members automatically to mods
* Fix duplicate exports
* Allow loading mods from standalone
* update changelog
* Fix mods folder incorrect path
* Fix modloading in standalone
* Fix sprites not getting replaced, update demo mod
* Load dev mod via raw loader
* Improve mod developing so mods are directly ready to be deployed, load mods from local file server
* Proper mods ui
* Allow mods to register game systems and draw stuff
* Change mods path
* Fix sprites not loading
* Minor adjustments, closes #1333
* Add support for loading atlases via mods
* Add support for loading mods from external sources in DEV
* Add confirmation when loading mods
* Fix circular dependency
* Minor Keybindings refactor, add support for keybindings to mods, add support for dialogs to mods
* Add some mod signals
* refactor game loading states
* Make shapez exports global
* Start to make mods safer
* Refactor file system electron event handling
* Properly isolate electron renderer process
* Update to latest electron
* Show errors when loading mods
* Update confirm dialgo
* Minor restructure, start to add mod examples
* Allow adding custom themesw
* Add more examples and allow defining custom item processor operations
* Add interface to register new buildings
* Fixed typescript type errors (#1335)
* Refactor building registry, make it easier for mods to add new buildings
* Allow overriding existing methods
* Add more examples and more features
* More mod examples
* Make mod loading simpler
* Add example how to add custom drawings
* Remove unused code
* Minor modloader adjustments
* Support for rotation variants in mods (was broken previously)
* Allow mods to replace builtin sub shapes
* Add helper methods to extend classes
* Fix menu bar on mac os
* Remember window state
* Add support for paste signals
* Add example how to add custom components and systems
* Support for mod settings
* Add example for adding a new item type
* Update class extensions
* Minor adjustments
* Fix typo
* Add notification blocks mod example
* Add small tutorial
* Update readme
* Add better instructions
* Update JSDoc for Replacing Methods (#1336)
* upgraded types for overriding methods
* updated comments
Co-authored-by: Edward Badel <you@example.com>
* Direction lock now indicates when there is a building inbetween
* Fix mod examples
* Fix linter error
* Game state register (#1341)
* Added a gamestate register helper
Added a gamestate register helper
* Update mod_interface.js
* export build options
* Fix runBeforeMethod and runAfterMethod
* Minor game system code cleanup
* Belt path drawing optimization
* Fix belt path optimization
* Belt drawing improvements, again
* Do not render belts in statics disabled view
* Allow external URL to load more than one mod (#1337)
* Allow external URL to load more than one mod
Instead of loading the text returned from the remote server, load a JSON object with a `mods` field, containing strings of all the mods. This lets us work on more than one mod at a time or without separate repos. This will break tooling such as `create-shapezio-mod` though.
* Update modloader.js
* Prettier fixes
* Added link to create-shapezio-mod npm page (#1339)
Added link to create-shapezio-mod npm page: https://www.npmjs.com/package/create-shapezio-mod
* allow command line switch to load more than one mod (#1342)
* Fixed class handle type (#1345)
* Fixed class handle type
* Fixed import game state
* Minor adjustments
* Refactor item acceptor to allow only single direction slots
* Allow specifying minimumGameVersion
* Add sandbox example
* Replaced concatenated strings with template literals (#1347)
* Mod improvements
* Make wired pins component optional on the storage
* Fix mod examples
* Bind `this` for method overriding JSDoc (#1352)
* fix entity debugger reaching HTML elements (#1353)
* Store mods in savegame and show warning when it differs
* Closes #1357
* Fix All Shapez Exports Being Const (#1358)
* Allowed setting of variables inside webpack modules
* remove console log
* Fix stringification of things inside of eval
Co-authored-by: Edward Badel <you@example.com>
* Fix building placer intersection warning
* Add example for storing data in the savegame
* Fix double painter bug (#1349)
* Add example on how to extend builtin buildings
* update readme
* Disable steam achievements when playing with mods
* Update translations
Co-authored-by: Thomas (DJ1TJOO) <44841260+DJ1TJOO@users.noreply.github.com>
Co-authored-by: Bagel03 <70449196+Bagel03@users.noreply.github.com>
Co-authored-by: Edward Badel <you@example.com>
Co-authored-by: Emerald Block <69981203+EmeraldBlock@users.noreply.github.com>
Co-authored-by: saile515 <63782477+saile515@users.noreply.github.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
2 years ago
|
|
|
export const MOD_ITEM_PROCESSOR_SPEEDS = {};
|
|
|
|
|
|
|
|
export class HubGoals extends BasicSerializableObject {
|
|
|
|
static getId() {
|
|
|
|
return "HubGoals";
|
|
|
|
}
|
|
|
|
|
|
|
|
static getSchema() {
|
|
|
|
return {
|
|
|
|
level: types.uint,
|
|
|
|
storedShapes: types.keyValueMap(types.uint),
|
|
|
|
upgradeLevels: types.keyValueMap(types.uint),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param {*} data
|
|
|
|
* @param {GameRoot} root
|
|
|
|
*/
|
|
|
|
deserialize(data, root) {
|
|
|
|
const errorCode = super.deserialize(data);
|
|
|
|
if (errorCode) {
|
|
|
|
return errorCode;
|
|
|
|
}
|
|
|
|
|
|
|
|
const levels = root.gameMode.getLevelDefinitions();
|
|
|
|
|
|
|
|
// If freeplay is not available, clamp the level
|
|
|
|
if (!root.gameMode.getIsFreeplayAvailable()) {
|
|
|
|
this.level = Math.min(this.level, levels.length);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Compute gained rewards
|
|
|
|
for (let i = 0; i < this.level - 1; ++i) {
|
|
|
|
if (i < levels.length) {
|
|
|
|
const reward = levels[i].reward;
|
|
|
|
this.gainedRewards[reward] = (this.gainedRewards[reward] || 0) + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Compute upgrade improvements
|
|
|
|
const upgrades = this.root.gameMode.getUpgrades();
|
|
|
|
for (const upgradeId in upgrades) {
|
|
|
|
const tiers = upgrades[upgradeId];
|
|
|
|
const level = this.upgradeLevels[upgradeId] || 0;
|
|
|
|
let totalImprovement = 1;
|
|
|
|
for (let i = 0; i < level; ++i) {
|
|
|
|
totalImprovement += tiers[i].improvement;
|
|
|
|
}
|
|
|
|
this.upgradeImprovements[upgradeId] = totalImprovement;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Compute current goal
|
|
|
|
this.computeNextGoal();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {GameRoot} root
|
|
|
|
*/
|
|
|
|
constructor(root) {
|
|
|
|
super();
|
|
|
|
|
|
|
|
this.root = root;
|
|
|
|
|
|
|
|
this.level = 1;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Which story rewards we already gained
|
|
|
|
* @type {Object.<string, number>}
|
|
|
|
*/
|
|
|
|
this.gainedRewards = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mapping from shape hash -> amount
|
|
|
|
* @type {Object<string, number>}
|
|
|
|
*/
|
|
|
|
this.storedShapes = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stores the levels for all upgrades
|
|
|
|
* @type {Object<string, number>}
|
|
|
|
*/
|
|
|
|
this.upgradeLevels = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stores the improvements for all upgrades
|
|
|
|
* @type {Object<string, number>}
|
|
|
|
*/
|
|
|
|
this.upgradeImprovements = {};
|
|
|
|
|
|
|
|
// Reset levels first
|
|
|
|
const upgrades = this.root.gameMode.getUpgrades();
|
|
|
|
for (const key in upgrades) {
|
|
|
|
this.upgradeLevels[key] = 0;
|
|
|
|
this.upgradeImprovements[key] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.computeNextGoal();
|
|
|
|
|
|
|
|
// Allow quickly switching goals in dev mode
|
|
|
|
if (G_IS_DEV) {
|
|
|
|
window.addEventListener("keydown", ev => {
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (ev.key === "p") {
|
|
|
|
// root is not guaranteed to exist within ~0.5s after loading in
|
|
|
|
if (this.root && this.root.app && this.root.app.gameAnalytics) {
|
|
|
|
if (!this.isEndOfDemoReached()) {
|
|
|
|
this.onGoalCompleted();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns whether the end of the demo is reached
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
isEndOfDemoReached() {
|
|
|
|
return (
|
|
|
|
!this.root.gameMode.getIsFreeplayAvailable() &&
|
|
|
|
this.level >= this.root.gameMode.getLevelDefinitions().length
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns how much of the current shape is stored
|
|
|
|
* @param {ShapeDefinition} definition
|
|
|
|
* @returns {number}
|
|
|
|
*/
|
|
|
|
getShapesStored(definition) {
|
|
|
|
return this.storedShapes[definition.getHash()] || 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {string} key
|
|
|
|
* @param {number} amount
|
|
|
|
*/
|
|
|
|
takeShapeByKey(key, amount) {
|
|
|
|
assert(this.getShapesStoredByKey(key) >= amount, "Can not afford: " + key + " x " + amount);
|
|
|
|
assert(amount >= 0, "Amount < 0 for " + key);
|
|
|
|
assert(Number.isInteger(amount), "Invalid amount: " + amount);
|
|
|
|
this.storedShapes[key] = (this.storedShapes[key] || 0) - amount;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns how much of the current shape is stored
|
|
|
|
* @param {string} key
|
|
|
|
* @returns {number}
|
|
|
|
*/
|
|
|
|
getShapesStoredByKey(key) {
|
|
|
|
return this.storedShapes[key] || 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns how much of the current goal was already delivered
|
|
|
|
*/
|
|
|
|
getCurrentGoalDelivered() {
|
|
|
|
if (this.currentGoal.throughputOnly) {
|
|
|
|
return (
|
|
|
|
this.root.productionAnalytics.getCurrentShapeRateRaw(
|
|
|
|
enumAnalyticsDataSource.delivered,
|
|
|
|
this.currentGoal.definition
|
|
|
|
) / globalConfig.analyticsSliceDurationSeconds
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return this.getShapesStored(this.currentGoal.definition);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the current level of a given upgrade
|
|
|
|
* @param {string} upgradeId
|
|
|
|
*/
|
|
|
|
getUpgradeLevel(upgradeId) {
|
|
|
|
return this.upgradeLevels[upgradeId] || 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns whether the given reward is already unlocked
|
|
|
|
* @param {enumHubGoalRewards} reward
|
|
|
|
*/
|
|
|
|
isRewardUnlocked(reward) {
|
|
|
|
if (G_IS_DEV && globalConfig.debug.allBuildingsUnlocked) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (
|
|
|
|
reward === enumHubGoalRewards.reward_blueprints &&
|
|
|
|
this.root.app.restrictionMgr.isLimitedVersion()
|
|
|
|
) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (this.root.gameMode.getLevelDefinitions().length < 1) {
|
|
|
|
// no story, so always unlocked
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return !!this.gainedRewards[reward];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handles the given definition, by either accounting it towards the
|
|
|
|
* goal or otherwise granting some points
|
|
|
|
* @param {ShapeDefinition} definition
|
|
|
|
*/
|
|
|
|
handleDefinitionDelivered(definition) {
|
|
|
|
const hash = definition.getHash();
|
|
|
|
this.storedShapes[hash] = (this.storedShapes[hash] || 0) + 1;
|
|
|
|
|
|
|
|
this.root.signals.shapeDelivered.dispatch(definition);
|
|
|
|
|
|
|
|
// Check if we have enough for the next level
|
|
|
|
if (
|
|
|
|
this.getCurrentGoalDelivered() >= this.currentGoal.required ||
|
|
|
|
(G_IS_DEV && globalConfig.debug.rewardsInstant)
|
|
|
|
) {
|
|
|
|
if (!this.isEndOfDemoReached()) {
|
|
|
|
this.onGoalCompleted();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates the next goal
|
|
|
|
*/
|
|
|
|
computeNextGoal() {
|
|
|
|
const storyIndex = this.level - 1;
|
|
|
|
const levels = this.root.gameMode.getLevelDefinitions();
|
|
|
|
if (storyIndex < levels.length) {
|
|
|
|
const { shape, required, reward, throughputOnly } = levels[storyIndex];
|
|
|
|
this.currentGoal = {
|
|
|
|
/** @type {ShapeDefinition} */
|
|
|
|
definition: this.root.shapeDefinitionMgr.getShapeFromShortKey(shape),
|
|
|
|
required,
|
|
|
|
reward,
|
|
|
|
throughputOnly,
|
|
|
|
};
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Floor Required amount to remove confusion
|
|
|
|
const required = Math.min(200, Math.floor(4 + (this.level - 27) * 0.25));
|
|
|
|
this.currentGoal = {
|
|
|
|
definition: this.computeFreeplayShape(this.level),
|
|
|
|
required,
|
|
|
|
reward: enumHubGoalRewards.no_reward_freeplay,
|
|
|
|
throughputOnly: true,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when the level was completed
|
|
|
|
*/
|
|
|
|
onGoalCompleted() {
|
|
|
|
const reward = this.currentGoal.reward;
|
|
|
|
this.gainedRewards[reward] = (this.gainedRewards[reward] || 0) + 1;
|
|
|
|
|
|
|
|
this.root.app.gameAnalytics.handleLevelCompleted(this.level);
|
|
|
|
++this.level;
|
|
|
|
this.computeNextGoal();
|
|
|
|
|
|
|
|
this.root.signals.storyGoalCompleted.dispatch(this.level - 1, reward);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns whether we are playing in free-play
|
|
|
|
*/
|
|
|
|
isFreePlay() {
|
|
|
|
return this.level >= this.root.gameMode.getLevelDefinitions().length;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns whether a given upgrade can be unlocked
|
|
|
|
* @param {string} upgradeId
|
|
|
|
*/
|
|
|
|
canUnlockUpgrade(upgradeId) {
|
|
|
|
return true;
|
|
|
|
const tiers = this.root.gameMode.getUpgrades()[upgradeId];
|
|
|
|
const currentLevel = this.getUpgradeLevel(upgradeId);
|
|
|
|
|
|
|
|
if (currentLevel >= tiers.length) {
|
|
|
|
// Max level
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (G_IS_DEV && globalConfig.debug.upgradesNoCost) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
const tierData = tiers[currentLevel];
|
|
|
|
|
|
|
|
for (let i = 0; i < tierData.required.length; ++i) {
|
|
|
|
const requirement = tierData.required[i];
|
|
|
|
if ((this.storedShapes[requirement.shape] || 0) < requirement.amount) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the number of available upgrades
|
|
|
|
* @returns {number}
|
|
|
|
*/
|
|
|
|
getAvailableUpgradeCount() {
|
|
|
|
let count = 0;
|
|
|
|
for (const upgradeId in this.root.gameMode.getUpgrades()) {
|
|
|
|
if (this.canUnlockUpgrade(upgradeId)) {
|
|
|
|
++count;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Tries to unlock the given upgrade
|
|
|
|
* @param {string} upgradeId
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
tryUnlockUpgrade(upgradeId) {
|
|
|
|
if (!this.canUnlockUpgrade(upgradeId)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
const upgradeTiers = this.root.gameMode.getUpgrades()[upgradeId];
|
|
|
|
const currentLevel = this.getUpgradeLevel(upgradeId);
|
|
|
|
|
|
|
|
const tierData = upgradeTiers[currentLevel];
|
|
|
|
if (!tierData) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (G_IS_DEV && globalConfig.debug.upgradesNoCost) {
|
|
|
|
// Dont take resources
|
|
|
|
} else {
|
|
|
|
for (let i = 0; i < tierData.required.length; ++i) {
|
|
|
|
const requirement = tierData.required[i];
|
|
|
|
|
|
|
|
// Notice: Don't have to check for hash here
|
|
|
|
this.storedShapes[requirement.shape] -= requirement.amount;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.upgradeLevels[upgradeId] = (this.upgradeLevels[upgradeId] || 0) + 1;
|
|
|
|
this.upgradeImprovements[upgradeId] += tierData.improvement;
|
|
|
|
|
|
|
|
this.root.signals.upgradePurchased.dispatch(upgradeId);
|
|
|
|
|
|
|
|
this.root.app.gameAnalytics.handleUpgradeUnlocked(upgradeId, currentLevel);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Picks random colors which are close to each other
|
|
|
|
* @param {RandomNumberGenerator} rng
|
|
|
|
*/
|
|
|
|
generateRandomColorSet(rng, allowUncolored = false) {
|
|
|
|
const colorWheel = [
|
|
|
|
enumColors.red,
|
|
|
|
enumColors.yellow,
|
|
|
|
enumColors.green,
|
|
|
|
enumColors.cyan,
|
|
|
|
enumColors.blue,
|
|
|
|
enumColors.purple,
|
|
|
|
enumColors.red,
|
|
|
|
enumColors.yellow,
|
|
|
|
];
|
|
|
|
|
|
|
|
const universalColors = [enumColors.white];
|
|
|
|
if (allowUncolored) {
|
|
|
|
universalColors.push(enumColors.uncolored);
|
|
|
|
}
|
|
|
|
const index = rng.nextIntRange(0, colorWheel.length - 2);
|
|
|
|
const pickedColors = colorWheel.slice(index, index + 3);
|
|
|
|
pickedColors.push(rng.choice(universalColors));
|
|
|
|
return pickedColors;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a (seeded) random shape
|
|
|
|
* @param {number} level
|
|
|
|
* @returns {ShapeDefinition}
|
|
|
|
*/
|
|
|
|
computeFreeplayShape(level) {
|
|
|
|
const layerCount = clamp(this.level / 25, 2, 4);
|
|
|
|
|
|
|
|
/** @type {Array<import("./shape_definition").ShapeLayer>} */
|
|
|
|
let layers = [];
|
|
|
|
|
|
|
|
const rng = new RandomNumberGenerator(this.root.map.seed + "/" + level);
|
|
|
|
|
|
|
|
const colors = this.generateRandomColorSet(rng, level > 35);
|
|
|
|
|
|
|
|
let pickedSymmetry = null; // pairs of quadrants that must be the same
|
|
|
|
let availableShapes = [enumSubShape.rect, enumSubShape.circle, enumSubShape.star];
|
|
|
|
if (rng.next() < 0.5) {
|
|
|
|
pickedSymmetry = [
|
|
|
|
// radial symmetry
|
|
|
|
[0, 2],
|
|
|
|
[1, 3],
|
|
|
|
];
|
|
|
|
availableShapes.push(enumSubShape.windmill); // windmill looks good only in radial symmetry
|
|
|
|
} else {
|
|
|
|
const symmetries = [
|
|
|
|
[
|
|
|
|
// horizontal axis
|
|
|
|
[0, 3],
|
|
|
|
[1, 2],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
// vertical axis
|
|
|
|
[0, 1],
|
|
|
|
[2, 3],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
// diagonal axis
|
|
|
|
[0, 2],
|
|
|
|
[1],
|
|
|
|
[3],
|
|
|
|
],
|
|
|
|
[
|
|
|
|
// other diagonal axis
|
|
|
|
[1, 3],
|
|
|
|
[0],
|
|
|
|
[2],
|
|
|
|
],
|
|
|
|
];
|
|
|
|
pickedSymmetry = rng.choice(symmetries);
|
|
|
|
}
|
|
|
|
|
|
|
|
const randomColor = () => rng.choice(colors);
|
Mod Support - 1.5.0 Update (#1361)
* initial modloader draft
* modloader features
* Refactor mods to use signals
* Add support for modifying and registering new transltions
* Minor adjustments
* Support for string building ids for mods
* Initial support for adding new buildings
* Refactor how mods are loaded to resolve circular dependencies and prepare for future mod loading
* Lazy Load mods to make sure all dependencies are loaded
* Expose all exported members automatically to mods
* Fix duplicate exports
* Allow loading mods from standalone
* update changelog
* Fix mods folder incorrect path
* Fix modloading in standalone
* Fix sprites not getting replaced, update demo mod
* Load dev mod via raw loader
* Improve mod developing so mods are directly ready to be deployed, load mods from local file server
* Proper mods ui
* Allow mods to register game systems and draw stuff
* Change mods path
* Fix sprites not loading
* Minor adjustments, closes #1333
* Add support for loading atlases via mods
* Add support for loading mods from external sources in DEV
* Add confirmation when loading mods
* Fix circular dependency
* Minor Keybindings refactor, add support for keybindings to mods, add support for dialogs to mods
* Add some mod signals
* refactor game loading states
* Make shapez exports global
* Start to make mods safer
* Refactor file system electron event handling
* Properly isolate electron renderer process
* Update to latest electron
* Show errors when loading mods
* Update confirm dialgo
* Minor restructure, start to add mod examples
* Allow adding custom themesw
* Add more examples and allow defining custom item processor operations
* Add interface to register new buildings
* Fixed typescript type errors (#1335)
* Refactor building registry, make it easier for mods to add new buildings
* Allow overriding existing methods
* Add more examples and more features
* More mod examples
* Make mod loading simpler
* Add example how to add custom drawings
* Remove unused code
* Minor modloader adjustments
* Support for rotation variants in mods (was broken previously)
* Allow mods to replace builtin sub shapes
* Add helper methods to extend classes
* Fix menu bar on mac os
* Remember window state
* Add support for paste signals
* Add example how to add custom components and systems
* Support for mod settings
* Add example for adding a new item type
* Update class extensions
* Minor adjustments
* Fix typo
* Add notification blocks mod example
* Add small tutorial
* Update readme
* Add better instructions
* Update JSDoc for Replacing Methods (#1336)
* upgraded types for overriding methods
* updated comments
Co-authored-by: Edward Badel <you@example.com>
* Direction lock now indicates when there is a building inbetween
* Fix mod examples
* Fix linter error
* Game state register (#1341)
* Added a gamestate register helper
Added a gamestate register helper
* Update mod_interface.js
* export build options
* Fix runBeforeMethod and runAfterMethod
* Minor game system code cleanup
* Belt path drawing optimization
* Fix belt path optimization
* Belt drawing improvements, again
* Do not render belts in statics disabled view
* Allow external URL to load more than one mod (#1337)
* Allow external URL to load more than one mod
Instead of loading the text returned from the remote server, load a JSON object with a `mods` field, containing strings of all the mods. This lets us work on more than one mod at a time or without separate repos. This will break tooling such as `create-shapezio-mod` though.
* Update modloader.js
* Prettier fixes
* Added link to create-shapezio-mod npm page (#1339)
Added link to create-shapezio-mod npm page: https://www.npmjs.com/package/create-shapezio-mod
* allow command line switch to load more than one mod (#1342)
* Fixed class handle type (#1345)
* Fixed class handle type
* Fixed import game state
* Minor adjustments
* Refactor item acceptor to allow only single direction slots
* Allow specifying minimumGameVersion
* Add sandbox example
* Replaced concatenated strings with template literals (#1347)
* Mod improvements
* Make wired pins component optional on the storage
* Fix mod examples
* Bind `this` for method overriding JSDoc (#1352)
* fix entity debugger reaching HTML elements (#1353)
* Store mods in savegame and show warning when it differs
* Closes #1357
* Fix All Shapez Exports Being Const (#1358)
* Allowed setting of variables inside webpack modules
* remove console log
* Fix stringification of things inside of eval
Co-authored-by: Edward Badel <you@example.com>
* Fix building placer intersection warning
* Add example for storing data in the savegame
* Fix double painter bug (#1349)
* Add example on how to extend builtin buildings
* update readme
* Disable steam achievements when playing with mods
* Update translations
Co-authored-by: Thomas (DJ1TJOO) <44841260+DJ1TJOO@users.noreply.github.com>
Co-authored-by: Bagel03 <70449196+Bagel03@users.noreply.github.com>
Co-authored-by: Edward Badel <you@example.com>
Co-authored-by: Emerald Block <69981203+EmeraldBlock@users.noreply.github.com>
Co-authored-by: saile515 <63782477+saile515@users.noreply.github.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
2 years ago
|
|
|
const randomShape = () => rng.choice(availableShapes);
|
|
|
|
|
|
|
|
let anyIsMissingTwo = false;
|
|
|
|
|
|
|
|
for (let i = 0; i < layerCount; ++i) {
|
|
|
|
/** @type {import("./shape_definition").ShapeLayer} */
|
|
|
|
const layer = [null, null, null, null];
|
|
|
|
|
|
|
|
for (let j = 0; j < pickedSymmetry.length; ++j) {
|
|
|
|
const group = pickedSymmetry[j];
|
|
|
|
const shape = randomShape();
|
|
|
|
const color = randomColor();
|
|
|
|
for (let k = 0; k < group.length; ++k) {
|
|
|
|
const quad = group[k];
|
|
|
|
layer[quad] = {
|
|
|
|
subShape: shape,
|
|
|
|
color,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Sometimes they actually are missing *two* ones!
|
|
|
|
// Make sure at max only one layer is missing it though, otherwise we could
|
|
|
|
// create an uncreateable shape
|
|
|
|
if (level > 75 && rng.next() > 0.95 && !anyIsMissingTwo) {
|
|
|
|
layer[rng.nextIntRange(0, 4)] = null;
|
|
|
|
anyIsMissingTwo = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
layers.push(layer);
|
|
|
|
}
|
|
|
|
|
|
|
|
const definition = new ShapeDefinition({ layers });
|
|
|
|
return this.root.shapeDefinitionMgr.registerOrReturnHandle(definition);
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////// HELPERS
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Belt speed
|
|
|
|
* @returns {number} items / sec
|
|
|
|
*/
|
|
|
|
getBeltBaseSpeed() {
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (this.root.gameMode.throughputDoesNotMatter()) {
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed;
|
|
|
|
}
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Underground belt speed
|
|
|
|
* @returns {number} items / sec
|
|
|
|
*/
|
|
|
|
getUndergroundBeltBaseSpeed() {
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (this.root.gameMode.throughputDoesNotMatter()) {
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed;
|
|
|
|
}
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Miner speed
|
|
|
|
* @returns {number} items / sec
|
|
|
|
*/
|
|
|
|
getMinerBaseSpeed() {
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (this.root.gameMode.throughputDoesNotMatter()) {
|
|
|
|
return globalConfig.minerSpeedItemsPerSecond * globalConfig.puzzleModeSpeed;
|
|
|
|
}
|
|
|
|
return globalConfig.minerSpeedItemsPerSecond * this.upgradeImprovements.miner;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Processor speed
|
|
|
|
* @param {enumItemProcessorTypes} processorType
|
|
|
|
* @returns {number} items / sec
|
|
|
|
*/
|
|
|
|
getProcessorBaseSpeed(processorType) {
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
if (this.root.gameMode.throughputDoesNotMatter()) {
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * globalConfig.puzzleModeSpeed * 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (processorType) {
|
|
|
|
case enumItemProcessorTypes.trash:
|
|
|
|
case enumItemProcessorTypes.hub:
|
Puzzle DLC (#1172)
* Puzzle mode (#1135)
* Add mode button to main menu
* [WIP] Add mode menu. Add factory-based gameMode creation
* Add savefile migration, serialize, deserialize
* Add hidden HUD elements, zone, and zoom, boundary constraints
* Clean up lint issues
* Add building, HUD exclusion, building exclusion, and refactor
- [WIP] Add ConstantProducer building that combines ConstantSignal
and ItemProducer functionality. Currently using temp assets.
- Add pre-placement check to the zone
- Use Rectangles for zone and boundary
- Simplify zone drawing
- Account for exclusion in savegame data
- [WIP] Add puzzle play and edit buttons in puzzle mode menu
* [WIP] Add building, component, and systems for producing and
accepting user-specified items and checking goal criteria
* Add ingame puzzle mode UI elements
- Add minimal menus in puzzle mode for back, next navigation
- Add lower menu for changing zone dimenensions
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
* Performance optimizations (#1154)
* 1.3.1 preparations
* Minor fixes, update translations
* Fix achievements not working
* Lots of belt optimizations, ~15% performance boost
* Puzzle mode, part 1
* Puzzle mode, part 2
* Fix missing import
* Puzzle mode, part 3
* Fix typo
* Puzzle mode, part 4
* Puzzle Mode fixes: Correct zone restrictions and more (#1155)
* Hide Puzzle Editor Controls in regular game mode, fix typo
* Disallow shrinking zone if there are buildings
* Fix multi-tile buildings for shrinking
* Puzzle mode, Refactor hud
* Puzzle mode
* Fixed typo in latest puzzle commit (#1156)
* Allow completing puzzles
* Puzzle mode, almost done
* Bump version to 1.4.0
* Fixes
* [puzzle] Prevent pipette cheats (miners, emitters) (#1158)
* Puzzle mode, almost done
* Allow clearing belts with 'B'
* Multiple users for the puzzle dlc
* Bump api key
* Minor adjustments
* Update
* Minor fixes
* Fix throughput
* Fix belts
* Minor puzzle adjustments
* New difficulty
* Minor puzzle improvements
* Fix belt path
* Update translations
* Added a button to return to the menu after a puzzle is completed (#1170)
* added another button to return to the menu
* improved menu return
* fixed continue button to not go back to menu
* [Puzzle] Added ability to lock buildings in the puzzle editor! (#1164)
* initial test
* tried to get it to work
* added icon
* added test exclusion
* reverted css
* completed flow for building locking
* added lock option
* finalized look and changed locked building to same sprite
* removed unused art
* added clearing every goal acceptor on lock to prevent creating impossible puzzles
* heavily improved validation and prevented autocompletion
* validation only checks every 100 ticks to improve performance
* validation only checks every 100 ticks to improve performance
* removed clearing goal acceptors as it isn't needed because of validation
* Add soundtrack, puzzle dlc fixes
Co-authored-by: Greg Considine <gconsidine@users.noreply.github.com>
Co-authored-by: dengr1065 <dengr1065@gmail.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
3 years ago
|
|
|
case enumItemProcessorTypes.goal:
|
|
|
|
return 1e30;
|
|
|
|
case enumItemProcessorTypes.balancer:
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt * 2;
|
|
|
|
case enumItemProcessorTypes.reader:
|
|
|
|
return globalConfig.beltSpeedItemsPerSecond * this.upgradeImprovements.belt;
|
|
|
|
|
|
|
|
case enumItemProcessorTypes.mixer:
|
|
|
|
case enumItemProcessorTypes.painter:
|
|
|
|
case enumItemProcessorTypes.painterDouble:
|
|
|
|
case enumItemProcessorTypes.painterQuad: {
|
|
|
|
assert(
|
|
|
|
globalConfig.buildingSpeeds[processorType],
|
|
|
|
"Processor type has no speed set in globalConfig.buildingSpeeds: " + processorType
|
|
|
|
);
|
|
|
|
return (
|
|
|
|
globalConfig.beltSpeedItemsPerSecond *
|
|
|
|
this.upgradeImprovements.painting *
|
|
|
|
globalConfig.buildingSpeeds[processorType]
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
case enumItemProcessorTypes.cutter:
|
|
|
|
case enumItemProcessorTypes.cutterQuad:
|
|
|
|
case enumItemProcessorTypes.rotater:
|
|
|
|
case enumItemProcessorTypes.rotaterCCW:
|
|
|
|
case enumItemProcessorTypes.rotater180:
|
|
|
|
case enumItemProcessorTypes.stacker: {
|
|
|
|
assert(
|
|
|
|
globalConfig.buildingSpeeds[processorType],
|
|
|
|
"Processor type has no speed set in globalConfig.buildingSpeeds: " + processorType
|
|
|
|
);
|
|
|
|
return (
|
|
|
|
globalConfig.beltSpeedItemsPerSecond *
|
|
|
|
this.upgradeImprovements.processors *
|
|
|
|
globalConfig.buildingSpeeds[processorType]
|
|
|
|
);
|
|
|
|
}
|
|
|
|
default:
|
Mod Support - 1.5.0 Update (#1361)
* initial modloader draft
* modloader features
* Refactor mods to use signals
* Add support for modifying and registering new transltions
* Minor adjustments
* Support for string building ids for mods
* Initial support for adding new buildings
* Refactor how mods are loaded to resolve circular dependencies and prepare for future mod loading
* Lazy Load mods to make sure all dependencies are loaded
* Expose all exported members automatically to mods
* Fix duplicate exports
* Allow loading mods from standalone
* update changelog
* Fix mods folder incorrect path
* Fix modloading in standalone
* Fix sprites not getting replaced, update demo mod
* Load dev mod via raw loader
* Improve mod developing so mods are directly ready to be deployed, load mods from local file server
* Proper mods ui
* Allow mods to register game systems and draw stuff
* Change mods path
* Fix sprites not loading
* Minor adjustments, closes #1333
* Add support for loading atlases via mods
* Add support for loading mods from external sources in DEV
* Add confirmation when loading mods
* Fix circular dependency
* Minor Keybindings refactor, add support for keybindings to mods, add support for dialogs to mods
* Add some mod signals
* refactor game loading states
* Make shapez exports global
* Start to make mods safer
* Refactor file system electron event handling
* Properly isolate electron renderer process
* Update to latest electron
* Show errors when loading mods
* Update confirm dialgo
* Minor restructure, start to add mod examples
* Allow adding custom themesw
* Add more examples and allow defining custom item processor operations
* Add interface to register new buildings
* Fixed typescript type errors (#1335)
* Refactor building registry, make it easier for mods to add new buildings
* Allow overriding existing methods
* Add more examples and more features
* More mod examples
* Make mod loading simpler
* Add example how to add custom drawings
* Remove unused code
* Minor modloader adjustments
* Support for rotation variants in mods (was broken previously)
* Allow mods to replace builtin sub shapes
* Add helper methods to extend classes
* Fix menu bar on mac os
* Remember window state
* Add support for paste signals
* Add example how to add custom components and systems
* Support for mod settings
* Add example for adding a new item type
* Update class extensions
* Minor adjustments
* Fix typo
* Add notification blocks mod example
* Add small tutorial
* Update readme
* Add better instructions
* Update JSDoc for Replacing Methods (#1336)
* upgraded types for overriding methods
* updated comments
Co-authored-by: Edward Badel <you@example.com>
* Direction lock now indicates when there is a building inbetween
* Fix mod examples
* Fix linter error
* Game state register (#1341)
* Added a gamestate register helper
Added a gamestate register helper
* Update mod_interface.js
* export build options
* Fix runBeforeMethod and runAfterMethod
* Minor game system code cleanup
* Belt path drawing optimization
* Fix belt path optimization
* Belt drawing improvements, again
* Do not render belts in statics disabled view
* Allow external URL to load more than one mod (#1337)
* Allow external URL to load more than one mod
Instead of loading the text returned from the remote server, load a JSON object with a `mods` field, containing strings of all the mods. This lets us work on more than one mod at a time or without separate repos. This will break tooling such as `create-shapezio-mod` though.
* Update modloader.js
* Prettier fixes
* Added link to create-shapezio-mod npm page (#1339)
Added link to create-shapezio-mod npm page: https://www.npmjs.com/package/create-shapezio-mod
* allow command line switch to load more than one mod (#1342)
* Fixed class handle type (#1345)
* Fixed class handle type
* Fixed import game state
* Minor adjustments
* Refactor item acceptor to allow only single direction slots
* Allow specifying minimumGameVersion
* Add sandbox example
* Replaced concatenated strings with template literals (#1347)
* Mod improvements
* Make wired pins component optional on the storage
* Fix mod examples
* Bind `this` for method overriding JSDoc (#1352)
* fix entity debugger reaching HTML elements (#1353)
* Store mods in savegame and show warning when it differs
* Closes #1357
* Fix All Shapez Exports Being Const (#1358)
* Allowed setting of variables inside webpack modules
* remove console log
* Fix stringification of things inside of eval
Co-authored-by: Edward Badel <you@example.com>
* Fix building placer intersection warning
* Add example for storing data in the savegame
* Fix double painter bug (#1349)
* Add example on how to extend builtin buildings
* update readme
* Disable steam achievements when playing with mods
* Update translations
Co-authored-by: Thomas (DJ1TJOO) <44841260+DJ1TJOO@users.noreply.github.com>
Co-authored-by: Bagel03 <70449196+Bagel03@users.noreply.github.com>
Co-authored-by: Edward Badel <you@example.com>
Co-authored-by: Emerald Block <69981203+EmeraldBlock@users.noreply.github.com>
Co-authored-by: saile515 <63782477+saile515@users.noreply.github.com>
Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
2 years ago
|
|
|
if (MOD_ITEM_PROCESSOR_SPEEDS[processorType]) {
|
|
|
|
return MOD_ITEM_PROCESSOR_SPEEDS[processorType](this.root);
|
|
|
|
}
|
|
|
|
assertAlways(false, "invalid processor type: " + processorType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1 / globalConfig.beltSpeedItemsPerSecond;
|
|
|
|
}
|
|
|
|
}
|