Merge pull request #41 from hppeng-wynn/atree
Implement Ability Tree UI
|
@ -272,7 +272,7 @@
|
||||||
<div class="col-auto order-xl-0 order-1">
|
<div class="col-auto order-xl-0 order-1">
|
||||||
<div class="row h-100 dark-shadow dark-6 rounded" id='weapon-dropdown'>
|
<div class="row h-100 dark-shadow dark-6 rounded" id='weapon-dropdown'>
|
||||||
<div class="col-auto px-lg-1 g-0 dark-7 rounded-end my-auto text-center scaled-item-icon" id="weapon-img-loc">
|
<div class="col-auto px-lg-1 g-0 dark-7 rounded-end my-auto text-center scaled-item-icon" id="weapon-img-loc">
|
||||||
<img id="weapon-img" class="img-fluid rounded" src="../media/items/new/generic-wand.png">
|
<img id="weapon-img" class="img-fluid rounded" src="../media/items/new/generic-dagger.png">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<div class="row row-cols-1 h-100 align-items-center">
|
<div class="row row-cols-1 h-100 align-items-center">
|
||||||
|
@ -420,17 +420,22 @@
|
||||||
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
<div class="row row-cols-1 row-cols-1 text-center scaled-font dark-5 rounded dark-shadow">
|
||||||
<div class="col fw-bold dark-4 rounded-top">
|
<div class="col fw-bold dark-4 rounded-top">
|
||||||
<div class = "row">
|
<div class = "row">
|
||||||
<div class = "col-4 py-2">
|
<div class = "col-3 py-2">
|
||||||
<button class = "col-auto button rounded scaled-font fw-bold text-light dark-5" id = "toggle-tomes" onclick = "toggle_tab('tomes-dropdown'); toggleButton('toggle-tomes')">
|
<button class = "col-auto button rounded scaled-font fw-bold text-light dark-5" id = "toggle-tomes" onclick = "toggle_tab('tomes-dropdown'); toggleButton('toggle-tomes')">
|
||||||
Show Tomes
|
Show Tomes
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class = "col-4 py-2">
|
<div class = "col-3 py-2">
|
||||||
|
<button class = "col-auto button rounded scaled-font fw-bold text-light dark-5" id = "toggle-atree" onclick = "toggle_tab('atree-dropdown'); toggleButton('toggle-atree')">
|
||||||
|
Show Ability Tree
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class = "col-3 py-2">
|
||||||
<button class = "button rounded scaled-font fw-bold text-light dark-5" id = "edit-ID-button" onclick = "toggle_tab('edit_id_tab'); toggleButton('edit-ID-button')">
|
<button class = "button rounded scaled-font fw-bold text-light dark-5" id = "edit-ID-button" onclick = "toggle_tab('edit_id_tab'); toggleButton('edit-ID-button')">
|
||||||
Edit IDs
|
Edit IDs
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class = "col-4 py-2">
|
<div class = "col-3 py-2">
|
||||||
<button class = "button rounded scaled-font fw-bold text-light dark-5" id = "edit-ID-button" onclick = "resetEditableIDs();">
|
<button class = "button rounded scaled-font fw-bold text-light dark-5" id = "edit-ID-button" onclick = "resetEditableIDs();">
|
||||||
Reset Edited IDs
|
Reset Edited IDs
|
||||||
</button>
|
</button>
|
||||||
|
@ -609,6 +614,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class = "col dark-6 rounded-bottom my-3 my-xl-1" id = "atree-dropdown" style = "display:none;">
|
||||||
|
<div class="row row-cols-1 row-cols-xl-2">
|
||||||
|
<div class="col border border-semi-light rounded dark-9 hide-scroll" id="atree-ui" style="height: 500px; overflow-y: auto;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col mx-auto" id="atree-active">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col dark-6 rounded-bottom my-3 my-xl-1" id = "edit_id_tab" style = "display:none;">
|
<div class="col dark-6 rounded-bottom my-3 my-xl-1" id = "edit_id_tab" style = "display:none;">
|
||||||
<div class = "row big-title justify-content-center">
|
<div class = "row big-title justify-content-center">
|
||||||
Damage Stats
|
Damage Stats
|
||||||
|
@ -1390,6 +1404,8 @@
|
||||||
<script type="text/javascript" src="../js/skillpoints.js"></script>
|
<script type="text/javascript" src="../js/skillpoints.js"></script>
|
||||||
<script type="text/javascript" src="../js/damage_calc.js"></script>
|
<script type="text/javascript" src="../js/damage_calc.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../js/atree_constants_min.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="../js/display_constants.js"></script>
|
<script type="text/javascript" src="../js/display_constants.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="../js/display.js"></script>
|
<script type="text/javascript" src="../js/display.js"></script>
|
||||||
|
@ -1404,6 +1420,7 @@
|
||||||
<script type="text/javascript" src="../js/build.js"></script>
|
<script type="text/javascript" src="../js/build.js"></script>
|
||||||
<script type="text/javascript" src="../js/build_constants.js"></script>
|
<script type="text/javascript" src="../js/build_constants.js"></script>
|
||||||
<script type="text/javascript" src="../js/build_encode_decode.js"></script>
|
<script type="text/javascript" src="../js/build_encode_decode.js"></script>
|
||||||
|
<script type="text/javascript" src="../js/display_atree.js"></script>
|
||||||
<script type="text/javascript" src="../js/builder.js"></script>
|
<script type="text/javascript" src="../js/builder.js"></script>
|
||||||
<script type="text/javascript" src="../js/builder_graph.js"></script>
|
<script type="text/javascript" src="../js/builder_graph.js"></script>
|
||||||
<script type="text/javascript" src="../js/expr_parser.js"></script>
|
<script type="text/javascript" src="../js/expr_parser.js"></script>
|
||||||
|
|
|
@ -448,3 +448,38 @@ a:hover {
|
||||||
.button {
|
.button {
|
||||||
border-color: #fff;
|
border-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* atree connector rotations */
|
||||||
|
.rotate-90 {
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
-moz-transform: rotate(90deg);
|
||||||
|
-ms-transform: rotate(90deg);
|
||||||
|
-o-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.rotate-180 {
|
||||||
|
-webkit-transform: rotate(180deg);
|
||||||
|
-moz-transform: rotate(180deg);
|
||||||
|
-ms-transform: rotate(180deg);
|
||||||
|
-o-transform: rotate(180deg);
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.rotate-270 {
|
||||||
|
-webkit-transform: rotate(270deg);
|
||||||
|
-moz-transform: rotate(270deg);
|
||||||
|
-ms-transform: rotate(270deg);
|
||||||
|
-o-transform: rotate(270deg);
|
||||||
|
transform: rotate(270deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.hide-scroll {
|
||||||
|
-ms-overflow-style: none; /* Internet Explorer 10+ */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
}
|
||||||
|
.hide-scroll::-webkit-scrollbar {
|
||||||
|
display: none; /* Safari and Chrome */
|
||||||
|
}
|
||||||
|
|
4099
js/atree_constants.js
Normal file
2
js/atree_constants_min.js
Normal file
171
js/atree_constants_old.js
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
const atrees_old = {
|
||||||
|
"Assassin": [
|
||||||
|
{"title": "Spin Attack", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 0, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 1, "col": 4},
|
||||||
|
{"title": "Dagger Proficiency I", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 2, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 2, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 2, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 3, "col": 4},
|
||||||
|
{"title": "Double Spin", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 4, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 5, "col": 4},
|
||||||
|
{"title": "Dash", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 6, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 6, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 6, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 6, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 6, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 7, "col": 2},
|
||||||
|
{"title": "Smoke Bomb", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 8, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 7, "col": 6},
|
||||||
|
{"title": "Multihit", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 8, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 8, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 8, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 8, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 8, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 8, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 9, "col": 0},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 10, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 9, "col": 2},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 10, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 9, "col": 6},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 10, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 8, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 8, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 9, "col": 8},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 10, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 10, "col": 1},
|
||||||
|
{"title": "Backstab", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 11, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 9, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 90, "row": 10, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 10, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 11, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 10, "col": 7},
|
||||||
|
{"title": "Fatality", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 11, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 11, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 12, "col": 0},
|
||||||
|
{"title": "Violent Vortex", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 13, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 11, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 12, "col": 2},
|
||||||
|
{"title": "Vanish", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 13, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 12, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 13, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 13, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 13, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 14, "col": 2},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 15, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 14, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 15, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 12, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 13, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 14, "col": 7},
|
||||||
|
{"title": "Lacerate", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 15, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 15, "col": 1},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 16, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 15, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 16, "col": 5},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 15, "col": 8},
|
||||||
|
{"title": "Wall of Smoke", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 16, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 16, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 17, "col": 0},
|
||||||
|
{"title": "Silent Killer", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 18, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 16, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 17, "col": 2},
|
||||||
|
{"title": "Shadow Travel", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 18, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 17, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 18, "col": 5},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 17, "col": 8},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 18, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 18, "col": 4},
|
||||||
|
{"title": "Exploding Clones", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 19, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 18, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 19, "col": 0},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 20, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 19, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 20, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 18, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 18, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 19, "col": 7},
|
||||||
|
{"title": "Weightless", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 20, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 20, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 20, "col": 2},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 21, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 20, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 21, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 20, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 21, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 21, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 20, "col": 8},
|
||||||
|
{"title": "Dancing Blade", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 21, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 21, "col": 0},
|
||||||
|
{"title": "Spin Attack Damage", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 22, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 21, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 22, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 22, "col": 1},
|
||||||
|
{"title": "Marked", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 23, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 22, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 23, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 23, "col": 5},
|
||||||
|
{"title": "Shurikens", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 23, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 23, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 22, "col": 8},
|
||||||
|
{"title": "Far Reach", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 23, "col": 8},
|
||||||
|
{"title": "Stronger Multihit", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 24, "col": 5},
|
||||||
|
{"title": "Psithurism", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 24, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 24, "col": 1},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 25, "col": 1},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 25, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 24, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 25, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 25, "col": 5},
|
||||||
|
{"title": "Choke Bomb", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 25, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 25, "col": 7},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 25, "col": 8},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 26, "col": 5},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 25, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 26, "col": 0},
|
||||||
|
{"title": "Death Magnet", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 27, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 25, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 26, "col": 2},
|
||||||
|
{"title": "Cheaper Multihit", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 27, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 26, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 27, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 26, "col": 7},
|
||||||
|
{"title": "Parry", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 27, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 27, "col": 1},
|
||||||
|
{"title": "Fatal Spin", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 28, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 27, "col": 3},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 28, "col": 3},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 27, "col": 6},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 28, "col": 6},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 27, "col": 8},
|
||||||
|
{"title": "Wall Jump", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 28, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 28, "col": 0},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 29, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 29, "col": 1},
|
||||||
|
{"title": "Harvester", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 30, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 28, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 29, "col": 4},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 30, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 28, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 29, "col": 7},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 30, "col": 7 },
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 30, "col": 2},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 31, "col": 2 },
|
||||||
|
{"image": "../media/atree/connect_t.png", "connector": true, "rotate": 180, "row": 30, "col": 5},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 90, "row": 30, "col": 6},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 31, "col": 5},
|
||||||
|
{"title": "Ricochet", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 31, "col": 8},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 31, "col": 1},
|
||||||
|
{"title": "Satsujin", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 32, "col": 1},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 31, "col": 4},
|
||||||
|
{"title": "Forbidden Art", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 32, "col": 4},
|
||||||
|
{"image": "../media/atree/connect_line.png", "connector": true, "rotate": 0, "row": 31, "col": 7},
|
||||||
|
{"title": "Jasmine Bloom", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 32, "col": 7},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 180, "row": 32, "col": 0},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 33, "col": 0},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 32, "col": 2},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 33, "col": 2},
|
||||||
|
{"image": "../media/atree/connect_angle.png", "connector": true, "rotate": 270, "row": 32, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 33, "col": 5},
|
||||||
|
{"title": "Text", "desc": "desc", "image": "../media/atree/node.png", "connector": false, "row": 33, "col": 8},
|
||||||
|
]
|
||||||
|
}
|
|
@ -56,6 +56,7 @@ const attackSpeeds = ["SUPER_SLOW", "VERY_SLOW", "SLOW", "NORMAL", "FAST", "VERY
|
||||||
const baseDamageMultiplier = [ 0.51, 0.83, 1.5, 2.05, 2.5, 3.1, 4.3 ];
|
const baseDamageMultiplier = [ 0.51, 0.83, 1.5, 2.05, 2.5, 3.1, 4.3 ];
|
||||||
//0.51, 0.82, 1.50, 2.05, 2.50, 3.11, 4.27
|
//0.51, 0.82, 1.50, 2.05, 2.50, 3.11, 4.27
|
||||||
const classes = ["Warrior", "Assassin", "Mage", "Archer", "Shaman"];
|
const classes = ["Warrior", "Assassin", "Mage", "Archer", "Shaman"];
|
||||||
|
const wep_to_class = new Map([["dagger", "Assassin"], ["spear", "Warrior"], ["wand", "Mage"], ["bow", "Archer"], ["relik", "Shaman"]])
|
||||||
const tiers = ["Normal", "Unique", "Rare", "Legendary", "Fabled", "Mythic", "Set", "Crafted"] //I'm not sure why you would make a custom crafted but if you do you should be able to use it w/ the correct powder formula
|
const tiers = ["Normal", "Unique", "Rare", "Legendary", "Fabled", "Mythic", "Set", "Crafted"] //I'm not sure why you would make a custom crafted but if you do you should be able to use it w/ the correct powder formula
|
||||||
const types = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(consumableTypes).concat(tome_types).map(x => x.substring(0,1).toUpperCase() + x.substring(1));
|
const types = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(consumableTypes).concat(tome_types).map(x => x.substring(0,1).toUpperCase() + x.substring(1));
|
||||||
//weaponTypes.push("sword");
|
//weaponTypes.push("sword");
|
||||||
|
|
|
@ -147,6 +147,7 @@ function toggle_tab(tab) {
|
||||||
} else {
|
} else {
|
||||||
document.querySelector("#"+tab).style.display = "none";
|
document.querySelector("#"+tab).style.display = "none";
|
||||||
}
|
}
|
||||||
|
console.log(document.querySelector("#"+tab).style.display);
|
||||||
}
|
}
|
||||||
|
|
||||||
// toggle spell arrow
|
// toggle spell arrow
|
||||||
|
|
|
@ -178,6 +178,7 @@ class ItemInputNode extends InputNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
compute_func(input_map) {
|
compute_func(input_map) {
|
||||||
|
console.log("Item update...." + Date.now());
|
||||||
const powdering = input_map.get('powdering');
|
const powdering = input_map.get('powdering');
|
||||||
|
|
||||||
// built on the assumption of no one will type in CI/CR letter by letter
|
// built on the assumption of no one will type in CI/CR letter by letter
|
||||||
|
@ -323,6 +324,20 @@ class WeaponInputDisplayNode extends ComputeNode {
|
||||||
|
|
||||||
const type = item.statMap.get('type');
|
const type = item.statMap.get('type');
|
||||||
this.image.setAttribute('src', '../media/items/new/generic-'+type+'.png');
|
this.image.setAttribute('src', '../media/items/new/generic-'+type+'.png');
|
||||||
|
|
||||||
|
//as of now, we NEED to have the dropdown tab visible/not hidden in order to properly display atree stuff.
|
||||||
|
if (!document.getElementById("toggle-atree").classList.contains("toggleOn")) {
|
||||||
|
toggle_tab('atree-dropdown');
|
||||||
|
toggleButton('toggle-atree');
|
||||||
|
}
|
||||||
|
|
||||||
|
//for some reason we have to cast to string
|
||||||
|
construct_AT(document.getElementById("atree-ui"), atrees[wep_to_class.get(type)]);
|
||||||
|
|
||||||
|
if (document.getElementById("toggle-atree").classList.contains("toggleOn")) {
|
||||||
|
toggle_tab('atree-dropdown');
|
||||||
|
toggleButton('toggle-atree');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -139,8 +139,8 @@ class InputNode extends ComputeNode {
|
||||||
constructor(name, input_field) {
|
constructor(name, input_field) {
|
||||||
super(name);
|
super(name);
|
||||||
this.input_field = input_field;
|
this.input_field = input_field;
|
||||||
this.input_field.addEventListener("input", () => calcSchedule(this, 5000));
|
this.input_field.addEventListener("input", () => calcSchedule(this, 500));
|
||||||
this.input_field.addEventListener("change", () => calcSchedule(this, 500));
|
this.input_field.addEventListener("change", () => calcSchedule(this, 5));
|
||||||
//calcSchedule(this); Manually fire first update for better control
|
//calcSchedule(this); Manually fire first update for better control
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
218
js/display_atree.js
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
let atree_map;
|
||||||
|
let atree_connectors_map;
|
||||||
|
function construct_AT(elem, tree) {
|
||||||
|
console.log("constructing ability tree UI");
|
||||||
|
document.getElementById("atree-active").innerHTML = ""; //reset all atree actives - should be done in a more general way later
|
||||||
|
elem.innerHTML = ""; //reset the atree in the DOM
|
||||||
|
|
||||||
|
if (tree === undefined) {return false;}
|
||||||
|
|
||||||
|
// add in the "Active" title to atree
|
||||||
|
let active_row = document.createElement("div");
|
||||||
|
active_row.classList.add("row", "item-title", "mx-auto", "justify-content-center");
|
||||||
|
active_row.textContent = "Active:";
|
||||||
|
document.getElementById("atree-active").appendChild(active_row);
|
||||||
|
|
||||||
|
atree_map = new Map();
|
||||||
|
atree_connectors_map = new Map()
|
||||||
|
for (let i of tree) {
|
||||||
|
atree_map.set(i.display_name, {display: i.display, parents: i.parents, connectors: []});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < tree.length; i++) {
|
||||||
|
let node = tree[i];
|
||||||
|
|
||||||
|
// create rows if not exist
|
||||||
|
let missing_rows = [node.display.row];
|
||||||
|
|
||||||
|
for (let parent of node.parents) {
|
||||||
|
missing_rows.push(tree.find(object => {return object.display_name === parent;}).display.row);
|
||||||
|
}
|
||||||
|
for (let missing_row of missing_rows) {
|
||||||
|
if (document.getElementById("atree-row-" + missing_row) == null) {
|
||||||
|
for (let j = 0; j <= missing_row; j++) {
|
||||||
|
if (document.getElementById("atree-row-" + j) == null) {
|
||||||
|
let row = document.createElement('div');
|
||||||
|
row.classList.add("row");
|
||||||
|
row.id = "atree-row-" + j;
|
||||||
|
//was causing atree rows to be 0 height
|
||||||
|
row.style.minHeight = elem.scrollWidth / 9 + "px";
|
||||||
|
//row.style.minHeight = elem.getBoundingClientRect().width / 9 + "px";
|
||||||
|
|
||||||
|
for (let k = 0; k < 9; k++) {
|
||||||
|
col = document.createElement('div');
|
||||||
|
col.classList.add('col', 'px-0');
|
||||||
|
col.style.minHeight = elem.scrollWidth / 9 + "px";
|
||||||
|
row.appendChild(col);
|
||||||
|
|
||||||
|
atree_connectors_map.set(j + "," + k, [])
|
||||||
|
};
|
||||||
|
elem.appendChild(row);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let connector_list = [];
|
||||||
|
// create connectors based on parent location
|
||||||
|
for (let parent of node.parents) {
|
||||||
|
let parent_node = atree_map.get(parent);
|
||||||
|
|
||||||
|
let connect_elem = document.createElement("div");
|
||||||
|
connect_elem.style = "background-size: cover; width: 100%; height: 100%;";
|
||||||
|
// connect up
|
||||||
|
for (let i = node.display.row - 1; i > parent_node.display.row; i--) {
|
||||||
|
let connector = connect_elem.cloneNode();
|
||||||
|
connector.style.backgroundImage = "url('../media/atree/connect_line.png')";
|
||||||
|
atree_map.get(node.display_name).connectors.push(i + "," + node.display.col);
|
||||||
|
atree_connectors_map.get(i + "," + node.display.col).push({connector: connector, type: "line"});
|
||||||
|
resolve_connector(i + "," + node.display.col, node);
|
||||||
|
}
|
||||||
|
// connect horizontally
|
||||||
|
let min = Math.min(parent_node.display.col, node.display.col);
|
||||||
|
let max = Math.max(parent_node.display.col, node.display.col);
|
||||||
|
for (let i = min + 1; i < max; i++) {
|
||||||
|
let connector = connect_elem.cloneNode();
|
||||||
|
connector.style.backgroundImage = "url('../media/atree/connect_line.png')";
|
||||||
|
connector.classList.add("rotate-90");
|
||||||
|
atree_map.get(node.display_name).connectors.push(parent_node.display.row + "," + i);
|
||||||
|
atree_connectors_map.get(parent_node.display.row + "," + i).push({connector: connector, type: "line"});
|
||||||
|
resolve_connector(parent_node.display.row + "," + i, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
// connect corners
|
||||||
|
|
||||||
|
if (parent_node.display.row != node.display.row && parent_node.display.col != node.display.col) {
|
||||||
|
let connector = connect_elem.cloneNode();
|
||||||
|
connector.style.backgroundImage = "url('../media/atree/connect_angle.png')";
|
||||||
|
atree_map.get(node.display_name).connectors.push(parent_node.display.row + "," + node.display.col);
|
||||||
|
atree_connectors_map.get(parent_node.display.row + "," + node.display.col).push({connector: connector, type: "angle"});
|
||||||
|
if (parent_node.display.col > node.display.col) {
|
||||||
|
connector.classList.add("rotate-180");
|
||||||
|
}
|
||||||
|
else {// if (parent_node.display.col < node.display.col && (parent_node.display.row != node.display.row)) {
|
||||||
|
connector.classList.add("rotate-270");
|
||||||
|
}
|
||||||
|
resolve_connector(parent_node.display.row + "," + node.display.col, node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create node
|
||||||
|
let node_elem = document.createElement('div')
|
||||||
|
node_elem.style = "background-image: url('../media/atree/node.png'); background-size: cover; width: 100%; height: 100%;";
|
||||||
|
|
||||||
|
// add tooltip
|
||||||
|
node_elem.addEventListener('mouseover', function(e) {
|
||||||
|
if (e.target !== this) {return;}
|
||||||
|
let tooltip = this.children[0];
|
||||||
|
tooltip.style.top = this.getBoundingClientRect().bottom + window.scrollY * 1.02 + "px";
|
||||||
|
tooltip.style.left = this.parentElement.parentElement.getBoundingClientRect().left + (elem.getBoundingClientRect().width * .2 / 2) + "px";
|
||||||
|
tooltip.style.display = "block";
|
||||||
|
});
|
||||||
|
|
||||||
|
node_elem.addEventListener('mouseout', function(e) {
|
||||||
|
if (e.target !== this) {return;}
|
||||||
|
let tooltip = this.children[0];
|
||||||
|
tooltip.style.display = "none";
|
||||||
|
});
|
||||||
|
|
||||||
|
node_elem.classList.add("fake-button");
|
||||||
|
|
||||||
|
let active_tooltip = document.createElement('div');
|
||||||
|
active_tooltip.classList.add("rounded-bottom", "dark-7", "border", "mb-2", "mx-auto");
|
||||||
|
//was causing active element boxes to be 0 width
|
||||||
|
// active_tooltip.style.width = elem.getBoundingClientRect().width * .80 + "px";
|
||||||
|
active_tooltip.style.display = "none";
|
||||||
|
|
||||||
|
// tooltip text formatting
|
||||||
|
|
||||||
|
let active_tooltip_title = document.createElement('b');
|
||||||
|
active_tooltip_title.classList.add("scaled-font");
|
||||||
|
active_tooltip_title.innerHTML = node.display_name;
|
||||||
|
|
||||||
|
let active_tooltip_text = document.createElement('p');
|
||||||
|
active_tooltip_text.classList.add("scaled-font-sm");
|
||||||
|
active_tooltip_text.textContent = node.desc;
|
||||||
|
|
||||||
|
active_tooltip.appendChild(active_tooltip_title);
|
||||||
|
active_tooltip.appendChild(active_tooltip_text);
|
||||||
|
|
||||||
|
node_tooltip = active_tooltip.cloneNode(true);
|
||||||
|
|
||||||
|
active_tooltip.id = "atree-ab-" + node.display_name.replaceAll(" ", "");
|
||||||
|
|
||||||
|
node_tooltip.style.position = "absolute";
|
||||||
|
node_tooltip.style.zIndex = "100";
|
||||||
|
|
||||||
|
node_elem.appendChild(node_tooltip);
|
||||||
|
document.getElementById("atree-active").appendChild(active_tooltip);
|
||||||
|
|
||||||
|
node_elem.addEventListener('click', function(e) {
|
||||||
|
if (e.target !== this) {return;}
|
||||||
|
let tooltip = document.getElementById("atree-ab-" + node.display_name.replaceAll(" ", ""));
|
||||||
|
if (tooltip.style.display == "block") {
|
||||||
|
tooltip.style.display = "none";
|
||||||
|
this.classList.remove("atree-selected");
|
||||||
|
this.style.backgroundImage = 'url("../media/atree/node.png")';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tooltip.style.display = "block";
|
||||||
|
this.classList.add("atree-selected");
|
||||||
|
this.style.backgroundImage = 'url("../media/atree/node-selected.png")';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById("atree-row-" + node.display.row).children[node.display.col].appendChild(node_elem);
|
||||||
|
};
|
||||||
|
|
||||||
|
atree_render_connection();
|
||||||
|
};
|
||||||
|
|
||||||
|
// resolve connector conflict
|
||||||
|
function resolve_connector(pos, node) {
|
||||||
|
if (atree_connectors_map.get(pos).length < 2) {return false;}
|
||||||
|
|
||||||
|
let line = false;
|
||||||
|
let angle = false;
|
||||||
|
let t = false;
|
||||||
|
for (let i of atree_connectors_map.get(pos)) {
|
||||||
|
if (i.type == "line") {
|
||||||
|
line += true;
|
||||||
|
} else if (i.type == "angle") {
|
||||||
|
angle += true;
|
||||||
|
} else if (i.type == "t") {
|
||||||
|
t += true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let connect_elem = document.createElement("div");
|
||||||
|
|
||||||
|
if ((line && angle)) {
|
||||||
|
connect_elem.style = "background-image: url('../media/atree/connect_t.png'); background-size: cover; width: 100%; height: 100%;"
|
||||||
|
connect_elem.classList.add("rotate-180")
|
||||||
|
atree_connectors_map.set(pos, [{connector: connect_elem, type: "t"}])
|
||||||
|
}
|
||||||
|
if (node.parents.length == 3 && t && atree_same_row(node)) {
|
||||||
|
connect_elem.style = "background-image: url('../media/atree/connect_c.png'); background-size: cover; width: 100%; height: 100%;"
|
||||||
|
atree_connectors_map.set(pos, [{connector: connect_elem, type: "c"}])
|
||||||
|
}
|
||||||
|
// override the conflict with the first children
|
||||||
|
atree_connectors_map.set(pos, [atree_connectors_map.get(pos)[0]])
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if a node doesn't have same row w/ its parents (used to solve conflict)
|
||||||
|
function atree_same_row(node) {
|
||||||
|
for (let i of node.parents) {
|
||||||
|
if (node.display.row == atree_map.get(i).display.row) { return false; }
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the connector onto the screen
|
||||||
|
function atree_render_connection() {
|
||||||
|
for (let i of atree_connectors_map.keys()) {
|
||||||
|
if (atree_connectors_map.get(i).length != 0) {
|
||||||
|
document.getElementById("atree-row-" + i.split(",")[0]).children[i.split(",")[1]].appendChild(atree_connectors_map.get(i)[0].connector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
media/atree/connect_angle.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
media/atree/connect_c.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
media/atree/connect_line.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
media/atree/connect_t.png
Normal file
After Width: | Height: | Size: 692 B |
BIN
media/atree/node-blocked.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
media/atree/node-selected.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
media/atree/node.png
Normal file
After Width: | Height: | Size: 2.7 KiB |