mirror of
https://github.com/Investigamer/cardconjurer.git
synced 2025-07-28 13:51:50 -05:00
196 lines
7.3 KiB
JavaScript
196 lines
7.3 KiB
JavaScript
//============================================//
|
|
// Card Conjurer, by Kyle Burton //
|
|
//============================================//
|
|
//define variables
|
|
var playerCount, startingLifeTotal, firstPlayerWide = false, lastPlayerWide = false, playerList = [], rowHeight = 0, columnWidth = 0, rowCount = 0
|
|
//This function sets everything up
|
|
function fullscreen() {
|
|
//Full screen!
|
|
grid = document.getElementById("gridShell")
|
|
if (grid.requestFullscreen) {
|
|
grid.requestFullscreen()
|
|
} else if (grid.mozRequestFullScreen) {
|
|
grid.mozRequestFullScreen()
|
|
} else if (grid.webkitRequestFullscreen) {
|
|
grid.webkitRequestFullscreen()
|
|
} else if (grid.msRequestFullscreen) {
|
|
grid.msRequestFullscreen()
|
|
} else {
|
|
// alert("Unfortunately fullscreen is unavailable for your device. If it's an iPhone, I'd recommend tapping the share button and selecting 'Add to Home Screen.' Running it from your home screen should provide a much better experience.")
|
|
document.getElementById("return").classList.add("permaHidden")
|
|
document.getElementById("gridShell").classList.add("fullscreenUnavailable")
|
|
}
|
|
}
|
|
function startGame() {
|
|
fullscreen()
|
|
document.getElementById("return").classList.remove("hidden")
|
|
//hide the settings and grab player count and starting life total
|
|
document.getElementById("settings").classList.add("hidden")
|
|
playerCount = parseInt(document.getElementById("inputPlayerCount").value)
|
|
startingLifeTotal = parseInt(document.getElementById("inputStartingLife").value)
|
|
//determine the layout based on player count
|
|
if (playerCount % 2 == 0) {
|
|
if (playerCount >= 6) {
|
|
firstPlayerWide = true
|
|
lastPlayerWide = true
|
|
}
|
|
} else {
|
|
lastPlayerWide = true
|
|
}
|
|
//Make all the player boxes
|
|
for (var i = 1; i <= playerCount; i ++) {
|
|
//determine if the current box is rotated or widened
|
|
var rotation, wide = false
|
|
var orientationIndexAdjust = 0
|
|
if (firstPlayerWide) {
|
|
orientationIndexAdjust += 1
|
|
}
|
|
if (i == 1 && firstPlayerWide) {
|
|
rotation = 180
|
|
} else if (i == playerCount && lastPlayerWide) {
|
|
rotation = 0
|
|
} else if ((i + orientationIndexAdjust) % 2 == 0) {
|
|
rotation = 270
|
|
} else {
|
|
rotation = 90
|
|
}
|
|
if ((i == 1 && firstPlayerWide) || (i == playerCount && lastPlayerWide)) {wide = true}
|
|
playerList[i - 1] = new playerBox(i, rotation, wide)
|
|
}
|
|
//Determine the grid size
|
|
columnWidth = screen.width / 2 - 2
|
|
rowCount = (playerCount - playerCount % 2) / 2 + 1
|
|
if (playerCount == 2 || playerCount == 4) {
|
|
rowCount -= 1
|
|
}
|
|
rowHeight = screen.height / rowCount - 2
|
|
//Now that all the player boxes are made, they must be configured
|
|
for (var i = 1; i <= playerCount; i++) {
|
|
configurePlayerBox(i)
|
|
}
|
|
//Set up the clock!
|
|
setInterval(function() {
|
|
for (var i = 1; i <= playerCount; i++) {
|
|
if (playerList[i - 1].canvas.customVarMouseDown != "false") {
|
|
playerList[i - 1].canvas.customVarMouseDelay += 1
|
|
if (playerList[i - 1].canvas.customVarMouseDelay > 5) {
|
|
if (playerList[i - 1].canvas.customVarMouseDown == "up") {
|
|
playerList[i - 1].life += 1
|
|
} else {
|
|
playerList[i - 1].life -= 1
|
|
}
|
|
if (playerList[i - 1].canvas.customVarMouseDelay > 50) {
|
|
if (playerList[i - 1].canvas.customVarMouseDown == "up") {
|
|
playerList[i - 1].life += 4
|
|
} else {
|
|
playerList[i - 1].life -= 4
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var context = playerList[i - 1].canvas.customVarContext
|
|
context.textBaseline = "middle"
|
|
var tempFontSize = 100
|
|
context.font = "100pt belerenbsc"
|
|
var currentLife = playerList[context.customVarCanvas.customVarID - 1].life
|
|
context.fillStyle = "#222"
|
|
var tempCanvasHeight = context.customVarCanvas.height, tempCanvasWidth = context.customVarCanvas.width
|
|
if (playerList[context.customVarCanvas.customVarID - 1].rotation == 90 || playerList[context.customVarCanvas.customVarID - 1].rotation == 270) {
|
|
tempCanvasHeight = tempCanvasWidth
|
|
tempCanvasWidth = context.customVarCanvas.height
|
|
}
|
|
context.fillRect(tempCanvasWidth / -2, tempCanvasHeight / -2, tempCanvasWidth, tempCanvasHeight)
|
|
context.fillStyle = "#eee"
|
|
while (context.measureText(currentLife).width >= tempCanvasWidth) {
|
|
tempFontSize -= 1
|
|
context.font = tempFontSize + "pt belerenbsc"
|
|
}
|
|
var horizontalShift = -1 * parseInt(context.measureText(currentLife).width) / 2
|
|
context.fillText(currentLife, horizontalShift, 0)
|
|
}
|
|
}, 100)
|
|
}
|
|
|
|
function playerBox(playerBoxID, canvasRotation, wide) {
|
|
this.id = playerBoxID
|
|
this.rotation = canvasRotation
|
|
this.life = startingLifeTotal
|
|
this.canvas = document.createElement("canvas")
|
|
this.canvas.customVarMouseDown = "false"
|
|
this.canvas.customVarMouseDelay = 0
|
|
this.canvas.customVarID = playerBoxID
|
|
this.canvas.customVarContext = this.canvas.getContext("2d")
|
|
this.canvas.customVarContext.customVarCanvas = this.canvas
|
|
this.canvas.classList.add("playerBox")
|
|
if (wide) {
|
|
this.canvas.classList.add("widePlayerBox")
|
|
}
|
|
document.getElementById("mainGrid").appendChild(this.canvas)
|
|
this.canvas.addEventListener("mousedown", function() {
|
|
mouseDownPlayerBox(this, event.clientX, event.clientY)
|
|
})
|
|
document.addEventListener("mouseup", function() {
|
|
mouseUpPlayerBox(this)
|
|
})
|
|
}
|
|
function configurePlayerBox(playerBoxID) {
|
|
var currentPlayer = playerList[playerBoxID - 1]
|
|
var context = currentPlayer.canvas.customVarContext
|
|
currentPlayer.canvas.width = columnWidth
|
|
if (playerList[playerBoxID - 1].canvas.classList.contains("widePlayerBox")) {
|
|
currentPlayer.canvas.width = columnWidth * 2 + 2
|
|
}
|
|
currentPlayer.canvas.height = rowHeight
|
|
context.translate(currentPlayer.canvas.width / 2, currentPlayer.canvas.height / 2)
|
|
context.rotate(Math.PI / 180 * currentPlayer.rotation)
|
|
}
|
|
function mouseDownPlayerBox(canvas, clickX = 0, clickY = 0) {
|
|
if (clickX > 0 && clickY > 0) {
|
|
var playerBoxBounds = canvas.getBoundingClientRect()
|
|
if (playerList[canvas.customVarID - 1].rotation == 0) {
|
|
if (clickX > playerBoxBounds.width / 2 + playerBoxBounds.x) {
|
|
canvas.customVarMouseDown = "up"
|
|
playerList[canvas.customVarID - 1].life += 1
|
|
} else {
|
|
canvas.customVarMouseDown = "down"
|
|
playerList[canvas.customVarID - 1].life -= 1
|
|
}
|
|
} else if (playerList[canvas.customVarID - 1].rotation == 90) {
|
|
if (clickY > playerBoxBounds.height / 2 + playerBoxBounds.y) {
|
|
canvas.customVarMouseDown = "up"
|
|
playerList[canvas.customVarID - 1].life += 1
|
|
} else {
|
|
canvas.customVarMouseDown = "down"
|
|
playerList[canvas.customVarID - 1].life -= 1
|
|
}
|
|
} else if (playerList[canvas.customVarID - 1].rotation == 180) {
|
|
if (clickX > playerBoxBounds.width / 2 + playerBoxBounds.x) {
|
|
canvas.customVarMouseDown = "down"
|
|
playerList[canvas.customVarID - 1].life -= 1
|
|
} else {
|
|
canvas.customVarMouseDown = "up"
|
|
playerList[canvas.customVarID - 1].life += 1
|
|
}
|
|
} else {
|
|
if (clickY > playerBoxBounds.height / 2 + playerBoxBounds.y) {
|
|
canvas.customVarMouseDown = "down"
|
|
playerList[canvas.customVarID - 1].life -= 1
|
|
} else {
|
|
canvas.customVarMouseDown = "up"
|
|
playerList[canvas.customVarID - 1].life += 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function mouseUpPlayerBox() {
|
|
for (var i = 1; i <= playerCount; i++) {
|
|
playerList[i - 1].canvas.customVarMouseDown = "false"
|
|
playerList[i - 1].canvas.customVarMouseDelay = 0
|
|
}
|
|
}
|
|
function resetLife() {
|
|
for (var i = 1; i <= playerCount; i++) {
|
|
playerList[i - 1].life = startingLifeTotal
|
|
}
|
|
document.getElementById('menu').classList.add('hidden')
|
|
} |