1 Commits

Author SHA1 Message Date
2077bf7cbb changes to dice-box-threejs
All checks were successful
CI / deploy (push) Successful in 5m30s
2025-02-16 17:43:57 +01:00
8 changed files with 33 additions and 82 deletions

View File

@@ -16,7 +16,6 @@
<p align="center"> <p align="center">
<img src=".github/media/preview.gif" /> <img src=".github/media/preview.gif" />
</p> </p>
--- ---
## Key Features ## Key Features
@@ -28,7 +27,6 @@
* Watch roll results (also available as Browser Source in OBS) * Watch roll results (also available as Browser Source in OBS)
--- ---
## Start Container ## Start Container
You can start dice-tower with docker compose You can start dice-tower with docker compose

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.arindy</groupId> <groupId>de.arindy</groupId>
<artifactId>dice-tower</artifactId> <artifactId>dice-tower</artifactId>
<version>1.2.3</version> <version>1.2.0-SNAPSHOT</version>
<properties> <properties>
<compiler-plugin.version>3.13.0</compiler-plugin.version> <compiler-plugin.version>3.13.0</compiler-plugin.version>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -14,17 +14,6 @@ function url() {
return window.location.protocol + '//' + window.location.hostname + (window.location.port?.length > 0 ? ':' + window.location.port : ''); return window.location.protocol + '//' + window.location.hostname + (window.location.port?.length > 0 ? ':' + window.location.port : '');
} }
function register() {
let httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url() + '/dice/' + document.getElementById('room').value + '/register')
httpRequest.setRequestHeader('Content-Type', 'application/json')
httpRequest.send(JSON.stringify({
name: document.getElementById('name').value,
overlay: document.getElementById('overlayId').value,
id: document.getElementById('room').value + ':' + localStorage.getItem('userId')
}))
}
function start(event = undefined) { function start(event = undefined) {
if ((!event || event.keyCode === 13) && document.getElementById('name').value.length > 0 && document.getElementById('room').value.length > 0) { if ((!event || event.keyCode === 13) && document.getElementById('name').value.length > 0 && document.getElementById('room').value.length > 0) {
document.getElementById('overlayId').value = url() + '/overlay/' + document.getElementById('room').value + ':' + localStorage.getItem('userId') + '?scale=10&clearAfter=30'; document.getElementById('overlayId').value = url() + '/overlay/' + document.getElementById('room').value + ':' + localStorage.getItem('userId') + '?scale=10&clearAfter=30';
@@ -72,7 +61,14 @@ function start(event = undefined) {
localStorage.setItem(document.getElementById('name').value + '-started', "true") localStorage.setItem(document.getElementById('name').value + '-started', "true")
register(); let httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url() + '/dice/' + document.getElementById('room').value + '/register')
httpRequest.setRequestHeader('Content-Type', 'application/json')
httpRequest.send(JSON.stringify({
name: document.getElementById('name').value,
overlay: document.getElementById('overlayId').value,
id: document.getElementById('room').value + ':' + localStorage.getItem('userId')
}))
if (document.getElementById('gm').checked) { if (document.getElementById('gm').checked) {
document.getElementById('resultSwitch').checked = true; document.getElementById('resultSwitch').checked = true;
document.getElementById('resultFrame').src = document.getElementById('resultsId').value; document.getElementById('resultFrame').src = document.getElementById('resultsId').value;
@@ -102,7 +98,6 @@ function start(event = undefined) {
newOverlay.appendChild(newInput); newOverlay.appendChild(newInput);
overlays.appendChild(newOverlay); overlays.appendChild(newOverlay);
if (!document.getElementById(data.id + '-diceFrame')) {
let dice = document.createElement('iframe'); let dice = document.createElement('iframe');
dice.id = data.id + '-diceFrame' dice.id = data.id + '-diceFrame'
dice.style.width = "50%"; dice.style.width = "50%";
@@ -115,8 +110,6 @@ function start(event = undefined) {
dice.style.left = "50%"; dice.style.left = "50%";
dice.src = data.overlay; dice.src = data.overlay;
document.getElementById('results-dice').appendChild(dice) document.getElementById('results-dice').appendChild(dice)
}
} }
configurePopover(); configurePopover();
@@ -132,7 +125,6 @@ function rollEasy(dice) {
function roll(event) { function roll(event) {
if ((!event || event.keyCode === 13) && document.getElementById('command').value?.length > 0) { if ((!event || event.keyCode === 13) && document.getElementById('command').value?.length > 0) {
register()
let httpRequest = new XMLHttpRequest(); let httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url() + '/dice/' + document.getElementById('room').value + ':' + localStorage.getItem(`userId`)) httpRequest.open('POST', url() + '/dice/' + document.getElementById('room').value + ':' + localStorage.getItem(`userId`))
httpRequest.setRequestHeader('Content-Type', 'application/json') httpRequest.setRequestHeader('Content-Type', 'application/json')
@@ -215,7 +207,11 @@ document.addEventListener("DOMContentLoaded", async () => {
}) })
document.getElementById('resultDiceSwitch').addEventListener('change', function () { document.getElementById('resultDiceSwitch').addEventListener('change', function () {
document.getElementById('results-dice').hidden = !this.checked; if (!this.checked) {
document.getElementById('results-dice').hidden = true
} else {
document.getElementById('results-dice').hidden = false
}
}) })
document.getElementById('chatOverlayLink').href = url() + '/chatoverlay' document.getElementById('chatOverlayLink').href = url() + '/chatoverlay'

View File

@@ -1,18 +0,0 @@
{
"name": "Dice-Tower",
"icons": [
{
"src": "192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": "/",
"display_override": ["window-controls-overlay", "minimal-ui"],
"display": "standalone"
}

View File

@@ -32,22 +32,6 @@ button:active {
background: #222222; background: #222222;
} }
#install {
padding: 10px;
border: #666666 3px solid;
border-radius: 10px;
background: #666666;
color: #fff
}
#install:hover {
background: #444444;
}
#install:active {
background: #222222;
}
input { input {
margin: 10px; margin: 10px;
} }

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Dice-Tower</title> <title>Dice-Tower</title>
<meta name="version" content="{version}"> <meta name="version" content="{version}">
<link rel="manifest" href="manifest.json" />
<link rel="stylesheet" href="/vendor/w3css/4/w3.css"> <link rel="stylesheet" href="/vendor/w3css/4/w3.css">
<link rel="stylesheet" href="/vendor/font-awesome/css/fontawesome.css"> <link rel="stylesheet" href="/vendor/font-awesome/css/fontawesome.css">
<link rel="stylesheet" href="/vendor/font-awesome/css/all.css"> <link rel="stylesheet" href="/vendor/font-awesome/css/all.css">
@@ -33,17 +33,6 @@
if (!localStorage.getItem("userId")) { if (!localStorage.getItem("userId")) {
localStorage.setItem("userId", self.crypto.randomUUID()); localStorage.setItem("userId", self.crypto.randomUUID());
} }
addEventListener("beforeinstallprompt", (event) => {
event.preventDefault()
let install = document.createElement('button');
install.id = 'install'
install.style.position = 'absolute'
install.style.top = '25px'
install.style.right = '25px'
install.innerHTML = 'Install Dice-Tower'
install.onclick = () => event.prompt()
document.body.appendChild(install)
});
</script> </script>
<div class="w3-container w3-content" <div class="w3-container w3-content"
style="height: 95vh; display: flex; flex-direction: column; justify-content: space-between; padding: 25px"> style="height: 95vh; display: flex; flex-direction: column; justify-content: space-between; padding: 25px">
@@ -89,7 +78,6 @@
<button style="border: transparent; border-radius: 100%; font-size: large; font-weight: bold; height: 50px; width: 50px" <button style="border: transparent; border-radius: 100%; font-size: large; font-weight: bold; height: 50px; width: 50px"
onclick="addDice()">+ onclick="addDice()">+
</button> </button>
<button style="font-size: large; font-weight: bold;" onclick="rollEasy('d2')">D2</button>
<button style="font-size: large; font-weight: bold;" onclick="rollEasy('d4')">D4</button> <button style="font-size: large; font-weight: bold;" onclick="rollEasy('d4')">D4</button>
<button style="font-size: large; font-weight: bold;" onclick="rollEasy('d6')">D6</button> <button style="font-size: large; font-weight: bold;" onclick="rollEasy('d6')">D6</button>
<button style="font-size: large; font-weight: bold;" onclick="rollEasy('d8')">D8</button> <button style="font-size: large; font-weight: bold;" onclick="rollEasy('d8')">D8</button>
@@ -150,10 +138,10 @@
</div> </div>
<div style="display: flex; flex-direction: row; justify-content: space-between; align-items: baseline"> <div style="display: flex; flex-direction: row; justify-content: space-between; align-items: baseline">
<div style="flex-grow: 1; padding: 0 10px"> <div style="flex-grow: 1; padding: 0 10px">
<color-picker id="faceColor" name="Face" value="#8d8981"></color-picker> <color-picker id="faceColor" name="Face"></color-picker>
</div> </div>
<div style="flex-grow: 1; padding: 10px 0"> <div style="flex-grow: 1; padding: 10px 0">
<color-picker id="numberColor" name="Numbers" value="black"></color-picker> <color-picker id="numberColor" name="Numbers"></color-picker>
</div> </div>
</div> </div>
<div id="dice-box"> <div id="dice-box">
@@ -202,8 +190,11 @@
<h2 style="text-align: center">How-To</h2> <h2 style="text-align: center">How-To</h2>
<ul> <ul>
<li> <li>
Join a room by entering your character name and the name of the room Join a room by entering your character name and the name of the room.<br/>
<strong>If you are a GM, make sure to join the room first or let all other players rejoin to get all
Overlay-URLs.</strong>
</li> </li>
<li>Open your Dice-Overlay either in a new Tab or as a browser source in OBS</li> <li>Open your Dice-Overlay either in a new Tab or as a browser source in OBS</li>
<ul> <ul>
<li>You can configure your Overlay with query parameters (for more information hover over the link) <li>You can configure your Overlay with query parameters (for more information hover over the link)