Load stock data on stock change or char upload

Extracts the loading logic to a common method returning a promise,
both places 'then' the promise.
pull/8/head
parent 30f477a2e0
commit c8adc19846
  1. 47
      src/public/js/burning-serialize.js
  2. 24
      src/public/js/burning.js

@ -1,8 +1,8 @@
function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropriateWeapons){
$scope.name = charStruct.name;
$scope.gender = charStruct.gender;
$scope.stock = charStruct.stock;
$scope.name = charStruct.name;
$scope.gender = charStruct.gender;
$scope.stock = charStruct.stock;
$scope.ensureStockLoaded($scope.stock).then(() => {
// Appropriate weapons must be loaded before calculateLifepathSkills is called.
if(serverSettings.storageType != 'server'){
appropriateWeapons.appropriateWeapons = charStruct.approp_weapons;
@ -15,8 +15,8 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr
var selectedLifepaths = [];
for(var i = 0; i < charStruct.lifepaths.length; i++){
var lp = charStruct.lifepaths[i];
// lp[0] is setting name, lp[1] is lifepath name.
// lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName,
// lp[0] is setting name, lp[1] is lifepath name.
// lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName,
// lp[4] is lifepath time, if it's variable and the user selected a value
// lp[5] is the replacement skill for 'Weapon Of Choice' if it's present.
// lp[6] is the replacement stat array, if present. This is needed if the
@ -128,19 +128,19 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr
// Load Resources
$scope.gear = {};
for(var i = 0; i < charStruct.gear.length; i++){
for(var i = 0; i < charStruct.gear.length; i++){
var gear = charStruct.gear[i];
$scope.gear[gear.desc] = new DisplayGear(gear.desc, gear.cost);
}
$scope.property = {};
for(var i = 0; i < charStruct.property.length; i++){
for(var i = 0; i < charStruct.property.length; i++){
var property = charStruct.property[i];
$scope.property[property.desc] = new DisplayGear(property.desc, property.cost);
}
$scope.relationships = {};
for(var i = 0; i < charStruct.relationships.length; i++){
for(var i = 0; i < charStruct.relationships.length; i++){
var rel = charStruct.relationships[i];
$scope.relationships[rel.desc] = new DisplayRelationship(
rel.desc,
@ -154,13 +154,13 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr
}
$scope.affiliations = {};
for(var i = 0; i < charStruct.affiliations.length; i++){
for(var i = 0; i < charStruct.affiliations.length; i++){
var affil = charStruct.affiliations[i];
$scope.affiliations[affil.desc] = new DisplayAffiliation(affil.desc, affil.importance);
}
$scope.reputations = {};
for(var i = 0; i < charStruct.reputations.length; i++){
for(var i = 0; i < charStruct.reputations.length; i++){
var rep = charStruct.reputations[i];
$scope.reputations[rep.desc] = new DisplayReputation(rep.desc, rep.importance);
}
@ -173,14 +173,15 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr
$scope.attributeModifierQuestionResults = loadAttributeModifierQuestionResultsFromSave($scope, charStruct.attr_mod_questions);
$scope.brutalLifeWithdrawn = charStruct.brutal_life_withdrawn;
$scope.$digest();
});
}
function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
// To serialize:
// - Serialized version
// - Character name
// - Stock
// - Stock
// - Gender
// - A list Lifepath names, with setting: [setting, lifepath]
// - How many points were spent on which stat
@ -225,10 +226,10 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
var displayStat = $scope.stats[i];
stats.push({
"name" : displayStat.name,
"shade" : displayStat.shade,
"mentalPoints" : displayStat.mentalPointsSpent,
"physicalPoints" : displayStat.physicalPointsSpent,
"name" : displayStat.name,
"shade" : displayStat.shade,
"mentalPoints" : displayStat.mentalPointsSpent,
"physicalPoints" : displayStat.physicalPointsSpent,
"eitherPoints" : displayStat.eitherPointsSpent
});
}
@ -277,7 +278,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
}
var res = serializeResource( $scope.gear, function(display){
return {
return {
"cost" : display.cost,
"desc" : display.desc
};
@ -285,7 +286,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
chardata.gear = res;
var res = serializeResource( $scope.property, function(display){
return {
return {
"cost" : display.cost,
"desc" : display.desc
};
@ -293,7 +294,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
chardata.property = res;
var res = serializeResource( $scope.relationships, function(display){
return {
return {
"desc" : display.desc,
"importance" : display.importance,
"isImmedFam" : display.isImmedFam,
@ -306,7 +307,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
chardata.relationships = res;
var res = serializeResource( $scope.affiliations, function(display){
return {
return {
"desc" : display.desc,
"importance" : display.importance
};
@ -314,7 +315,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) {
chardata.affiliations = res;
var res = serializeResource( $scope.reputations, function(display){
return {
return {
"desc" : display.desc,
"importance" : display.importance
};

@ -364,14 +364,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo
$scope.stockSelected = true;
}
let loadPromises = [];
if(!burningData.resources[$scope.stock]) {
loadPromises.push(burningData.loadResourcesForStock($scope.stock));
}
if(!burningData.lifepaths[$scope.stock]) {
loadPromises.push(burningData.loadLifepathsForStock($scope.stock));
}
Promise.all(loadPromises).then(() => {
$scope.ensureStockLoaded($scope.stock).then(() => {
var oldName = $scope.name;
// Make a blank character sheet
$scope.initialize($scope.stock);
@ -386,9 +379,21 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo
calculateSpecialTraitsForDisplay($scope, burningData);
calculateGearSelectionLists($scope, burningData);
calculatePropertySelectionLists($scope, burningData);
$scope.$digest();
});
}
$scope.ensureStockLoaded = function(stock) {
let loadPromises = [];
if(!burningData.lifepaths[stock]) {
loadPromises.push(burningData.loadLifepathsForStock(stock));
}
if(!burningData.resources[stock]) {
loadPromises.push(burningData.loadResourcesForStock(stock));
}
return Promise.all(loadPromises);
};
$scope.onSettingChange = function(){
calculateCurrentSettingLifepathNames($scope, burningData);
@ -413,8 +418,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo
}
burningData.whenStocksLoaded.then(() => {
$scope.stocks = [{ name: "Select a stock" }];
$scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks));
$scope.stocks = [{ name: "Select a stock" }, ...Object.values(burningData.stocks)];
$scope.stockSelected = false;
$scope.$digest();
});

Loading…
Cancel
Save