Add 1.13 conditions

This commit is contained in:
Misode
2019-06-18 18:38:17 +02:00
parent dfe1cbf246
commit 0ffbdcae11
3 changed files with 220 additions and 14 deletions
+4 -4
View File
@@ -1,16 +1,16 @@
.bg-info {
.card.bg-info {
background-color: #91cdd6 !important;
}
.bg-success {
.card.bg-success {
background-color: #91d8a1 !important;
}
.bg-secondary {
.card.bg-secondary {
background-color: #adb5bd !important;
}
.bg-dark {
.card.bg-dark {
background-color: #646b72 !important;
}
+81 -7
View File
@@ -73,7 +73,7 @@
<a class="dropdown-item" onclick="switchRollsType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateRollsField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRollsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateRollsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -93,7 +93,7 @@
<a class="dropdown-item" onclick="switchBonusRollsType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateBonusRollsField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateBonusRollsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateBonusRollsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -112,7 +112,7 @@
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)">Add Condition</button>``
</div>
<div class="card-body">
<div class="input-group entry-type">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Type</span>
</div>
@@ -181,7 +181,7 @@
<a class="dropdown-item" onclick="switchCountType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateCountField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateCountField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateCountField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -201,7 +201,7 @@
<a class="dropdown-item" onclick="switchDamageType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateDamageField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateDamageField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateDamageField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -278,7 +278,7 @@
<a class="dropdown-item" onclick="switchLevelsType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateLevelsField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateLevelsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateLevelsField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -346,7 +346,7 @@
<a class="dropdown-item" onclick="switchModifierAmountType(this, 'binomial')">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" onchange="updateModifierAmountField(this)" onclick="this.select()">
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateModifierAmountField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateModifierAmountField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
@@ -393,6 +393,80 @@
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeCondition(this)">Remove Condition</button>
</div>
<div class="card-body">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Condition</span>
</div>
<select class="form-control condition-type" onchange="updateConditionType(this)">
<option value="minecraft:random_chance">Random Chance</option>
<option value="minecraft:random_chance_with_looting">Random Chance with Looting</option>
<option value="minecraft:killed_by_player">Killed by Player</option>
<option value="minecraft:entity_properties">Entity Properties</option>
<option value="minecraft:entity_scores">Entity Scores</option>
</select>
</div>
<div class="input-group mt-3 condition-chance d-none">
<div class="input-group-prepend">
<span class="input-group-text">Chance</span>
</div>
<input type="text" class="form-control" onchange="updateConditionChance(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-looting-multiplier d-none">
<div class="input-group-prepend">
<span class="input-group-text">Looting Multiplier</span>
</div>
<input type="text" class="form-control" onchange="updateConditionLootingMultiplier(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-killed-inverted d-none">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="invertedCheckbox" onchange="updateInvertedField(this)">
<label class="custom-control-label" for="invertedCheckbox">Inverted</label>
</div>
</div>
<div class="input-group mt-3 condition-entity d-none">
<div class="input-group-prepend">
<span class="input-group-text">Entity</span>
</div>
<select class="form-control" onchange="updateConditionEntity(this)">
<option value="this">This</option>
<option value="killer">Killer</option>
<option value="killer_player">Killer Player</option>
</select>
</div>
<div class="card bg-dark mt-3 condition-predicate d-none">
<div class="card-body">
</div>
</div>
<div class="input-group mt-3 condition-entity-scores d-none">
<div class="input-group-prepend">
<label class="input-group-text">Objective</label>
</div>
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-dark" type="button" onclick="addScore(this)">Add Score</button>
</div>
</div>
<div class="mt-3 scores-list d-none">
</div>
</div>
</div>
<div id="scoreTemplate" class="input-group mt-3 score">
<div class="input-group-prepend">
<span class="input-group-text objective"></span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" onclick="switchConditionScoreType(this, 'exact')">Exact</a>
<a class="dropdown-item" onclick="switchConditionScoreType(this, 'range')">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateConditionScoreField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateConditionScoreField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateConditionScoreField(this)" onclick="this.select()">
<div class="input-group-append">
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeScore(this)">Remove</button>
</div>
</div>
</div>
+135 -3
View File
@@ -35,7 +35,7 @@ function getParent(el) {
}
function getSuperParent(el) {
let $parent = $(el).closest('.table, .pool, .entry, .child, .term, .function, .condition, .modifier');
let $parent = $(el).closest('.table, .pool, .entry, .child, .term, .function, .condition, .modifier .score');
return getParent($parent.parent());
}
@@ -113,7 +113,7 @@ function addCondition(el) {
}
parent.conditions.push({
condition: "minecraft:random_chance",
change: 0.5
chance: 0.5
});
invalidated();
}
@@ -233,7 +233,7 @@ function updateCountField(el) {
function switchDamageType(el, type) {
$(el).closest('.function-damage').attr('data-type', type);
updateCountField(el);
updateDamageField(el);
}
function updateDamageField(el) {
@@ -380,6 +380,81 @@ function removeModifierSlot(el) {
}
}
function updateConditionType(el) {
let condition = $(el).val();
let $condition = getParent(el);
if (condition === 'minecraft:random_chance_with_looting') {
$condition.looting_multiplier = 1;
} else if (condition === 'minecraft:entity_properties' || condition === 'minecraft:entity_scores'){
$condition.entity = 'this';
}
$condition.condition = condition;
invalidated();
}
function updateConditionChance(el) {
let chance = parseFloat($(el).val());
if (isNaN(chance)) {
delete getParent(el).chance;
} else {
getParent(el).chance = chance;
}
invalidated();
}
function updateConditionLootingMultiplier(el) {
let multiplier = parseFloat($(el).val());
if (isNaN(multiplier)) {
multiplier = 1;
}
getParent(el).looting_multiplier = multiplier;
invalidated();
}
function updateInvertedField(el) {
let inverted = $(el).prop('checked');
if (inverted) {
getParent(el).inverted = true;
} else {
delete getParent(el).inverted;
}
invalidated();
}
function updateConditionEntity(el) {
getParent(el).entity = $(el).val();
invalidated();
}
function addScore(el) {
let condition = getParent(el);
let objective = $(el).closest('.condition-entity-scores').find('input').val();
if (!condition.scores) {
condition.scores = {};
}
condition.scores[objective] = 1;
invalidated();
}
function removeScore(el) {
let objective = $(el).closest('.score').attr('data-objective');
delete getParent(el).scores[objective];
invalidated();
}
function switchConditionScoreType(el, type) {
$(el).closest('.score').attr('data-type', type);
updateConditionScoreField(el);
}
function updateConditionScoreField(el) {
let type = $(el).closest('.score').attr('data-type');
let data = getRangeField($(el).closest('.score'), type);
let objective = $(el).closest('.score').attr('data-objective');
getParent(el).scores[objective] = data;
invalidated();
}
function updateTableType() {
table.type = $('#tableType').val();
invalidated();
@@ -648,5 +723,62 @@ function generateCondition(condition, i) {
let $condition = $('#conditionTemplate').clone();
$condition.removeAttr('id').attr('data-index', i);
$condition.find('.condition-type').val(condition.condition);
if (condition.condition === 'minecraft:random_chance' || condition.condition === 'minecraft:random_chance_with_looting') {
$condition.find('.condition-chance').removeClass('d-none');
$condition.find('.condition-chance input').val(condition.chance);
} else {
delete condition.chance;
}
if (condition.condition === 'minecraft:random_chance_with_looting') {
$condition.find('.condition-looting-multiplier').removeClass('d-none');
$condition.find('.condition-looting-multiplier input').val(condition.looting_multiplier);
} else {
delete condition.looting_multiplier;
}
if (condition.condition === 'minecraft:killed_by_player') {
$condition.find('.condition-killed-inverted').removeClass('d-none');
let inverted = false;
if (condition.inverted) {
inverted = true;
}
let id = 'invertedCheckbox' + Math.floor(1000000*Math.random());
$condition.find('.condition-killed-inverted').attr('for', id);
$condition.find('.condition-killed-inverted label').attr('for', id);
$condition.find('.condition-killed-inverted input').prop('checked', inverted).attr('id', id);
} else {
delete condition.inverted;
}
if (condition.condition === 'minecraft:entity_properties' || condition.condition === 'minecraft:entity_scores') {
$condition.find('.condition-entity').removeClass('d-none');
$condition.find('.condition-entity select').val(condition.entity);
} else {
delete condition.entity;
}
if (condition.condition === 'minecraft:entity_properties') {
$condition.find('.condition-predicate').removeClass('d-none');
} else {
delete condition.predicate;
}
if (condition.condition === 'minecraft:entity_scores') {
$condition.find('.condition-entity-scores').removeClass('d-none');
if (condition.scores) {
$condition.find('.scores-list').removeClass('d-none');
for (let objective in condition.scores) {
let score = condition.scores[objective];
delete score.type;
let $score = $('#scoreTemplate').clone();
$score.removeAttr('id').attr('data-objective', objective);
$score.find('.objective').text(objective);
generateRange($score, score);
$condition.find('.scores-list').append($score);
}
}
} else {
delete condition.scores;
}
return $condition;
}