diff --git a/frontend/src/pages/testDartPickerPage.vue b/frontend/src/pages/testDartPickerPage.vue index 68497f4..0e0af3e 100644 --- a/frontend/src/pages/testDartPickerPage.vue +++ b/frontend/src/pages/testDartPickerPage.vue @@ -8,6 +8,8 @@

X: {{ posRelative.top }} | Y: {{ posRelative.left }}

distance: {{ distanceFromCenter }} | dartRing: {{ dartRing }}

+

degrees: {{ degrees }}° | field: {{ field }}

+

id: {{ selected.id }} | name: {{ selected.name }} | points: {{ selected.points }}

@@ -17,10 +19,359 @@ import { ref } from 'vue' -const pos = ref({ top: 0, left: 0 }) -const posRelative = ref({ top: 0, left: 0 }) +const pos = ref({ top: null, left: null }) +const posRelative = ref({ top: null, left: null }) const distanceFromCenter = ref(null) const dartRing = ref(null) +const degrees = ref(null) +const field = ref(null) +const selected = ref({ id: null, name: null, points: null }) + +const fields = { + // + // Middle + // + 0: { + name: "Bulls Eye", + points: 50 + }, + 1: { + name: "Bull", + points: 25 + }, + // + // 1 Ring + // + 100: { + name: "20", + points: 20 + }, + 101: { + name: "1", + points: 1 + }, + 102: { + name: "18", + points: 18 + }, + 103: { + name: "4", + points: 4 + }, + 104: { + name: "13", + points: 13 + }, + 105: { + name: "6", + points: 6 + }, + 106: { + name: "10", + points: 10 + }, + 107: { + name: "15", + points: 15 + }, + 108: { + name: "2", + points: 2 + }, + 109: { + name: "17", + points: 17 + }, + 110: { + name: "3", + points: 3 + }, + 111: { + name: "19", + points: 19 + }, + 112: { + name: "7", + points: 7 + }, + 113: { + name: "16", + points: 16 + }, + 114: { + name: "8", + points: 8 + }, + 115: { + name: "11", + points: 11 + }, + 116: { + name: "14", + points: 14 + }, + 117: { + name: "9", + points: 9 + }, + 118: { + name: "12", + points: 12 + }, + 119: { + name: "5", + points: 5 + }, + // + // 2 Ring + // + 200: { + name: "Trebel 20", + points: 20 + }, + 201: { + name: "Trebel 1", + points: 1 + }, + 202: { + name: "Trebel 18", + points: 18 + }, + 203: { + name: "Trebel 4", + points: 4 + }, + 204: { + name: "Trebel 13", + points: 13 + }, + 205: { + name: "Trebel 6", + points: 6 + }, + 206: { + name: "Trebel 10", + points: 10 + }, + 207: { + name: "Trebel 15", + points: 15 + }, + 208: { + name: "Trebel 2", + points: 2 + }, + 209: { + name: "Trebel 17", + points: 17 + }, + 210: { + name: "Trebel 3", + points: 3 + }, + 211: { + name: "Trebel 19", + points: 19 + }, + 212: { + name: "Trebel 7", + points: 7 + }, + 213: { + name: "Trebel 16", + points: 16 + }, + 214: { + name: "Trebel 8", + points: 8 + }, + 215: { + name: "Trebel 11", + points: 11 + }, + 216: { + name: "Trebel 14", + points: 14 + }, + 217: { + name: "Trebel 9", + points: 9 + }, + 218: { + name: "Trebel 12", + points: 12 + }, + 219: { + name: "Trebel 5", + points: 5 + }, + // + // 3 Ring + // + 300: { + name: "20", + points: 20 + }, + 301: { + name: "1", + points: 1 + }, + 302: { + name: "18", + points: 18 + }, + 303: { + name: "4", + points: 4 + }, + 304: { + name: "13", + points: 13 + }, + 305: { + name: "6", + points: 6 + }, + 306: { + name: "10", + points: 10 + }, + 307: { + name: "15", + points: 15 + }, + 308: { + name: "2", + points: 2 + }, + 309: { + name: "17", + points: 17 + }, + 310: { + name: "3", + points: 3 + }, + 311: { + name: "19", + points: 19 + }, + 312: { + name: "7", + points: 7 + }, + 313: { + name: "16", + points: 16 + }, + 314: { + name: "8", + points: 8 + }, + 315: { + name: "11", + points: 11 + }, + 316: { + name: "14", + points: 14 + }, + 317: { + name: "9", + points: 9 + }, + 318: { + name: "12", + points: 12 + }, + 319: { + name: "5", + points: 5 + }, + // + // 4 Ring + // + 400: { + name: "Double 20", + points: 20 + }, + 401: { + name: "Double 1", + points: 1 + }, + 402: { + name: "Double 18", + points: 18 + }, + 403: { + name: "Double 4", + points: 4 + }, + 404: { + name: "Double 13", + points: 13 + }, + 405: { + name: "Double 6", + points: 6 + }, + 406: { + name: "Double 10", + points: 10 + }, + 407: { + name: "Double 15", + points: 15 + }, + 408: { + name: "Double 2", + points: 2 + }, + 409: { + name: "Double 17", + points: 17 + }, + 410: { + name: "Double 3", + points: 3 + }, + 411: { + name: "Double 19", + points: 19 + }, + 412: { + name: "Double 7", + points: 7 + }, + 413: { + name: "Double 16", + points: 16 + }, + 414: { + name: "Double 8", + points: 8 + }, + 415: { + name: "Double 11", + points: 11 + }, + 416: { + name: "Double 14", + points: 14 + }, + 417: { + name: "Double 9", + points: 9 + }, + 418: { + name: "Double 12", + points: 12 + }, + 419: { + name: "Double 5", + points: 5 + }, +} function distanceBetween(x1, y1, x2, y2) { const dx = x2 - x1; @@ -29,6 +380,16 @@ function distanceBetween(x1, y1, x2, y2) { return Math.sqrt(dx * dx + dy * dy); } +function degreesBetweenPoints(x1, y1, x2, y2) { + let degrees = Math.atan2(y2 - y1, x2 - x1) * (180 / Math.PI) + degrees = degrees - 90 + 18/2 + if (degrees < 0) degrees += 360 + return degrees + // Damit ich nicht vergesse woher die zahlen kommen 😅: + // 90 da sonst die 0° rechts währe + // 18 da 360° / 20 (Dart hat 20 felder rund um wehn ich zhälen kann) + // /2 da um ein halbes feld zurück zu gehen da ich zu fauel bin das später mit einzurechen :D +} function onPan({ position, isFinal }) { const offset = -50; @@ -47,24 +408,52 @@ function onPan({ position, isFinal }) { posRelative.value.left = Math.round(position.left - centerLeft) const distance = distanceBetween(pos.value.left, pos.value.top, centerLeft, centerTop) + degrees.value = degreesBetweenPoints(pos.value.left, pos.value.top, centerLeft, centerTop) + field.value = Math.floor(degrees.value/18) if (distance < dartRect.height / 2) { distanceFromCenter.value = distance + var id + // ich muss noch die richtigen werte aus der svg ausrechnen :C if (distance < dartRect.height / 45) { dartRing.value = 0 + id = String(0) + } else if (distance < dartRect.height / 20) { dartRing.value = 1 + id = String(1) + } else if (distance < dartRect.height / 3.5) { dartRing.value = 2 + id = String(1) + if (field.value < 10) id = id + String(0) + id = id + String(field.value) + } else if (distance < dartRect.height / 3.2) { dartRing.value = 3 + id = String(2) + if (field.value < 10) id = id + String(0) + id = id + String(field.value) + } else if (distance < dartRect.height / 2.16) { dartRing.value = 4 + id = String(3) + if (field.value < 10) id = id + String(0) + id = id + String(field.value) + } else if (distance < dartRect.height) { dartRing.value = 5 + id = String(4) + if (field.value < 10) id = id + String(0) + id = id + String(field.value) + } + selected.value.id = id + selected.value.name = fields[Number(id)].name + selected.value.points = fields[Number(id)].points + } else { distanceFromCenter.value = null dartRing.value = null