From 9e923a5dc6709d80ae28f219e28908cd4d78dbc6 Mon Sep 17 00:00:00 2001 From: Ugo Finnendahl Date: Fri, 18 Oct 2024 14:58:08 +0200 Subject: [PATCH] add double in --- assets/js/components/dialog.js | 1 + assets/js/components/init.js | 6 +- .../{playerselect.js => playerSelect.js} | 0 assets/js/components/select.js | 28 + assets/js/views/home.js | 9 - assets/js/views/xoi.js.bak | 499 -------------- assets/js/views/xoi/logic.js | 19 +- assets/js/views/xoi/main.js | 70 +- .../1_summer-slam/54kd4kbk/xoi.txt | 0 .../1_summer-slam/7nykca7i/xoi.txt | 0 .../1_summer-slam/her1fj3r/xoi.txt | 0 .../1_summer-slam/jm4ju7pi/xoi.txt | 0 .../1_summer-slam/l0j8jkts/xoi.txt | 0 .../1_summer-slam/lsng5wlg/xoi.txt | 0 .../1_summer-slam/m7tb5bac/xoi.txt | 0 .../1_summer-slam/mxkfs1yq/xoi.txt | 0 .../1_summer-slam/osbkse46/xoi.txt | 0 .../1_summer-slam/rtjuyvsv/xoi.txt | 0 .../1_summer-slam/tournament.txt | 0 .../1_summer-slam/z7nvffvf/xoi.txt | 0 .../2_spring-break/13tntlfj/xoi.txt | 0 .../2_spring-break/3flmnq6b/xoi.txt | 0 .../2_spring-break/cbwvnzxm/xoi.txt | 0 .../2_spring-break/cutywjod/xoi.txt | 0 .../2_spring-break/kkchbr4a/xoi.txt | 0 .../2_spring-break/ovcmf1c0/xoi.txt | 0 .../2_spring-break/sbggpar6/xoi.txt | 0 .../2_spring-break/tournament.txt | 0 .../2_spring-break/utbpew7l/xoi.txt | 0 .../2_spring-break/zxlkihnz/xoi.txt | 0 .../3_wm/1_1-runde/xoi.txt | 0 .../3_wm/2_2-runde/xoi.txt | 0 .../3_wm/3_3-runde/xoi.txt | 0 .../3_wm/tournament.txt | 0 .../4_liga/0tdcwlko/xoi.txt | 0 .../4_liga/1csevwpm/xoi.txt | 0 .../4_liga/5s62p5jp/xoi.txt | 0 .../4_liga/a4iulyd5/xoi.txt | 0 .../4_liga/a9z1tmvh/xoi.txt | 0 .../4_liga/anobo58l/xoi.txt | 0 .../4_liga/cqeaezmg/xoi.txt | 0 .../4_liga/eiwqlmue/xoi.txt | 0 .../4_liga/eqwdsia4/xoi.txt | 0 .../4_liga/gp3pj38u/xoi.txt | 0 .../4_liga/iat8cs7j/xoi.txt | 0 .../4_liga/ix1srhrk/xoi.txt | 0 .../4_liga/jajnvwbu/xoi.txt | 0 .../4_liga/kdcqpxs1/xoi.txt | 0 .../4_liga/lziuhybw/xoi.txt | 0 .../4_liga/mcjcgkbg/xoi.txt | 0 .../4_liga/olf1bjdm/xoi.txt | 0 .../4_liga/ovasmz7s/xoi.txt | 0 .../4_liga/sfln9xej/xoi.txt | 0 .../4_liga/sgl9kqvo/xoi.txt | 0 .../4_liga/tournament.txt | 2 +- .../4_liga/uslfpwja/xoi.txt | 0 .../4_liga/ut3juonn/xoi.txt | 0 .../4_liga/vmxmfxxs/xoi.txt | 0 .../4_liga/wksontke/xoi.txt | 0 .../4_liga/wuhzwter/xoi.txt | 0 .../4_liga/ypt4e90v/xoi.txt | 0 .../4_liga/zavij0ox/xoi.txt | 0 .../1_2024/5_autumn-grand-prix/tournament.txt | 25 + .../5_autumn-grand-prix/wokuqp02/xoi.txt | 52 ++ .../{1_season-2024 => 1_2024}/season.txt | 0 .../1_season-2024/4_liga/ni9jxqdn/xoi.txt | 41 -- site/models/season.php | 2 +- site/models/xoi.php | 610 +++++++++--------- 68 files changed, 502 insertions(+), 862 deletions(-) rename assets/js/components/{playerselect.js => playerSelect.js} (100%) create mode 100644 assets/js/components/select.js delete mode 100644 assets/js/views/xoi.js.bak rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/54kd4kbk/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/7nykca7i/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/her1fj3r/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/jm4ju7pi/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/l0j8jkts/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/lsng5wlg/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/m7tb5bac/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/mxkfs1yq/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/osbkse46/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/rtjuyvsv/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/tournament.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/1_summer-slam/z7nvffvf/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/13tntlfj/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/3flmnq6b/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/cbwvnzxm/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/cutywjod/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/kkchbr4a/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/ovcmf1c0/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/sbggpar6/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/tournament.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/utbpew7l/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/2_spring-break/zxlkihnz/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/3_wm/1_1-runde/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/3_wm/2_2-runde/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/3_wm/3_3-runde/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/3_wm/tournament.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/0tdcwlko/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/1csevwpm/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/5s62p5jp/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/a4iulyd5/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/a9z1tmvh/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/anobo58l/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/cqeaezmg/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/eiwqlmue/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/eqwdsia4/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/gp3pj38u/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/iat8cs7j/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/ix1srhrk/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/jajnvwbu/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/kdcqpxs1/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/lziuhybw/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/mcjcgkbg/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/olf1bjdm/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/ovasmz7s/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/sfln9xej/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/sgl9kqvo/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/tournament.txt (96%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/uslfpwja/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/ut3juonn/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/vmxmfxxs/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/wksontke/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/wuhzwter/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/ypt4e90v/xoi.txt (100%) rename content/2_seasons/{1_season-2024 => 1_2024}/4_liga/zavij0ox/xoi.txt (100%) create mode 100644 content/2_seasons/1_2024/5_autumn-grand-prix/tournament.txt create mode 100644 content/2_seasons/1_2024/5_autumn-grand-prix/wokuqp02/xoi.txt rename content/2_seasons/{1_season-2024 => 1_2024}/season.txt (100%) delete mode 100644 content/2_seasons/1_season-2024/4_liga/ni9jxqdn/xoi.txt diff --git a/assets/js/components/dialog.js b/assets/js/components/dialog.js index 569e43d..4391e0a 100644 --- a/assets/js/components/dialog.js +++ b/assets/js/components/dialog.js @@ -10,6 +10,7 @@ export default { const handlers = [ArrowHorizontalKeyHandler]; if (props.withshortkey) { handlers.push(NumberKeyHandler); + console.log(handlers); } handleActive(props, handlers); const elements = computed(() => props.buttons.map((i) => { i.onClick = () => emit('resolve', i.result ); return i; }) ); diff --git a/assets/js/components/init.js b/assets/js/components/init.js index dd4e3bc..e1d9041 100644 --- a/assets/js/components/init.js +++ b/assets/js/components/init.js @@ -5,7 +5,8 @@ import plainElem from "./plainElem.js"; import squareElem from "./squareElem.js"; import inputElem from "./inputElem.js"; -import playerselect from "./playerselect.js"; +import playerSelect from "./playerSelect.js"; +import select from "./select.js"; // import overlay from "./overlay.js"; import dialog from "./dialog.js"; @@ -16,7 +17,8 @@ export default (app) => { app.component("d-plainElem", plainElem); app.component("d-squareElem", squareElem); app.component("d-inputElem", inputElem); + app.component("d-select", select); - app.component("d-playerselect", playerselect); + app.component("d-playerSelect", playerSelect); app.component("d-dialog", dialog); } diff --git a/assets/js/components/playerselect.js b/assets/js/components/playerSelect.js similarity index 100% rename from assets/js/components/playerselect.js rename to assets/js/components/playerSelect.js diff --git a/assets/js/components/select.js b/assets/js/components/select.js new file mode 100644 index 0000000..cb63f04 --- /dev/null +++ b/assets/js/components/select.js @@ -0,0 +1,28 @@ +import { nextTick, reactive, ref, computed, onMounted, onUnmounted } from "vue"; +import { handleActive, ArrowVerticalKeyHandler, ArrowHorizontalKeyHandler, NumberKeyHandler } from "../handlers.js"; + +const html = (v) => { return v[0] }; + +export default { + props: ['options', 'title', 'stack', 'active', 'input'], + setup(props, context) { + handleActive(props, [ArrowVerticalKeyHandler]); + const children = computed(() => { + return props.options.map((o) => { + return { + component: "d-plainElem", + props: {"text": o}, + onClick: () => { + context.emit('resolve', o); + } + } + }) + }); + return { children } + }, + template: html` +
+ +
+ ` +} diff --git a/assets/js/views/home.js b/assets/js/views/home.js index d791f66..ecccc05 100644 --- a/assets/js/views/home.js +++ b/assets/js/views/home.js @@ -17,15 +17,6 @@ export const selectMode = { const children = reactive([ { - // component: "d-squareElem", - // props:{ - // text: "Create Game", - // icon: "/assets/img/dart-board.svg", - // }, - // onClick: () => { - // emit("resolve", "create"); - // } - // }, { component: "d-squareElem", props:{ text: "Play Game", diff --git a/assets/js/views/xoi.js.bak b/assets/js/views/xoi.js.bak deleted file mode 100644 index 87236b8..0000000 --- a/assets/js/views/xoi.js.bak +++ /dev/null @@ -1,499 +0,0 @@ -import { nextTick, reactive, ref, computed, onMounted, onUnmounted } from "vue"; -import { state } from "../stateMgr.js"; -import { getQuery } from "../kirby.js"; -import { initSubState, ArrowVerticalKeyHandler, ArrowHorizontalKeyHandler, NumberKeyHandler } from "../handlers.js"; - - -const html = (v) => { return v[0] }; - -function initView(view){ - const back = state.view; - state.back.push(() => { state.view = back }); - state.backActive.push(state.activeIndex); - state.view = view; -} - -const togo = { - props: ['togo'], - setup(props) { - - return { } - }, - template: html` -
{{ togo }}
- ` -} - -const game = { - props: ['players', 'currentleg', 'max', 'sendvisit', 'modelValue', 'overlay'], - setup(props, context) { - const length = computed(() => props.currentleg?.visits.length ); - const visits = computed(() => props.currentleg? props.currentleg.visits:undefined ); - const loop = computed(() => Math.max(length.value?length.value+(length.value?length.value%2:0):0,18) ); - const getPlayerVisits = (uuid) => { - const vs = visits.value.filter((v) => v.player == uuid); - if (vs.length < 9) { - for (var i = vs.length; i < 9; i++) { - vs.push({ "sum": "", "toGo":["",""]}) - } - } else if (vs.length*2 < visits.value.length) { - - vs.push({ "sum": "", "toGo":["",""]}); - } - return vs; - } - const check_remove = (event) => { - if (!event.repeat && event.target.value.length < 1) { - context.emit('removeLastVisit', event.target); - } - } - const setup = ref(false); - const setupEnter = () => { - setup.value = true; - } - const confirmEnter = (evt) => { - if (setup.value) { - context.emit('sendvisit', evt.target) - } - setup.value = false; - } - return { length, visits, loop, getPlayerVisits, check_remove, confirmEnter, setupEnter } - }, - template: html` -
-
-
Points
-
ToGo
-
Round
-
Points
-
ToGo
-
-
-
-
{{ max }}
-
0
-
-
{{ max }}
- -
-
- ` -} - -const overlay = { - props: ['data'], - setup(props, context) { - const keyhandler = (event) => { - ArrowHorizontalKeyHandler(event); - NumberKeyHandler(event); - if (event.key == "Escape") { - context.emit("closeOverlay") - } - } - return { keyhandler } - }, - template: html` -
-
-

{{ data.title }}

-

{{ data.text }}

-
- -
-
-
- ` -} - -const score = { - props: ['page', 'justlegs', 'currentset', 'currentleg'], - setup(props) { - return { } - }, - template: html` -
-
-

{{ currentset?.points[idx] }}

-
-

Best of {{ page?.sets }}

-

Sets

-
-
-
-

{{ currentleg?.points[idx] }}

-
-

Best of {{ page?.legs }}

-

Legs

-
-
-
- ` -} - -const player = { - props: ['player', 'stats', "id"], - setup(props) { - const current_set = computed( () => props.stats?.sets[props.stats.sets.length-1]); - const current_leg = computed( () => current_set.value?.legs[current_set.value.legs.length-1]); - const getAverage = (avg) => { - return avg && avg[1] != 0 ? ((3*avg[0])/avg[1]).toFixed(1) : "-"; - } - const getCheckout = (checkout) => { - return checkout && checkout[1] != 0 ? Math.round(1000*checkout[0]/checkout[1])/10 : "- " - } - const getMax = (checkouts) => { - if (checkouts && checkouts.length != 0) { - return Math.max(...checkouts); - } - return "-" - } - return { current_set, current_leg, getAverage, getCheckout, getMax } - }, - template: html` -
- -

{{ player?.forename }} {{ player?.surname }}

-

{{ player?.nickname }}

-
-
-
Stat
Match
Leg
-
-
-
Average:
{{ getAverage(stats?.stats[id].average) }}
{{ getAverage(current_leg?.stats[id].average) }}
-
-
-
First 9:
{{ getAverage(stats?.stats[id].first9) }}
{{ getAverage(current_leg?.stats[id].first9) }}
-
-
-
60+:
{{ stats?.stats[id]["60+"] }}
{{ current_leg?.stats[id]["60+"] }}
-
-
-
100+:
{{ stats?.stats[id]["100+"] }}
{{ current_leg?.stats[id]["100+"] }}
-
-
-
140+:
{{ stats?.stats[id]["140+"] }}
{{ current_leg?.stats[id]["140+"] }}
-
-
-
180:
{{ stats?.stats[id]["180"] }}
{{ current_leg?.stats[id]["180"] }}
-
-
-
Checkouts:
{{ getCheckout(stats?.stats[id].checkouts) }}%
-
-
-
Best Checkout:
{{ getMax(stats?.stats[id].checkoutPoints) }}
-
-
-
- ` -} - - -export const xoi = { - components: { - "d-togo": togo, - "d-score": score, - "d-game": game, - "d-player": player, - "d-overlay": overlay - }, - setup(props, context) { - let page = ref(); - const updateGame = (reset) => { - getQuery(`site.find('${state.id}')`, { - select: { - title: "page.title", - id: "page.id", - modus: "page.max", - game: "page.rounds.parseJSON", - stats: "page.stats.parseJSON", - sets: "page.sets", - legs: "page.legs", - players: { - query: "page.players.toPages", - select:{ - forename: "page.forename", - surname: "page.surname", - nickname: "page.nickname", - uuid: "page.uuid", - img: "page.pic.toFile?.url" - } - } - } - }).then((res) => { - page.value = res; - if (reset != undefined) { - current_input.value = reset; - } - if (res.stats.winner){ - console.log(res.stats); - let winner = "Draw"; - if (res.players[0].uuid == res.stats.winner){ - winner = res.players[0].forename; - } else if (res.players[1].uuid == res.stats.winner) { - winner = res.players[1].forename; - } - overlay.value = { - "title": "Game Ended", - "text": `The winner is ${winner}`, - "buttons": [] - }; - } - }); - }; - updateGame(); - - let game = computed(() => page.value ? page.value.game: undefined) - let current_set = computed(() => { - if (game.value != undefined) { - return game.value.sets[game.value.sets.length-1] - } - return undefined; - }) - let current_leg = computed(() => { - if (current_set.value != undefined) { - return current_set.value.legs[current_set.value.legs.length-1] - } - return undefined; - }) - let current_toGo = computed(() => { - if (current_leg.value != undefined) { - if (current_leg.value.visits.length < 2) { - return [page.value.modus, page.value.modus] - } else { - - return current_leg.value.visits[current_leg.value.visits.length-2].toGo; - } - } - return [0,0]; - }) - let current_set_points = computed(() => { - if (current_set.value != undefined) { - return current_set.value.points; - } - return undefined; - }); - let current_leg_points = computed(() => { - if (current_leg.value != undefined) { - return current_leg.value.points; - } - return undefined; - }); - let current_player = computed(() => { - if (current_leg.value != undefined) { - const len = current_leg.value.visits.length; - return current_leg.value.visits[len-1].player == page.value.players[1].uuid; - } - return undefined; - }); - const current_input = ref(""); - const overlay = ref(); - return { page, state, game, current_set, current_leg, current_toGo, current_set_points, current_leg_points, current_player, updateGame, current_input, overlay } - }, - methods: { - async removeLastVisit(){ - let last = this.current_leg.visits.length-2 >= 0 ? this.current_leg.visits[this.current_leg.visits.length-2].throws : [""]; - last = last.join(","); - const response = await fetch(`/${state.id}`, { - method: "POST", - cache: "no-cache", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - "action": "deleteLastThrow", - "visit": true, - }), - }); - const ret = await response.json(); - if (ret.status == "ok"){ - this.updateGame(last); - } else { - console.log(ret); - } - }, - sum(tr){ - const val = tr.trim();; - if (val == "") { - return 0; - } - if (val == "SB"){ - return 25; - } - if (val == "DB"){ - return 50; - } - if (val[0] == "S" || val[0] == "O" || val[0] == "I"){ - return parseFloat(val.substring(1)); - } - if (val[0] == "D"){ - return 2*parseFloat(val.substring(1)); - } - if (val[0] == "T"){ - return 3*parseFloat(val.substring(1)); - } - if (val[0] == "M"){ - return 0; - } else { - // TODO: Check for Na - return parseFloat(val); - } - }, - verify(sum){ - if (this.current_toGo[this.current_player*1]-sum == 0){ - return 0; - } else if (sum > 180 || [179, 178, 176, 175, 173, 172, 169, 166, 163].indexOf(sum) > -1) { - return -1 - } else if (this.current_toGo[this.current_player*1]-sum <= 50) { - return 1 - } - }, - openOverlay(overlay){ - this.overlay = overlay; - }, - closeOverlay(){ - this.overlay = undefined; - }, - checkout_question(throws){ - const buttons = []; - for (var i = 1; i <= 3; i++) { - const x = i; - buttons.push({ - "type": "input", - "props" : { - "type": "button", - "value": `${x} (${x})` - }, - "onClick": () => { - this.closeOverlay(); - this.checkouttries_question(throws, x, false); - } - }) - } - this.openOverlay({ - "title": "Congratulations!", - "text": `How many darts did you need?` , - "buttons": buttons - }); - }, - checkouttries_question(throws, numDarts, zero=true){ - const buttons = []; - for (var i = 1; i <= numDarts; i++) { - const x = i; - buttons.push({ - "type": "input", - "props" : { - "type": "button", - "value": `${x} (${x})` - }, - "autofocus": (i==1 && !zero), - "onClick": () => { - this.closeOverlay(); - this.send_visit(throws, numDarts, x) - } - }) - } - if (zero) { - buttons.push({ - "type": "input", - "props" : { - "type": "button", - "value": `0 (${numDarts+1})` - }, - "autofocus": true, - "onClick": () => { - this.closeOverlay(); - this.send_visit(throws, numDarts, 0) - } - }) - } - this.openOverlay({ - "title": "Checkout Tries", - "text": `How many tries on a Checkout?` , - "buttons": buttons - }); - }, - async send_visit(throws, numDarts=3, checkoutTries=0){ - const response = await fetch(`/${state.id}`, { - method: "POST", - cache: "no-cache", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - "action": "addThrows", - "throws": throws.value.split(","), - "checkoutTries": checkoutTries, - "numDarts": numDarts, - "done": true - }), - }); - const ret = await response.json(); - if (ret.status == "ok"){ - this.updateGame(""); - } else { - console.log(ret); - } - }, - async preprocess_visit(throws){ - const tr = throws.value.split(","); - let sum = 0; - tr.forEach((t, i) => { - sum += this.sum(t); - }); - const res = this.verify(sum); - if (res == 0){ - // Ask for num Darts - this.checkout_question(throws); - return; - } else if (res == 1){ - // Ask for checkoutTries - this.checkouttries_question(throws, 3); - return; - } else if (res == -1){ - this.openOverlay({ - "title": "Impossible", - "text": `A score of ${sum} is not possible`, - "buttons": [{ - "type": "input", - "props" : { - "type": "button", - "value": "ok" - }, - "onClick" : this.closeOverlay - }] - }); - return; - } - this.send_visit(throws); - } - }, - template: html` -
- - - - - - - - -
- ` -} - -export const initXoiView = (app) => { - app.component('d-xoi', xoi) -} diff --git a/assets/js/views/xoi/logic.js b/assets/js/views/xoi/logic.js index 59b4a2b..6ab2a95 100644 --- a/assets/js/views/xoi/logic.js +++ b/assets/js/views/xoi/logic.js @@ -153,6 +153,8 @@ export function getGameProps(page, current_set, current_leg) { return 0; } else if (current_toGo.value[current_player.value * 1] - sum <= 50) { return 1; + } else if (page.in != "Straight" && current_toGo.value[current_player.value * 1] == page.modus && sum != 0) { + return 3; } return 2; } @@ -176,6 +178,8 @@ function newPlayerStats(player) { average: [0, 0], first9: [0, 0], checkouts: [0, 0], + checkins: [0, 0], + checkinPoints: [], checkoutPoints: [], "60+": 0, "100+": 0, @@ -220,6 +224,7 @@ function newVisit(playerUUID, round) { throws: [], visit: round, checkoutTries: 0, + checkinTries: 0, numDarts: 0, }; } @@ -255,7 +260,12 @@ function updateStats(page, visit){ todos[i]["checkouts"][0] += 1; todos[i]["checkoutPoints"].push(visit["sum"]); } + if (visit["checkinTries"] != 0 && visit["sum"] != 0) { + todos[i]["checkins"][0] += 1; + todos[i]["checkinPoints"].push(visit["sum"]); + } todos[i]["checkouts"][1] += visit["checkoutTries"]; + todos[i]["checkins"][1] += visit["checkinTries"]; if (visit["sum"] == 180) { todos[i]["180"] += 1; } else if (visit["sum"] >= 140) { @@ -322,6 +332,7 @@ function clearLastVisit(page){ const ret = visit["throws"]; visit["throws"] = []; visit["checkoutTries"] = 0; + visit["checkinTries"] = 0; visit["numDarts"] = 0; delete visit["sum"]; delete visit["toGo"]; @@ -376,14 +387,15 @@ export function removeLastVisit(page){ return ret; } -export function storeVisit(page, throws, sum, numDarts, tries) { +export function storeVisit(page, throws, sum, numDarts, outTries, inTries=0) { const set = page.game.sets[page.game.sets.length-1]; const leg = set.legs[set.legs.length-1]; const visit = leg.visits[leg.visits.length-1]; visit["numDarts"] = numDarts; visit["throws"] = throws; - visit["checkoutTries"] = tries; + visit["checkoutTries"] = outTries; + visit["checkinTries"] = inTries; visit["sum"] = sum const playerUUIDs = page.players.map((p) => p.uuid); @@ -401,6 +413,9 @@ export function storeVisit(page, throws, sum, numDarts, tries) { toGo[k] = rest; } visit["toGo"] = toGo; + if (page.in != "Straight" && page.modus == toGo[k] && visit["sum"] == 0) { + visit["checkinTries"] = 3; + } // update stats updateStats(page, visit); diff --git a/assets/js/views/xoi/main.js b/assets/js/views/xoi/main.js index 5b255b9..305573a 100644 --- a/assets/js/views/xoi/main.js +++ b/assets/js/views/xoi/main.js @@ -10,7 +10,7 @@ const html = (v) => { return v[0] }; //////////////////////////////////////////////////////////////////////////////// // Components -//////////////////////////////////////////////////////////////////////////////// +//////////////////////////in////////////////////////////////////////////////////// const pregame = { props: ['page','active', 'stack'], @@ -19,14 +19,32 @@ const pregame = { const selectPlayer = async (i) => { if (props.active) { - const [result, error] = await overlayAndPop("d-playerselect", { players: props.page.participants, class:"overlay"}, props.stack); + const [result, error] = await overlayAndPop("d-playerSelect", { players: props.page.participants, class:"overlay"}, props.stack); if (error === undefined) { props.page.players[i] = result; } } } - return { selectPlayer } + const selectX01 = async () => { + if (props.active) { + const [result, error] = await overlayAndPop("d-select", { options: [ "301", "501" ], class:"overlay"}, props.stack); + if (error === undefined) { + props.page.modus = result; + } + } + } + + const selectIn = async () => { + if (props.active) { + const [result, error] = await overlayAndPop("d-select", { options: [ "Straight", "Double" ], class:"overlay"}, props.stack); + if (error === undefined) { + props.page.in = result; + } + } + } + + return { selectPlayer, selectX01, selectIn } }, template: html`