diff options
Diffstat (limited to 'internal/admin/static/hazardeditor.js')
| -rw-r--r-- | internal/admin/static/hazardeditor.js | 98 |
1 files changed, 80 insertions, 18 deletions
diff --git a/internal/admin/static/hazardeditor.js b/internal/admin/static/hazardeditor.js index e849512..89586ac 100644 --- a/internal/admin/static/hazardeditor.js +++ b/internal/admin/static/hazardeditor.js @@ -14,17 +14,26 @@ var HAZARD_SECTIONS = [ ['hit_message', 'Hit Message', 'text', 'You cough and choke on the toxic gas!'], ['miss_message', 'Miss Message', 'text', 'You hold your breath and avoid the fumes.'], ['required_item', 'Required Item', 'search', 'e.g. gas_mask', '', null, 'items'], - ['speed', 'Speed', 'number', '10', 'narrow'], ] }, { - id: 'combat', label: 'Combat', - detect: function(d) { return d.attack_type || d.attack || d.attack_bonus || d.max_hit; }, + id: 'combat', label: 'Combat', path: 'combat', + detect: function(d) { return d.combat; }, fields: [ - ['attack_type', 'Attack Type', 'select', 'stab|slash|crush|ranged|science'], - ['attack', 'Attack', 'number', '5', 'narrow'], - ['attack_bonus', 'Attack Bonus', 'number', '0', 'narrow'], - ['max_hit', 'Max Hit', 'number', '3', 'narrow'], + ['stats.attack', 'Attack', 'number', '5', 'narrow'], + ['stats.strength', 'Strength', 'number', '5', 'narrow'], + ['stats.ranged', 'Ranged', 'number', '1', 'narrow'], + ['stats.science', 'Science', 'number', '1', 'narrow'], + ['stats.speed', 'Speed', 'number', '5', 'narrow'], + ['stats.max_melee_hit', 'Max Melee Hit', 'number', '2', 'narrow'], + ['stats.max_ranged_hit', 'Max Ranged Hit', 'number', '0', 'narrow'], + ['stats.max_science_hit', 'Max Science Hit', 'number', '0', 'narrow'], + ['stats.bonuses.attack_bonus', 'Atk Bonus', 'number', '0', 'narrow'], + ['stats.bonuses.strength_bonus', 'Str Bonus', 'number', '0', 'narrow'], + ['stats.bonuses.ranged_bonus', 'Rng Bonus', 'number', '0', 'narrow'], + ['stats.bonuses.ranged_strength_bonus', 'Rng Str Bonus', 'number', '0', 'narrow'], + ['stats.bonuses.science_bonus', 'Sci Bonus', 'number', '0', 'narrow'], + ['stats.bonuses.science_percent_bonus', 'Sci % Bonus', 'number', '0', 'narrow'], ] } ]; @@ -129,11 +138,15 @@ function renderCard(sec, data) { h += '</div>'; if (!collapsed) { h += '<div class="obj-card-body">'; - h += '<div class="obj-card-grid">'; - sec.fields.forEach(function(f) { - h += renderField(sec, f, data, -1); - }); - h += '</div>'; + if (sec.id === 'combat') { + h += renderHazardCombatCard(data); + } else { + h += '<div class="obj-card-grid">'; + sec.fields.forEach(function(f) { + h += renderField(sec, f, data, -1); + }); + h += '</div>'; + } h += '</div>'; } h += '</div>'; @@ -158,7 +171,9 @@ function removeSection(id) { var sec = HAZARD_SECTIONS.find(function(s) { return s.id === id; }); if (!sec) return; ced_syncDOMToData(hazardData); - if (sec.fields) sec.fields.forEach(function(f) { delete hazardData[f[0]]; }); + if (sec.path) { + delete hazardData[sec.path]; + } delete addedSections[id]; renderHazardEditor(hazardID, hazardData); } @@ -171,10 +186,15 @@ function addSection() { if (!sec) return; if (id === 'combat') { - hazardData.attack_type = ''; - hazardData.attack = 0; - hazardData.attack_bonus = 0; - hazardData.max_hit = 0; + hazardData.combat = { + attack_types: ['crush'], + stats: { + attack: 1, strength: 0, ranged: 0, science: 0, + speed: 5, + max_melee_hit: 0, max_ranged_hit: 0, max_science_hit: 0, + bonuses: {attack_bonus:0, strength_bonus:0, ranged_bonus:0, ranged_strength_bonus:0, science_bonus:0, science_percent_bonus:0} + } + }; } addedSections[id] = true; expandedCards[id] = true; @@ -200,9 +220,16 @@ function saveHazard() { }); } + if (sec.id === 'combat' && document.getElementById('hz_atktype')) { + sectionObj['attack_types'] = ced_collectAtkType('hz_atktype'); + hasValues = true; + } + if (sec.always) { Object.keys(sectionObj).forEach(function(k) { out[k] = sectionObj[k]; }); - } else if (hasValues) { + } else if (hasValues && sec.path) { + out[sec.path] = ced_unflattenObj(sectionObj); + } else if (hasValues && !sec.path) { Object.keys(sectionObj).forEach(function(k) { out[k] = sectionObj[k]; }); } }); @@ -271,3 +298,38 @@ function duplicateHazard() { loadHazardEditor(newID); }).catch(function(e) { notify('Duplicate failed: ' + e.message, 'error'); }); } + +function renderHazardCombatCard(data) { + var sec = HAZARD_SECTIONS.find(function(s) { return s.id === 'combat'; }); + if (!sec) return ''; + var byKey = {}; + sec.fields.forEach(function(f) { byKey[f[0]] = f; }); + + var h = ced_renderAtkTypeWidget(data, 'hz_atktype', 'ced_atkPillSelect'); + + h += '<div class="obj-inline-group">'; + h += '<span class="obj-inline-label">Stats</span>'; + h += '<div class="obj-card-grid" style="margin-top:4px">'; + var statKeys = ['stats.attack','stats.strength','stats.ranged','stats.science']; + statKeys.forEach(function(k) { h += renderField(sec, byKey[k], data, -1); }); + h += '</div>'; + h += '<div class="obj-card-grid" style="margin-top:4px">'; + h += renderField(sec, byKey['stats.speed'], data, -1); + h += '</div>'; + h += '<div class="obj-card-grid" style="margin-top:4px">'; + var maxKeys = ['stats.max_melee_hit','stats.max_ranged_hit','stats.max_science_hit']; + maxKeys.forEach(function(k) { h += renderField(sec, byKey[k], data, -1); }); + h += '</div>'; + h += '</div>'; + + h += '<div class="obj-inline-group">'; + h += '<span class="obj-inline-label">Bonuses</span>'; + h += '<div class="obj-card-grid" style="margin-top:4px">'; + var bonusKeys = ['stats.bonuses.attack_bonus','stats.bonuses.strength_bonus','stats.bonuses.ranged_bonus', + 'stats.bonuses.ranged_strength_bonus','stats.bonuses.science_bonus','stats.bonuses.science_percent_bonus']; + bonusKeys.forEach(function(k) { h += renderField(sec, byKey[k], data, -1); }); + h += '</div>'; + h += '</div>'; + + return h; +} |
