Skip to content

Commit

Permalink
clean up code for easier profiling
Browse files Browse the repository at this point in the history
  • Loading branch information
nroutasuo committed Aug 15, 2017
1 parent ea542e0 commit 010e039
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 97 deletions.
13 changes: 10 additions & 3 deletions src/game/UIFunctions.js
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ function (Ash, GlobalSignals, GameConstants, UIConstants, ItemConstants, PlayerA
},

slideToggleIf: function(element, replacement, show, durationIn, durationOut) {
var visible = this.isElementVisible(element);
var visible = this.isElementToggled(element);
var toggling = ($(element).attr("data-toggling") == "true");
var sys = this;

Expand Down Expand Up @@ -586,7 +586,7 @@ function (Ash, GlobalSignals, GameConstants, UIConstants, ItemConstants, PlayerA
show = false;
if (show === null)
show = false;
if (this.isElementVisible(element) === show)
if (this.isElementToggled(element) === show)
return;
if (GameConstants.isDebugOutputEnabled)
console.log("toggle " + element + ": " + show);
Expand All @@ -595,7 +595,7 @@ function (Ash, GlobalSignals, GameConstants, UIConstants, ItemConstants, PlayerA
GlobalSignals.elementToggled.dispatch(element, true);
},

isElementVisible: function (element) {
isElementToggled: function (element) {
var visible = true;
var visibletag = ($(element).attr("data-visible"));
if (typeof visibletag !== typeof undefined) {
Expand All @@ -606,6 +606,13 @@ function (Ash, GlobalSignals, GameConstants, UIConstants, ItemConstants, PlayerA
return visible;
},

isElementVisible: function (element) {
var toggled = this.isElementToggled(element);
if (toggled === false)
return false;
return ($(element).is(":visible"));
},

stopButtonCooldown: function (button) {
$(button).children(".cooldown-action").stop(true, true);
$(button).attr("data-hasCooldown", "false");
Expand Down
196 changes: 104 additions & 92 deletions src/game/systems/ui/UIOutElementsSystem.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,23 +118,12 @@ define([

updateButtons: function () {
var sys = this;
var playerActionsHelper = this.playerActions.playerActionsHelper;

var uiFunctions = this.uiFunctions;
var fightHelper = this.fightHelper;
var buttonHelper = this.buttonHelper;

var playerVision = this.playerStatsNodes.head.vision.value;
var playerHealth = this.playerStatsNodes.head.stamina.health;
var isAutoPlaying = this.autoPlayNodes.head;

var showStorage = this.resourcesHelper.getCurrentStorageCap();

$.each($("button.action"), function () {
var isVisible = ($(this).is(":visible"));

$(this).siblings(".cooldown-reqs").css("display", isVisible ? "block" : "none");
$(this).parent(".container-btn-action").css("display", $(this).css("display"));

var isVisible = uiFunctions.isElementVisible(this);
sys.updateButtonContainer($(this), isVisible);
if (!isVisible)
return;

Expand All @@ -143,93 +132,116 @@ define([
if (!action)
return;

// Update disabled status
var disabledBase = sys.isButtonDisabled($(this));
var disabledVision = sys.isButtonDisabledVision($(this));
var disabledBasic = !disabledVision && disabledBase;
var disabledResources = !disabledVision && !disabledBasic && sys.isButtonDisabledResources($(this));
var disabledCooldown = !disabledVision && !disabledBasic && !disabledResources && sys.hasButtonCooldown($(this));
var disabledDuration = !disabledVision && !disabledBasic && !disabledResources && !disabledCooldown && sys.hasButtonDuration($(this));
var isDisabled = disabledBasic || disabledVision || disabledResources || disabledCooldown || disabledDuration;
$(this).toggleClass("btn-disabled", isDisabled);
$(this).toggleClass("btn-disabled-basic", disabledBasic);
$(this).toggleClass("btn-disabled-vision", disabledVision);
$(this).parent(".container-btn-action").toggleClass("btn-disabled-vision", disabledVision);
$(this).toggleClass("btn-disabled-resources", disabledResources);
$(this).toggleClass("btn-disabled-cooldown", disabledCooldown || disabledDuration);
$(this).attr("disabled", isDisabled || isAutoPlaying);

// Update button callouts and cooldowns
var baseActionId = playerActionsHelper.getBaseActionID(action);
var ordinal = playerActionsHelper.getOrdinal(action);
var costFactor = playerActionsHelper.getCostFactor(action);
var costs = playerActionsHelper.getCosts(action, ordinal, costFactor);
var hasEnemies = fightHelper.hasEnemiesCurrentLocation(action);
var injuryRisk = PlayerActionConstants.getInjuryProbability(action, playerVision);
var inventoryRisk = PlayerActionConstants.getLoseInventoryProbability(action, playerVision);
var fightRisk = hasEnemies ? PlayerActionConstants.getRandomEncounterProbability(baseActionId, playerVision) : 0;
var description = playerActionsHelper.getDescription(action);
var hasCostBlockers = false;
var isHardDisabled = disabledBase || disabledVision;

// Update callout content
var content = description;
var bottleNeckCostFraction = 1;
var sectorEntity = buttonHelper.getButtonSectorEntity((this));
var disabledReason = playerActionsHelper.checkRequirements(action, false, sectorEntity).reason;
var isDisabledOnlyForCooldown = (!(disabledReason) && sys.hasButtonCooldown($(this)));
if (!isHardDisabled || isDisabledOnlyForCooldown) {
var hasCosts = action && costs && Object.keys(costs).length > 0;
if (hasCosts) {
if (content.length > 0) content += "<hr/>";
for (var key in costs) {
var itemName = key.replace("item_", "");
var item = ItemConstants.getItemByID(itemName);
var name = (uiFunctions.names.resources[key] ? uiFunctions.names.resources[key] : item !== null ? item.name : key).toLowerCase();
var value = costs[key];
var classes = "action-cost";
var costFraction = playerActionsHelper.checkCost(action, key);
if (costFraction < 1) classes += " action-cost-blocker";
if (isResource(key.split("_")[1]) && value > showStorage || key == "stamina" && value > playerHealth * PlayerStatConstants.HEALTH_TO_STAMINA_FACTOR) {
classes += " action-cost-blocker-storage";
hasCostBlockers = true;
}
else if (costFraction < bottleNeckCostFraction) bottleNeckCostFraction = costFraction;
var isHardDisabled = sys.updateButtonDisabledState(this, action);
sys.updateButtonCallout(this, action, isHardDisabled);
});
},

updateButtonContainer: function (button, isVisible) {
try {
$(button).siblings(".cooldown-reqs").css("display", isVisible ? "block" : "none");
$(button).parent(".container-btn-action").css("display", $(this).css("display"));
} catch (ex) {
}
},

updateButtonDisabledState: function (button, action) {
var isAutoPlaying = this.autoPlayNodes.head;
var disabledBase = this.isButtonDisabled($(button));
var disabledVision = this.isButtonDisabledVision($(button));
var disabledBasic = !disabledVision && disabledBase;
var disabledResources = !disabledVision && !disabledBasic && this.isButtonDisabledResources($(button));
var disabledCooldown = !disabledVision && !disabledBasic && !disabledResources && this.hasButtonCooldown($(button));
var disabledDuration = !disabledVision && !disabledBasic && !disabledResources && !disabledCooldown && this.hasButtonDuration($(button));
var isDisabled = disabledBasic || disabledVision || disabledResources || disabledCooldown || disabledDuration;
$(button).toggleClass("btn-disabled", isDisabled);
$(button).toggleClass("btn-disabled-basic", disabledBasic);
$(button).toggleClass("btn-disabled-vision", disabledVision);
$(button).parent(".container-btn-action").toggleClass("btn-disabled-vision", disabledVision);
$(button).toggleClass("btn-disabled-resources", disabledResources);
$(button).toggleClass("btn-disabled-cooldown", disabledCooldown || disabledDuration);
$(button).attr("disabled", isDisabled || isAutoPlaying);
return disabledBase || disabledVision;
},

updateButtonCallout: function (button, action, isHardDisabled) {
var playerActionsHelper = this.playerActions.playerActionsHelper;
var fightHelper = this.fightHelper;
var buttonHelper = this.buttonHelper;

var playerVision = this.playerStatsNodes.head.vision.value;
var playerHealth = this.playerStatsNodes.head.stamina.health;
var showStorage = this.resourcesHelper.getCurrentStorageCap();

var baseActionId = playerActionsHelper.getBaseActionID(action);
var ordinal = playerActionsHelper.getOrdinal(action);
var costFactor = playerActionsHelper.getCostFactor(action);
var costs = playerActionsHelper.getCosts(action, ordinal, costFactor);
var hasEnemies = fightHelper.hasEnemiesCurrentLocation(action);
var injuryRisk = PlayerActionConstants.getInjuryProbability(action, playerVision);
var inventoryRisk = PlayerActionConstants.getLoseInventoryProbability(action, playerVision);
var fightRisk = hasEnemies ? PlayerActionConstants.getRandomEncounterProbability(baseActionId, playerVision) : 0;
var description = playerActionsHelper.getDescription(action);
var hasCostBlockers = false;

if (value > 0) content += "<span class='" + classes + "'>" + name + ": " + value + "</span><br/>";
// Update callout content
var content = description;
var bottleNeckCostFraction = 1;
var sectorEntity = buttonHelper.getButtonSectorEntity((button));
var disabledReason = playerActionsHelper.checkRequirements(action, false, sectorEntity).reason;
var isDisabledOnlyForCooldown = (!(disabledReason) && this.hasButtonCooldown($(button)));
if (!isHardDisabled || isDisabledOnlyForCooldown) {
var hasCosts = action && costs && Object.keys(costs).length > 0;
if (hasCosts) {
if (content.length > 0) content += "<hr/>";
for (var key in costs) {
var itemName = key.replace("item_", "");
var item = ItemConstants.getItemByID(itemName);
var name = (this.uiFunctions.names.resources[key] ? this.uiFunctions.names.resources[key] : item !== null ? item.name : key).toLowerCase();
var value = costs[key];
var classes = "action-cost";
var costFraction = playerActionsHelper.checkCost(action, key);
if (costFraction < 1) classes += " action-cost-blocker";
if (isResource(key.split("_")[1]) && value > showStorage || key == "stamina" && value > playerHealth * PlayerStatConstants.HEALTH_TO_STAMINA_FACTOR) {
classes += " action-cost-blocker-storage";
hasCostBlockers = true;
}
}
else if (costFraction < bottleNeckCostFraction) bottleNeckCostFraction = costFraction;

var duration = PlayerActionConstants.getDuration(baseActionId);
if (duration > 0) {
if (content.length > 0) content += "<hr/>";
content += "<span class='action-duration'>duration: " + Math.round(duration * 100)/100 + "s</span>";
if (value > 0) content += "<span class='" + classes + "'>" + name + ": " + value + "</span><br/>";
}
}

if (injuryRisk > 0 || fightRisk > 0 || inventoryRisk > 0) {
var inventoryRiskLabel = action === "despair" ? "lose items" : "lose item";
if (content.length > 0) content += "<hr/>";
if (injuryRisk > 0) content += "<span class='action-risk warning'>risk of injury: " + Math.round(injuryRisk * 100 * 100) / 100 + "%</span><br/>";
if (fightRisk > 0) content += "<span class='action-risk warning'>risk of fight: " + Math.round(fightRisk * 100 * 100) / 100 + "%</span><br/>";
if (inventoryRisk > 0) content += "<span class='action-risk warning'>" + inventoryRiskLabel + ": " + Math.round(inventoryRisk * 100 * 100) / 100 + "%</span>";
}
} else {
var duration = PlayerActionConstants.getDuration(baseActionId);
if (duration > 0) {
if (content.length > 0) content += "<hr/>";
content += "<span class='action-duration'>duration: " + Math.round(duration * 100)/100 + "s</span>";
}

if (injuryRisk > 0 || fightRisk > 0 || inventoryRisk > 0) {
var inventoryRiskLabel = action === "despair" ? "lose items" : "lose item";
if (content.length > 0) content += "<hr/>";
content += "<span class='btn-disabled-reason action-cost-blocker'>" + disabledReason + "</span>";
if (injuryRisk > 0) content += "<span class='action-risk warning'>risk of injury: " + Math.round(injuryRisk * 100 * 100) / 100 + "%</span><br/>";
if (fightRisk > 0) content += "<span class='action-risk warning'>risk of fight: " + Math.round(fightRisk * 100 * 100) / 100 + "%</span><br/>";
if (inventoryRisk > 0) content += "<span class='action-risk warning'>" + inventoryRiskLabel + ": " + Math.round(inventoryRisk * 100 * 100) / 100 + "%</span>";
}
$(this).siblings(".btn-callout").children(".btn-callout-content").html(content);
$(this).parent().siblings(".btn-callout").children(".btn-callout-content").html(content);
} else {
if (content.length > 0) content += "<hr/>";
content += "<span class='btn-disabled-reason action-cost-blocker'>" + disabledReason + "</span>";
}

$(button).siblings(".btn-callout").children(".btn-callout-content").html(content);
$(button).parent().siblings(".btn-callout").children(".btn-callout-content").html(content);

// Check requirements affecting req-cooldown
bottleNeckCostFraction = Math.min(bottleNeckCostFraction, playerActionsHelper.checkRequirements(action, false, sectorEntity).value);
if (hasCostBlockers) bottleNeckCostFraction = 0;
if (isHardDisabled) bottleNeckCostFraction = 0;
// Check requirements affecting req-cooldown
bottleNeckCostFraction = Math.min(bottleNeckCostFraction, playerActionsHelper.checkRequirements(action, false, sectorEntity).value);
if (hasCostBlockers) bottleNeckCostFraction = 0;
if (isHardDisabled) bottleNeckCostFraction = 0;

// Update cooldown overlays
$(this).siblings(".cooldown-reqs").css("width", ((bottleNeckCostFraction) * 100) + "%");
$(this).children(".cooldown-action").css("display", !isHardDisabled ? "inherit" : "none");
$(this).children(".cooldown-duration").css("display", !isHardDisabled ? "inherit" : "none");
});
// Update cooldown overlays
$(button).siblings(".cooldown-reqs").css("width", ((bottleNeckCostFraction) * 100) + "%");
$(button).children(".cooldown-action").css("display", !isHardDisabled ? "inherit" : "none");
$(button).children(".cooldown-duration").css("display", !isHardDisabled ? "inherit" : "none");
},

hasButtonCooldown: function (button) {
Expand Down
2 changes: 1 addition & 1 deletion src/game/systems/ui/UIOutEmbarkSystem.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ define([
var inputMax = Math.min(Math.floor(count));
var inputMin = 0;
var inputValue = $(this).children("td").children(".stepper").children("input").attr("value");
this.uiFunctions.toggle(this, visible);
uiFunctions.toggle(this, visible);
$(this).children("td").children(".stepper").children("input").attr("max", inputMax);
$(this).children("td").children(".stepper").children("input").attr("min", inputMin);
$(this).children("td").children(".stepper").children("input").attr("value", Math.max(inputValue, inputMin));
Expand Down
2 changes: 1 addition & 1 deletion src/game/worldcreator/WorldCreator.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ define([
console.log((GameConstants.isDebugOutputEnabled ? "START " + GameConstants.STARTTimeNow() + "\t " : "")
+ "World structure ready."
+ (GameConstants.isDebugOutputEnabled ? " (ground: " + bottomLevel + ", surface: " + topLevel + ", total sectors: " + this.totalSectors + ")" : ""));
WorldCreatorDebug.printWorld(this.world, [ "locales.length" ]);
// WorldCreatorDebug.printWorld(this.world, [ "locales.length" ]);
},

// sector type, building density, state of repair, sunlight, hazards
Expand Down

0 comments on commit 010e039

Please sign in to comment.