deckard-and-company/UI/index.html

176 lines
6.7 KiB
HTML

<html>
<head>
<title>Deckard + Company</title>
<link href="css.css" rel="stylesheet">
<script src="https://labs.murkfall.net/bluesaxman/blue.js/raw/master/libs/bluecore.js"></script>
</head>
<body>
<h1>Welcome to Deckard + Company<h1>
</body>
<script>
window.server = "ws://localhost:8080/";
window.gameState = {};
window.gameState.users = [];
window.gameState.decks = [];
window.gameState.pools = [];
window.gameState.hands = [];
function updateEvent() {
window.UI.display.innerHTML = "";
if (window.UI.menu.decks.button.checked) {
elementPlace("#display","decks",null,"ol");
var myKeys = Object.keys(window.gameState.decks);
myKeys.sort();
myKeys.forEach(function (deckID) {
var deck = window.gameState.decks[deckID];
window.UI.display[deckID] = elementPlace("#decks","Deck_"+deck.name,"deck","li");
window.UI.display[deckID].innerText = deck.name+":"+deck.size;
buttonAdd("#Deck_"+deck.name,null,"Add Cards", function () {
popupDialog("deckLoader","Select DDF (Deck Definition File)",true,inputDialog,{"inputType":"file"},function (f) {
var myFile = new FileReader();
myFile.onload = function (file) {
var message = {};
message.action = "ddf";
message.deck = deckID;
message.ddf = file.target.result;
window.gameSession.send(JSON.stringify(message));
}
myFile.readAsText(f[0]);
});
},"deck_button add_cards","div");
buttonAdd("#Deck_"+deck.name,null,"Shuffle", function () {
window.gameSession.send('{"action":"shuffle", "deck":"'+deckID+'"}');
}, "deck_button shuffle","div");
buttonAdd("#Deck_"+deck.name,null,"Draw", function () {
window.gameSession.send('{"action":"draw","deck":"'+deckID+'","hand":"'+"default"+'"}'); // Will need to be updated when I figure out selection
}, "deck_button draw","div");
});
buttonAdd("#decks",null,"+",function () {
popupDialog("addDeck","Please name new deck",true, inputDialog,{"inputType":"text"},function (newDeckName) {
window.gameSession.send('{"action":"add","type":"deck","id":"'+newDeckName+'"}');
});
}, "add_button","li");
}
if (window.UI.menu.users.button.checked) {
elementPlace("#display","users",null,"ol");
window.gameState.users.sort();
window.gameState.users.forEach(function (user) {
window.UI.display[user] = elementPlace("#users","User_"+user,"username","li");
window.UI.display[user].innerText = user;
});
}
if (window.UI.menu.hands.button.checked) {
elementPlace("#display","hands",null,"ol");
var myHands = Object.keys(window.gameState.hands);
myHands.sort();
myHands.forEach(function (handID) {
var hand = window.gameState.hands[handID];
window.UI.display[handID] = elementPlace("#hands","Hand_"+hand.name,"hand","li");
window.UI.display[handID].innerText = hand.name;
window.UI.display[handID].cards = elementPlace("#Hand_"+hand.name,hand.name+"_cards",null,"ol");
hand.cards.forEach(function (card,index) {
window.UI.display[handID].cards[index] = elementPlace("#"+hand.name+"_cards",null,"card","li");
window.UI.display[handID].cards[index].innerHTML = card;
});
});
}
if (window.UI.menu.pools.button.checked) {
elementPlace("#display","pools",null,"ol");
var myPools = Object.keys(window.gameState.pools);
myPools.sort();
myPools.forEach(function (poolID) {
var pool = window.gameState.pools[poolID];
window.UI.display[poolID] = elementPlace("#pools","Pool_"+pool.name,"pool","li");
window.UI.display[poolID].innerText = pool.name+":"+pool.top;
});
}
}
function startGameSession() {
window.gameSession = new WebSocket(server);
gameSession.onmessage = function (event) {
var message = JSON.parse(event.data);
if (message.userID) { window.userID = message.userID; }
if (message.message) { console.log(message.message); }
if (message.request) {
if ("session" == message.request) { window.gameSession.send('{"session":'+window.gameState.session+'}'); }
if ("user" == message.request) { window.gameSession.send('{"user":"'+window.gameState.user+'"}'); }
if ("join" == message.request) { window.gameSession.send('{"action":"join"}'); }
if ("update" == message.request) { window.gameSession.send('{"action":"update"}'); }
}
if (message.users) { window.gameState.users = message.users; updateEvent(); }
if (message.decks) { window.gameState.decks = message.decks; updateEvent(); }
if (message.pools) { window.gameState.pools = message.pools; updateEvent(); }
if (message.hands) { window.gameState.hands = message.hands; updateEvent(); }
if (message.action) {
if ("addCard" == message.action) {
window.gameState.hands[message.hand].cards.push(message.card);
updateEvent();
}
}
console.log(message);
};
gameSession.onconnect = function () {};
gameSession.onclose = function (event) {
console.log(event);
};
}
window.document.body.innerHTML = "";
window.UI = {};
function menuButton(ParentID,name,group,checked) {
var button = elementPlace(ParentID,name+"_handle", "menu_button_input", "input");
var label = elementPlace(ParentID,null,"menu_button","label");
button.type = "radio";
button.name = group;
button.value = name;
button.checked = checked;
label.setAttribute("for", name+"_handle");
label.innerText = name;
button.onchange = updateEvent;
return {"label":label,"button":button};
}
window.UI.menu = elementPlace("body","menu",null,"div");
window.UI.menu.decks = menuButton("#menu","Decks","menu",true);
window.UI.menu.hands = menuButton("#menu","Hands","menu",false);
window.UI.menu.pools = menuButton("#menu","Pools","menu",false);
window.UI.menu.users = menuButton("#menu","Users","menu",false);
window.UI.menu.options = menuButton("#menu","Options","menu",false);
window.UI.display = elementPlace("body","display",null,"div");
var parms = new URLSearchParams(window.location.search);
if (!parms.get("s")) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog,{"content":"Please enter a game ID or leave blank to start a new game","inputType":"number"},
function (value) {
if (Number.isInteger(Number.parseInt(value))) {
window.gameState.session = Number.parseInt(value);
} else {
window.gameState.session = null;
}
window.location.search = '?s='+window.gameState.session;
// window.location.reload();
});
} else {
window.gameState.session = parms.get("s");
if (!window.gameState.user) {
popupDialog("gettingStarted","Welcome to Deckard and company", false, inputDialog, {"content":"Please enter a username","inputType":"text"},
function (value) {
if ((null != value) && ("" != value)) {
window.gameState.user = value;
} else {
window.gameState.user = "Unknown"+(new Date()).getTime();
}
startGameSession();
});
} else { startGameSession(); }
}
</script>
</html>