You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.2 KiB
168 lines
4.2 KiB
let debug = false,
|
|
viewPort = {x: 0, y: 0},
|
|
localFont: any,
|
|
localSettings: Settings.Global;
|
|
|
|
let state = 'menu',
|
|
game: Game | OnlineGame,
|
|
onlineManager: OnlineManager,
|
|
loader: Loader,
|
|
icons : {
|
|
speed: {
|
|
positive
|
|
negative
|
|
}
|
|
border: {
|
|
positive
|
|
negative
|
|
}
|
|
}
|
|
|
|
const p = new p5((p: p5) => {
|
|
p.preload = (): void => {
|
|
localSettings = <Settings.Global>p.loadJSON('data/settings/settings.json', {}, "json", (json) => {
|
|
console.log('Local settings loaded: ', json)
|
|
}, (error) => {
|
|
console.log('Local settings failed: ', error)
|
|
})
|
|
|
|
localFont = p.loadFont('data/styles/font.ttf', (json) => {
|
|
console.log('Local font loaded: ', json)
|
|
}, error => {
|
|
console.log('Local font failed: ', error)
|
|
})
|
|
|
|
p.loadJSON('data/settings/libraries.json', json => {
|
|
loadScripts(json)
|
|
console.log('BenjoCraeft library scripts loaded: ', json)
|
|
})
|
|
|
|
icons = {speed: {positive: null, negative: null}, border: {positive: null, negative: null}}
|
|
icons.speed.positive = p.loadImage('data/images/speed_icon_positive.png')
|
|
icons.speed.negative = p.loadImage('data/images/speed_icon_negative.png')
|
|
icons.border.positive = p.loadImage('data/images/border_icon_positive.png')
|
|
icons.border.negative = p.loadImage('data/images/border_icon_negative.png')
|
|
}
|
|
|
|
p.setup = (): void => {
|
|
canvasSetup(localSettings.frameWork, localFont)
|
|
interfaceSetup()
|
|
}
|
|
|
|
p.draw = (): void => {
|
|
p.background(90, 90, 120)
|
|
//p.image(img, 0, 0, p.width, p.height)
|
|
|
|
if (game){
|
|
game.update()
|
|
game.display()
|
|
}
|
|
|
|
if (loader){
|
|
loader.update()
|
|
loader.display()
|
|
}
|
|
|
|
if (debug) debugInformation()
|
|
}
|
|
});
|
|
|
|
p.keyPressed = myKeyPressed;
|
|
p.keyReleased = myKeyReleased;
|
|
|
|
declare let debugInformation: () => void
|
|
declare let ranBool: (chance: number) => boolean
|
|
declare let Collision: {
|
|
ellipseToEllipse: (e1: Ball, e2: Ball) => void
|
|
}
|
|
|
|
|
|
function canvasSetup(settings: Settings.FrameWork, font): void{
|
|
p.frameRate(settings.frameRate)
|
|
let canvas = p.createCanvas(settings.width, settings.height)
|
|
canvas.parent('canvasHolder')
|
|
adjustDOMSizes()
|
|
p.textFont(font)
|
|
}
|
|
|
|
function startOfflineGame(): void{
|
|
$('#setup-controls').hide()
|
|
$('#game-controls').show()
|
|
game = new Game(localSettings.game)
|
|
game.init()
|
|
|
|
console.log('Offline Game started:', game)
|
|
}
|
|
|
|
function adjustDOMSizes(){
|
|
let w = window.innerWidth
|
|
let h = window.innerHeight
|
|
$('canvas, #canvasHolder').css({
|
|
width: h * 0.95,
|
|
height: h * 0.95
|
|
})
|
|
$('#interface, #chat').css({
|
|
width: (w - h * 0.95 - 4) / 2 - 4 - 10,
|
|
height: h * 0.95,
|
|
'margin-top': h * 0.025 - 2,
|
|
'margin-left': 5
|
|
})
|
|
$('#chat').css({
|
|
'margin-right': 5
|
|
})
|
|
}
|
|
|
|
function interfaceSetup(): void{
|
|
|
|
function handleRadioInput(): void{
|
|
let type = $('#game-type input[type=radio]:checked').val()
|
|
$('#game-properties > *').hide()
|
|
if (type === 'offline'){
|
|
$('.start').show()
|
|
state = 'offline-start'
|
|
} else if (type === 'online'){
|
|
$('.player-name').show()
|
|
state = 'player-name'
|
|
}
|
|
|
|
$('#game-properties').show()
|
|
}
|
|
|
|
$('#lobby, #chat').hide()
|
|
$('#game-type input[type=radio]').change(handleRadioInput)
|
|
handleRadioInput()
|
|
|
|
}
|
|
|
|
function continueForm(dom: any): void{
|
|
$(dom).blur()
|
|
switch(state){
|
|
case 'offline-start':
|
|
startOfflineGame()
|
|
break;
|
|
case 'player-name':
|
|
let input = getValidInput(state)
|
|
if (input){
|
|
onlineManager = new OnlineManager(input, localSettings)
|
|
$('.player-name').hide()
|
|
$('.player-actions').show()
|
|
state = 'player-actions'
|
|
}
|
|
break
|
|
}
|
|
}
|
|
|
|
function randomToken(): string{
|
|
return Math.floor((1 + Math.random()) * 1e16).toString(16).substring(1)
|
|
}
|
|
|
|
function loadScripts(libs: string[]){
|
|
for (let script in libs){
|
|
if (libs[script]){
|
|
let url = '/lib/benjocraeft/' + script + '.js'
|
|
$.getScript(url, () => {
|
|
console.log('Successfully loaded script: ', url)
|
|
})
|
|
}
|
|
}
|
|
} |