further improved damage tracking functionality
This commit is contained in:
parent
86f1f4bad3
commit
8517c7f7e8
@ -19,6 +19,18 @@ input:invalid {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.badge.bg-warning {
|
||||
left: 12px;
|
||||
bottom: -4px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.badge.bg-danger {
|
||||
left: 12px;
|
||||
top: 12px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
/* Dropdown Content (Hidden by Default) */
|
||||
.damage-monitor {
|
||||
display: none;
|
||||
@ -32,7 +44,7 @@ input:invalid {
|
||||
.damage-monitor th {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: white;
|
||||
/* background-color: white;*/
|
||||
border: solid darkgray 1px;
|
||||
padding: 3px;
|
||||
}
|
||||
@ -40,20 +52,14 @@ input:invalid {
|
||||
.damage-monitor td {
|
||||
width: 30px;
|
||||
height: 24px;
|
||||
border: solid darkgray 1px;
|
||||
font-size: smaller;
|
||||
user-select: none;
|
||||
}
|
||||
.damage-monitor td::selection { background: none; }
|
||||
.damage-monitor td::-moz-selection { background: none; }
|
||||
|
||||
td.damage-stun { background-color: cornflowerblue; }
|
||||
td.damage-stun.selected { background-color: dodgerblue; }
|
||||
td.damage-physical { background-color: indianred; }
|
||||
td.damage-physical.selected { background-color: tomato; }
|
||||
|
||||
/* bgcolors: default, active, hover
|
||||
phys: darkred, red, tomato, coral, lightcoral, indianred, orangered
|
||||
stun: cornflowerblue, lightskyblue, mediumlateblue, steelblue, royalblue
|
||||
*/
|
||||
|
||||
.damage-monitor button {
|
||||
font-size: smaller;
|
||||
height: 24px;
|
||||
width: 30px;
|
||||
padding: 2px;
|
||||
}
|
||||
.damage-monitor button.active {
|
||||
filter: brightness(91%);
|
||||
}
|
||||
|
||||
66
js/sr2ini.js
66
js/sr2ini.js
@ -3,23 +3,23 @@
|
||||
*/
|
||||
|
||||
const penalty = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4];
|
||||
const dmg = ["", "L", "M", "S", "D"];
|
||||
|
||||
const damageMonitorHTML = ['<table class="damage-monitor text-center">\n',
|
||||
const damageMonitorHTML = ['<table class="bg-light damage-monitor text-center">\n',
|
||||
'<thead>\n',
|
||||
'<tr><th title="Stun damage"><img src="img/zzz.png" /></th><th title="Physical Damage"><img src="img/skull.png" /></th></tr>\n',
|
||||
'</thead>\n',
|
||||
'<tbody>\n',
|
||||
'<tr><td class="damage-stun selected" title="0">0</td><td class="damage-physical selected" title="0">0</td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-1">L</td><td class="damage-physical" title="-1">L</td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-1"></td><td class="damage-physical" title="-1"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-2">M</td><td class="damage-physical" title="-2">M</td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-2"></td><td class="damage-physical" title="-2"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-2"></td><td class="damage-physical" title="-2"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-3">S</td><td class="damage-physical" title="-3">S</td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-3"></td><td class="damage-physical" title="-3"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-3"></td><td class="damage-physical" title="-3"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="-3"></td><td class="damage-physical" title="-3"></td></tr>\n',
|
||||
'<tr><td class="damage-stun" title="knocked out">D</td><td class="damage-physical" title="dead">D</td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-1">L</button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-1">L</button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-1"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-1"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-2">M</button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-2">M</button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-2"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-2"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-2"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-2"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-3">S</button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-3">S</button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-3"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-3"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-3"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-3"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="-3"></button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="-3"></button></td></tr>\n',
|
||||
'<tr><td class="damage-stun"><button class="btn btn-sm btn-warning align-middle" title="K.O.">D</button></td><td class="damage-physical"><button class="btn btn-sm btn-danger" title="dead">D</button></td></tr>\n',
|
||||
'</tbody>\n',
|
||||
'</table>'].join("");
|
||||
|
||||
@ -116,7 +116,9 @@ function getEffectiveIni(value, dmgLvl1, dmgLvl2) {
|
||||
effectiveIni = parseInt(value) - penalty[parseInt(dmgLvl1)] - penalty[parseInt(dmgLvl2)];
|
||||
}
|
||||
//
|
||||
else { return NaN; }
|
||||
else {
|
||||
return NaN;
|
||||
}
|
||||
return effectiveIni < 0 ? 0 : effectiveIni;
|
||||
}
|
||||
|
||||
@ -173,17 +175,17 @@ function handleDamageButtonClick (e) {
|
||||
|
||||
// click handler for damage monitor fields
|
||||
function handleDamageMonitorClick (e) {
|
||||
let $td = $(e.target);
|
||||
let $tr = $td.parents("tr.combatantRow");
|
||||
let $btn = $(e.target);
|
||||
let $tr = $btn.parents("tr.combatantRow");
|
||||
let damageType;
|
||||
let otherDamageLevel
|
||||
|
||||
// calculate new damage level and type
|
||||
let damageLevel = $td.parent().index();
|
||||
if ( $td.hasClass("damage-stun") ) {
|
||||
let damageLevel = $btn.parent().parent().index() + 1;
|
||||
if ( $btn.parent().hasClass("damage-stun") ) {
|
||||
damageType = "stun";
|
||||
otherDamageLevel = $tr.attr("data-damage-physical") ? parseInt($tr.attr("data-damage-physical")) : 0;
|
||||
} else if ( $td.hasClass("damage-physical") ) {
|
||||
} else if ( $btn.parent().hasClass("damage-physical") ) {
|
||||
damageType = "physical";
|
||||
otherDamageLevel = $tr.attr("data-damage-stun") ? parseInt($tr.attr("data-damage-stun")) : 0;
|
||||
} else {
|
||||
@ -199,12 +201,22 @@ function handleDamageMonitorClick (e) {
|
||||
}
|
||||
|
||||
// select/unselect damage boxes
|
||||
$td.addClass("selected");
|
||||
$td.parent().nextAll().children("td.damage-" + damageType).removeClass("selected");
|
||||
$td.parent().prevAll().children("td.damage-" + damageType).addClass("selected");
|
||||
$btn.addClass("active");
|
||||
$btn.parent().parent().nextAll().find("td.damage-" + damageType + " button").removeClass("active");
|
||||
$btn.parent().parent().prevAll().find("td.damage-" + damageType + " button").addClass("active");
|
||||
|
||||
// recalculate effective ini and resort
|
||||
// recalculate effective ini
|
||||
$tr.find(".combatantIni").text(getEffectiveIni($tr));
|
||||
|
||||
// add damage level badges
|
||||
if ( $tr.attr("data-damage-stun") && $tr.attr("data-damage-stun") != "0" ) {
|
||||
$tr.find(".combatantIni").append('<sup><span class="badge bg-warning position-absolute translate-middle" title="Stun damage level">' + dmg[penalty[$tr.attr("data-damage-stun")]] + '</span></sup>');
|
||||
}
|
||||
if ( $tr.attr("data-damage-physical") && $tr.attr("data-damage-physical") != "0" ) {
|
||||
$tr.find(".combatantIni").append('<sub><span class="badge bg-danger position-absolute translate-middle">' + dmg[penalty[$tr.attr("data-damage-physical")]] + '<span class="visually-hidden">Physical damage level</span></span></sub>');
|
||||
}
|
||||
|
||||
// resort
|
||||
sortTable();
|
||||
|
||||
// return false;
|
||||
@ -337,7 +349,7 @@ function addCombatant (e) {
|
||||
let $tr = $($.parseHTML( [
|
||||
'<tr class="combatantRow align-middle" data-true-ini="', ini, '">\n', //TODO: add data-damage-* attributes with initial damage levels
|
||||
'<td class="combatantName" title="Combatant\'s name">', name, '</td>\n',
|
||||
'<td class="combatantIni text-center" title="Initiative">', effectiveIni, '</td>\n',
|
||||
'<td class="combatantIni text-center" title="Effective initiative (w/ wound penalties)">', effectiveIni, '</td>\n',
|
||||
'<td class="text-center combatantDiceAndRea" title="Iniative dice and reaction"><span class="combatantDice">', dice, '</span>D+<span class="combatantRea">', rea, '</span></td>\n',
|
||||
'<td class="text-end">\n',
|
||||
'<div class="btn-group">\n',
|
||||
@ -352,7 +364,7 @@ function addCombatant (e) {
|
||||
'</tr>'].join("")
|
||||
));
|
||||
|
||||
//TODO: mark initial damage levels with .selected class
|
||||
//TODO: mark initial damage levels with active class
|
||||
|
||||
// add handlers to table row buttons
|
||||
$tr.find("button.edit-button").on("click", handleEditButtonClick);
|
||||
@ -421,7 +433,6 @@ function newRound() {
|
||||
|
||||
// reset ini values
|
||||
$(".combatantRow").each( function() {
|
||||
let effectiveIni = $(this).find(".combatantIni").text();
|
||||
let dice = $(this).find(".combatantDice").text();
|
||||
if ( dice == "" ) {
|
||||
$(this).attr("data-true-ini", "1");
|
||||
@ -429,6 +440,7 @@ function newRound() {
|
||||
$(this).attr("data-true-ini", rollForInitiative(dice, $(this).find(".combatantRea").text()));
|
||||
}
|
||||
$(this).find(".combatantIni").text(getEffectiveIni($(this)));
|
||||
let effectiveIni = $(this).find(".combatantIni").text();
|
||||
});
|
||||
|
||||
// resort table
|
||||
@ -473,7 +485,9 @@ $(document).ready(function(){
|
||||
|
||||
// Hide damage monitors if mouse is clicked outside
|
||||
$("html").on("click", function(e) {
|
||||
$(".damage-monitor:visible").css("display", "none");
|
||||
if (! $(e.target).is("td[class*='damage-'] > button") ) {
|
||||
$(".damage-monitor:visible").css("display", "none");
|
||||
}
|
||||
});
|
||||
|
||||
addTestCombatant();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user