1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2026-03-02 03:39:21 +00:00

add unlock on upgrade mechanic

This commit is contained in:
BuildTools
2020-07-18 00:30:14 -05:00
parent 93ac3f70be
commit 6dd3f2a439
4 changed files with 93 additions and 2 deletions

View File

@@ -51,7 +51,7 @@ export class MetaRotaterBuilding extends MetaBuilding {
getAvailableVariants(root) {
let variants = [defaultBuildingVariant];
if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_rotater_ccw)) {
variants.push(enumRotaterVariants.ccw, enumRotaterVariants.fl);
variants.push(enumRotaterVariants.ccw);
}
if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_rotater_fl)) {
variants.push(enumRotaterVariants.fl);

View File

@@ -7,6 +7,7 @@ import { enumItemProcessorTypes } from "./components/item_processor";
import { GameRoot, enumLayer } from "./root";
import { enumSubShape, ShapeDefinition } from "./shape_definition";
import { enumHubGoalRewards, tutorialGoals } from "./tutorial_goals";
import { HUDUnlockNotification } from "./hud/parts/unlock_notification";
import { UPGRADES, blueprintShape } from "./upgrades";
export class HubGoals extends BasicSerializableObject {
@@ -76,7 +77,7 @@ export class HubGoals extends BasicSerializableObject {
this.level = 1;
/**
* Which story rewards we already gained
* Which story and upgrade rewards we already gained
* @type {Object.<string, number>}
*/
this.gainedRewards = {};

View File

@@ -20,6 +20,7 @@ export class HUDUnlockNotification extends BaseHUDPart {
if (!(G_IS_DEV && globalConfig.debug.disableUnlockDialog)) {
this.root.signals.storyGoalCompleted.add(this.showForLevel, this);
this.root.signals.upgradePurchased.add(this.showForUpgrade, this);
}
this.buttonShowTimeout = null;
@@ -101,6 +102,81 @@ export class HUDUnlockNotification extends BaseHUDPart {
}
}
/**
* @param {string} upgradeId
*/
showForUpgrade(upgradeId) {
this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever);
this.elemTitle.innerText = T.ingame.upgradeCompleteNotification.upgradeTitle;
// If it's not at the max level:
if(this.root.hubGoals.canUnlockUpgrade(upgradeId)){
return;
}
if(!T.upgradeRewards[upgradeId]){
return;
}
var reward;
for(let goalReward in enumHubGoalRewards){
if(T.upgradeRewards[upgradeId][goalReward]){
reward = goalReward;
break;
}
}
if(!reward){
return;
}
//Functional for now -> Needs some rework; Only will register the unlock here if you actually click "upgrade" in the same session
this.root.hubGoals.gainedRewards[reward] = (this.root.hubGoals.gainedRewards[reward] || 0) + 1;
const rewardName = T.upgradeRewards[upgradeId][reward].title;
let html = `
<div class="rewardName">
${T.ingame.upgradeCompleteNotification.unlockText}
</div>
<div class="rewardDesc">
${T.upgradeRewards[upgradeId][reward].desc}
</div>
`;
html += "<div class='images'>";
const gained = enumHubGoalRewardsToContentUnlocked[reward];
if (gained) {
gained.forEach(([metaBuildingClass, variant]) => {
const metaBuilding = gMetaBuildingRegistry.findByClass(metaBuildingClass);
html += `<div class="buildingExplanation" data-icon="building_tutorials/${
metaBuilding.getId() + (variant === defaultBuildingVariant ? "" : "-" + variant)
}.png"></div>`;
});
}
html += "</div>";
this.elemContents.innerHTML = html;
this.visible = true;
this.root.soundProxy.playUi(SOUNDS.levelComplete);
if (this.buttonShowTimeout) {
clearTimeout(this.buttonShowTimeout);
}
this.element.querySelector("button.close").classList.remove("unlocked");
if (this.root.app.settings.getAllSettings().offerHints) {
this.buttonShowTimeout = setTimeout(
() => this.element.querySelector("button.close").classList.add("unlocked"),
G_IS_DEV ? 100 : 5000
);
} else {
this.element.querySelector("button.close").classList.add("unlocked");
}
}
cleanup() {
this.root.app.inputMgr.makeSureDetached(this.inputReciever);
if (this.buttonShowTimeout) {