Merge pull request #3952 from christianbeeznest/lti-provider3
Plugin: LTI Provider: Remove demo game as tool provider - #3894pull/3998/head
commit
2682c2ce90
@ -1,49 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__.'/../../../../main/inc/global.inc.php'; |
||||
require_once __DIR__.'/../../src/LtiProvider.php'; |
||||
|
||||
$launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); |
||||
|
||||
if (!$launch->hasAgs()) { |
||||
throw new Exception("Don't have grades!"); |
||||
} |
||||
|
||||
$grades = $launch->getAgs(); |
||||
|
||||
$score = Packback\Lti1p3\LtiGrade::new() |
||||
->setScoreGiven($_REQUEST['score']) |
||||
->setScoreMaximum(100) |
||||
->setTimestamp(date(DateTime::ISO8601)) |
||||
->setActivityProgress('Completed') |
||||
->setGradingProgress('FullyGraded') |
||||
->setUserId($launch->getLaunchData()['sub']); |
||||
|
||||
|
||||
$scoreLineitem = Packback\Lti1p3\LtiLineitem::new() |
||||
->setTag('score') |
||||
->setScoreMaximum(100) |
||||
->setLabel('Score') |
||||
->setResourceId($launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); |
||||
|
||||
$grades->putGrade($score, $scoreLineitem); |
||||
|
||||
|
||||
$time = Packback\Lti1p3\LtiGrade::new() |
||||
->setScoreGiven($_REQUEST['time']) |
||||
->setScoreMaximum(999) |
||||
->setTimestamp(DateTime::ISO8601) |
||||
->setActivityProgress('Completed') |
||||
->setGradingProgress('FullyGraded') |
||||
->setUserId($launch->getLaunchData()['sub']); |
||||
|
||||
$timeLineitem = Packback\Lti1p3\LtiLineitem::new() |
||||
->setTag('time') |
||||
->setScoreMaximum(999) |
||||
->setLabel('Time Taken') |
||||
->setResourceId('time'.$launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); |
||||
|
||||
$grades->putGrade($time, $timeLineitem); |
||||
|
||||
echo '{"success" : true}'; |
@ -1,51 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__.'/../../../../main/inc/global.inc.php'; |
||||
require_once __DIR__.'/../../src/LtiProvider.php'; |
||||
|
||||
$launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); |
||||
|
||||
if (!$launch->hasNrps()) { |
||||
throw new Exception("Don't have names and roles!"); |
||||
} |
||||
if (!$launch->hasAgs()) { |
||||
throw new Exception("Don't have grades!"); |
||||
} |
||||
|
||||
$ags = $launch->getAgs(); |
||||
|
||||
$scoreLineitem = Packback\Lti1p3\LtiLineitem::new() |
||||
->setTag('score') |
||||
->setScoreMaximum(100) |
||||
->setLabel('Score') |
||||
->setResourceId($launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); |
||||
$scores = $ags->getGrades($scoreLineitem); |
||||
|
||||
$timeLineitem = Packback\Lti1p3\LtiLineitem::new() |
||||
->setTag('time') |
||||
->setScoreMaximum(999) |
||||
->setLabel('Time Taken') |
||||
->setResourceId('time'.$launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/resource_link']['id']); |
||||
$times = $ags->getGrades($timeLineitem); |
||||
|
||||
$members = $launch->getNrps()->getMembers(); |
||||
|
||||
$scoreboard = []; |
||||
foreach ($scores as $score) { |
||||
$result = ['score' => $score['resultScore']]; |
||||
foreach ($times as $time) { |
||||
if ($time['userId'] === $score['userId']) { |
||||
$result['time'] = $time['resultScore']; |
||||
break; |
||||
} |
||||
} |
||||
foreach ($members as $member) { |
||||
if ($member['user_id'] === $score['userId']) { |
||||
$result['name'] = $member['name']; |
||||
break; |
||||
} |
||||
} |
||||
$scoreboard[] = $result; |
||||
} |
||||
echo json_encode($scoreboard); |
@ -1,20 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__.'/../../../main/inc/global.inc.php'; |
||||
require_once __DIR__.'/../src/LtiProvider.php'; |
||||
use Packback\Lti1p3; |
||||
|
||||
$launch = LtiProvider::create()->launch(true, $_REQUEST['launch_id']); |
||||
|
||||
if (!$launch->isDeepLinkLaunch()) { |
||||
throw new Exception("Must be a deep link!"); |
||||
} |
||||
|
||||
$resource = LtiDeepLinkResource::new() |
||||
->setUrl(api_get_path(WEB_PLUGIN_PATH)."lti_provider/web/game.php") |
||||
->setCustomParams(['difficulty' => $_REQUEST['diff']]) |
||||
->setTitle('Breakout ' . $_REQUEST['diff'] . ' mode!'); |
||||
|
||||
$launch->getDeepLink() |
||||
->outputResponseForm([$resource]); |
@ -1,32 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__.'/../../../main/inc/global.inc.php'; |
||||
require_once __DIR__.'/../src/LtiProvider.php'; |
||||
use Packback\Lti1p3; |
||||
|
||||
$launch = LtiProvider::create()->launch(); |
||||
|
||||
$htmlHeadXtra[] = api_get_css( |
||||
api_get_path(WEB_PLUGIN_PATH).'lti_provider/web/static/breakout.css' |
||||
); |
||||
|
||||
$template = new Template('Game demo'); |
||||
|
||||
$courseCode = $launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/context']['label']; |
||||
$diff = 'normal'; |
||||
if ($launch->isDeepLinkLaunch()) { |
||||
$diff = $launch->getLaunchData()['https://purl.imsglobal.org/spec/lti/claim/custom']['difficulty']; |
||||
} |
||||
$username = $launch->getLaunchData()['given_name']; |
||||
$template->assign('launch', $launch); |
||||
$template->assign('courseCode', $courseCode); |
||||
$template->assign('diff', $diff); |
||||
$template->assign('username', $username); |
||||
|
||||
$content = $template->fetch('lti_provider/web/view/game.tpl'); |
||||
$template->assign('content', $content); |
||||
$template->display_no_layout_template(); |
||||
|
||||
|
||||
?> |
@ -1,8 +0,0 @@ |
||||
<?php |
||||
/* For license terms, see /license.txt */ |
||||
|
||||
require_once __DIR__.'/../../../main/inc/global.inc.php'; |
||||
require_once __DIR__.'/../src/LtiProvider.php'; |
||||
use Packback\Lti1p3; |
||||
|
||||
LtiProvider::create()->login($_REQUEST); |
@ -1,56 +0,0 @@ |
||||
body { |
||||
font-family: 'Gugi', cursive; |
||||
} |
||||
#scoreboard { |
||||
border: solid 1px #000; |
||||
border-left: none; |
||||
border-top-right-radius: 20px; |
||||
border-bottom-right-radius: 20px; |
||||
padding-bottom: 12px; |
||||
background: linear-gradient(to bottom, rgb(0, 0, 0), rgb(0, 0, 50) 500px); |
||||
color: white; |
||||
} |
||||
th, td { |
||||
color: white; |
||||
} |
||||
.dl-config { |
||||
font-family: Verdana, Geneva, Tahoma, sans-serif; |
||||
display: block; |
||||
width: 400px; |
||||
position: absolute; |
||||
left:50%; |
||||
margin-left: -200px; |
||||
} |
||||
.dl-config h1 { |
||||
text-align: center; |
||||
} |
||||
.dl-config ul { |
||||
list-style: none; |
||||
padding: 0; |
||||
} |
||||
.dl-config ul li a { |
||||
display: block; |
||||
width: 200px; |
||||
height:50px; |
||||
text-align: center; |
||||
border: black solid 1px; |
||||
border-radius: 15px; |
||||
margin:auto; |
||||
text-decoration: none; |
||||
color: black; |
||||
margin-top:8px; |
||||
font-size: 30px; |
||||
line-height: 46px; |
||||
} |
||||
.dl-config ul li a:hover { |
||||
background-color: #dddddd; |
||||
} |
||||
#game-screen { |
||||
position: relative; |
||||
height: 550px; |
||||
width: 100%; |
||||
} |
||||
#btn-again { |
||||
right: 0px; |
||||
position: absolute; |
||||
} |
@ -1,464 +0,0 @@ |
||||
var c = document.getElementById("breakout"); |
||||
var ctx = window.c.getContext("2d"); |
||||
|
||||
var bgctx = document.getElementById("breakoutbg").getContext("2d"); |
||||
bgctx.beginPath(); |
||||
var bggrad = ctx.createLinearGradient(0,0,0,c.height); |
||||
bggrad.addColorStop(0,"rgb(0, 0, 0)"); |
||||
bggrad.addColorStop(1,"rgb(0, 0, 50)"); |
||||
bgctx.fillStyle = bggrad; |
||||
bgctx.rect(0, 0, c.width, c.height); |
||||
bgctx.fill(); |
||||
bgctx.font = "10px Gugi"; |
||||
bgctx.fillStyle = '#FFFFFF'; |
||||
bgctx.textAlign = "left"; |
||||
bgctx.fillText("Powered By Turnitin", 6, c.height-6); |
||||
|
||||
var score = 0; |
||||
|
||||
var difficulty = { |
||||
hard: { |
||||
speed_multiplier:1.5 |
||||
}, |
||||
normal: { |
||||
speed_multiplier:1 |
||||
}, |
||||
easy: { |
||||
speed_multiplier:0.7 |
||||
}, |
||||
} |
||||
|
||||
var ball = { |
||||
pos : { |
||||
x: window.c.width/2-200, |
||||
y : window.c.height/2-2, |
||||
}, |
||||
vel : { |
||||
x : 6 * difficulty[curr_diff]['speed_multiplier'], |
||||
y : 6 * difficulty[curr_diff]['speed_multiplier'], |
||||
}, |
||||
r: 10, |
||||
rot: 0, |
||||
velr: 0, |
||||
render: function() { |
||||
this.pos.x += this.vel.x; |
||||
this.pos.y += this.vel.y; |
||||
if (this.oob(window.c.width, this.pos.x, this.r)) { |
||||
this.vel.x = -this.vel.x; |
||||
this.pos.x += this.vel.x; |
||||
this.pos.y -= this.vel.y; |
||||
} |
||||
if (this.oob(window.c.height, this.pos.y, this.r)) { |
||||
if (this.pos.y > window.c.height - this.r) { |
||||
window.endGame(); |
||||
} |
||||
this.vel.y = -this.vel.y; |
||||
this.pos.y += this.vel.y; |
||||
this.pos.x -= this.vel.x; |
||||
} |
||||
|
||||
window.ctx.save(); |
||||
window.ctx.beginPath(); |
||||
var gradient = ctx.createRadialGradient(this.pos.x, this.pos.y, 2, this.pos.x, this.pos.y, 10); |
||||
window.ctx.fillStyle = "rgb(255, 232, 102)"; |
||||
window.ctx.strokeStyle = "rgb(255, 232, 102)"; |
||||
window.ctx.setLineDash([5,5]); |
||||
window.ctx.lineWidth = 4; |
||||
window.ctx.translate(this.pos.x, this.pos.y); |
||||
window.ctx.rotate(this.rot * Math.PI); |
||||
window.ctx.arc(0, 0, this.r, 0, 2 * Math.PI); |
||||
if (this.vel.x > 0) { |
||||
this.velr = 0.01; |
||||
} else if (this.vel.x < 0) { |
||||
this.velr = -0.01; |
||||
} else { |
||||
this.velr = 0; |
||||
} |
||||
this.rot += this.velr; |
||||
window.ctx.fill(); |
||||
window.ctx.stroke(); |
||||
window.ctx.restore(); |
||||
|
||||
}, |
||||
oob : function(max, curr, offset) { |
||||
if (curr < offset || curr > (max-offset)) { |
||||
return true; |
||||
} |
||||
}, |
||||
left : function() { |
||||
return this.pos.x - this.r; |
||||
}, |
||||
right : function() { |
||||
return this.pos.x + this.r; |
||||
}, |
||||
top : function() { |
||||
return this.pos.y - this.r; |
||||
}, |
||||
bottom : function() { |
||||
return this.pos.y + this.r; |
||||
}, |
||||
}; |
||||
|
||||
var paddle = { |
||||
pos : { |
||||
x: window.c.width/2+2, |
||||
y : window.c.height-40, |
||||
}, |
||||
width : 80, |
||||
height : 20, |
||||
render: function() { |
||||
window.ctx.beginPath(); |
||||
var gradient = ctx.createLinearGradient(this.pos.x,this.pos.y,this.pos.x,this.pos.y + this.height); |
||||
gradient.addColorStop(0,"#999999"); |
||||
gradient.addColorStop(0.7,"#eeeeee"); |
||||
gradient.addColorStop(1,"#999999"); |
||||
ctx.fillStyle = gradient; |
||||
var hh = this.height/2; |
||||
window.ctx.arc(this.pos.x + hh, this.pos.y + hh, hh, 0.5 * Math.PI, 1.5 * Math.PI); |
||||
window.ctx.rect(this.pos.x + hh, this.pos.y, this.width - this.height, this.height); |
||||
window.ctx.arc(this.pos.x + this.width - hh, this.pos.y + hh, hh, 1.5 * Math.PI, 0.5 * Math.PI); |
||||
window.ctx.fill(); |
||||
window.ctx.stroke(); |
||||
}, |
||||
left : function() { |
||||
return this.pos.x; |
||||
}, |
||||
right : function() { |
||||
return this.pos.x + this.width; |
||||
}, |
||||
top : function() { |
||||
return this.pos.y; |
||||
}, |
||||
bottom : function() { |
||||
return this.pos.y + this.height; |
||||
}, |
||||
test_hit : function() { |
||||
var hitx = this.test_hit_x(); |
||||
var hity = this.test_hit_y(); |
||||
if (!hitx || !hity) { |
||||
return 0; |
||||
} |
||||
if (hity) { |
||||
window.ball.vel.y = -Math.abs(window.ball.vel.y); |
||||
window.ball.pos.y += window.ball.vel.y; |
||||
window.ball.pos.x -= window.ball.vel.x; |
||||
} |
||||
if (hitx) { |
||||
var xdiff = window.ball.pos.x - (this.pos.x + (this.width/2)); |
||||
window.ball.vel.x = (xdiff > 0 ? Math.ceil(xdiff / 5) : Math.floor(xdiff / 5)) * difficulty[curr_diff]['speed_multiplier']; |
||||
window.ball.pos.x += window.ball.vel.x; |
||||
} |
||||
return 1; |
||||
}, |
||||
test_hit_x : function() { |
||||
if (this.left() > window.ball.right()) { |
||||
return 0; |
||||
} |
||||
if (this.right() < window.ball.left()) { |
||||
return 0; |
||||
} |
||||
return 1; |
||||
}, |
||||
test_hit_y : function() { |
||||
if (this.top() > window.ball.bottom()) { |
||||
return 0; |
||||
} |
||||
if (this.bottom() < window.ball.top()) { |
||||
return 0; |
||||
} |
||||
return 1; |
||||
}, |
||||
move : function() { |
||||
if (window.press_left) { |
||||
if (this.pos.x > 0) { |
||||
this.pos.x -= 8; |
||||
} |
||||
} |
||||
if (window.press_right) { |
||||
if (this.pos.x < window.c.width - this.width) { |
||||
this.pos.x += 8; |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
|
||||
function fire() { |
||||
this.r = 0, |
||||
this.a = 0, |
||||
this.render = function() { |
||||
if (this.a < 0.2) { |
||||
this.reset(); |
||||
} |
||||
|
||||
this.pos.x += this.vel.x + (Math.random() * 2) - 1; |
||||
this.pos.y += this.vel.y + (Math.random() * 2) - 1; |
||||
|
||||
this.r *= 0.95; |
||||
this.a *= 0.95; |
||||
|
||||
window.ctx.beginPath(); |
||||
window.ctx.fillStyle = 'rgba(' + (239 - this.green) +', ' + this.green + ', 66,'+ this.a +')'; |
||||
window.ctx.arc(this.pos.x, this.pos.y, this.r, 0, 2 * Math.PI); |
||||
window.ctx.fill(); |
||||
|
||||
if (this.green < 232) { |
||||
this.green += 8; |
||||
} |
||||
}, |
||||
this.reset = function() { |
||||
this.pos = { |
||||
x: window.ball.pos.x, |
||||
y : window.ball.pos.y, |
||||
}; |
||||
this.vel = { |
||||
x : (Math.random() * 4) - 2, |
||||
y : (Math.random() * 4) - 2, |
||||
}; |
||||
this.r = (Math.random() * 5) + 1; |
||||
this.a = 0.9; |
||||
this.green = 62; |
||||
} |
||||
} |
||||
|
||||
function brick() { |
||||
this.id = 0, |
||||
this.pos = { |
||||
x: 40, |
||||
y: 40, |
||||
}, |
||||
this.vely = 0, |
||||
this.rot = 0, |
||||
this.velr = 0, |
||||
this.hit = false, |
||||
this.last_hitx = false, |
||||
this.last_hity = false, |
||||
this.width = 40, |
||||
this.height = 20, |
||||
this.render = function() { |
||||
if (this.hit) { |
||||
if (this.pos.y > window.c.height + 60) { |
||||
return; |
||||
} |
||||
this.vely++; |
||||
this.pos.y += this.vely; |
||||
ctx.save() |
||||
window.ctx.beginPath(); |
||||
this.rot += this.velr; |
||||
ctx.translate(this.pos.x + (this.width/2), this.pos.y + (this.height/2)); |
||||
ctx.rotate(this.rot * Math.PI); |
||||
var gradient = ctx.createRadialGradient(-(this.width/2) +10, -(this.height/2) +5, 0, -(this.width/2) + 40, -(this.height/2) + 15, 40); |
||||
gradient.addColorStop(0, 'rgba(137, 211, 234, 0.2)'); |
||||
gradient.addColorStop(1, 'rgba(137, 211, 234, 1)'); |
||||
ctx.strokeStyle = 'rgba(254, 254, 254, 0.8)'; |
||||
ctx.fillStyle = gradient; |
||||
window.ctx.rect(-(this.width/2), -(this.height/2), this.width, this.height); |
||||
window.ctx.fill(); |
||||
window.ctx.stroke(); |
||||
ctx.restore(); |
||||
return; |
||||
} |
||||
window.ctx.beginPath(); |
||||
var gradient = ctx.createRadialGradient(this.pos.x + 10, this.pos.y + 5, 0, this.pos.x + 40, this.pos.y + 15, 40); |
||||
gradient.addColorStop(0, 'rgba(137, 211, 234, 0.2)'); |
||||
gradient.addColorStop(1, 'rgba(137, 211, 234, 1)'); |
||||
ctx.strokeStyle = 'rgba(254, 254, 254, 0.8)'; |
||||
ctx.fillStyle = gradient; |
||||
window.ctx.rect(this.pos.x, this.pos.y, this.width, this.height); |
||||
window.ctx.fill(); |
||||
window.ctx.stroke(); |
||||
}, |
||||
this.test_hit = function() { |
||||
if (this.hit) { |
||||
return 0; |
||||
} |
||||
var hitx = this.test_hit_x(); |
||||
var hity = this.test_hit_y(); |
||||
if (!hitx || !hity) { |
||||
this.last_hitx = hitx; |
||||
this.last_hity = hity; |
||||
return 0; |
||||
} |
||||
if (this.last_hity) { |
||||
window.ball.vel.y = -window.ball.vel.y; |
||||
window.ball.pos.y += window.ball.vel.y; |
||||
window.ball.pos.x -= window.ball.vel.x; |
||||
} |
||||
if (this.last_hitx) { |
||||
window.ball.vel.x = -window.ball.vel.x; |
||||
window.ball.pos.x += window.ball.vel.x; |
||||
window.ball.pos.y -= window.ball.vel.y; |
||||
} |
||||
if (!this.last_hity && this.last_hitx) { |
||||
window.ball.vel.x = -window.ball.vel.x; |
||||
window.ball.pos.x += window.ball.vel.x; |
||||
window.ball.vel.y = -window.ball.vel.y; |
||||
window.ball.pos.y += window.ball.vel.y; |
||||
} |
||||
this.last_hitx = hitx; |
||||
this.last_hity = hity; |
||||
this.hit = true; |
||||
this.velr = (Math.random() * 0.04) - 0.02; |
||||
window.score++; |
||||
return 1; |
||||
}, |
||||
this.test_hit_x = function() { |
||||
if (this.left() > window.ball.right()) { |
||||
return 0; |
||||
} |
||||
if (this.right() < window.ball.left()) { |
||||
return 0; |
||||
} |
||||
return 1; |
||||
}, |
||||
this.test_hit_y = function() { |
||||
if (this.top() > window.ball.bottom()) { |
||||
return 0; |
||||
} |
||||
if (this.bottom() < window.ball.top()) { |
||||
return 0; |
||||
} |
||||
return 1; |
||||
}, |
||||
|
||||
|
||||
this.left = function() { |
||||
return this.pos.x; |
||||
}, |
||||
this.right = function() { |
||||
return this.pos.x + this.width; |
||||
}, |
||||
this.top = function() { |
||||
return this.pos.y; |
||||
}, |
||||
this.bottom = function() { |
||||
return this.pos.y + this.height; |
||||
} |
||||
}; |
||||
|
||||
press_left = false; |
||||
press_right = false; |
||||
|
||||
document.addEventListener('keydown', (event) => { |
||||
const keyName = event.key; |
||||
if (keyName == "ArrowLeft") { |
||||
press_left = true; |
||||
} |
||||
if (keyName == "ArrowRight") { |
||||
press_right = true; |
||||
} |
||||
}); |
||||
|
||||
document.addEventListener('keyup', (event) => { |
||||
const keyName = event.key; |
||||
if (keyName == "ArrowLeft") { |
||||
press_left = false; |
||||
} |
||||
if (keyName == "ArrowRight") { |
||||
press_right = false; |
||||
} |
||||
if (keyName == " ") { |
||||
if (pause && !gameover) { |
||||
if (!start_time) { |
||||
start_time = Math.floor(Date.now() / 1000); |
||||
} |
||||
pause = false; |
||||
frame(); |
||||
} else { |
||||
pause = true; |
||||
} |
||||
} |
||||
}); |
||||
|
||||
var bricks = []; |
||||
|
||||
for (var h = 0; h < 6; h++) { |
||||
for (var w = 0; w < 18; w++) { |
||||
var brickid = (18*h)+w; |
||||
bricks[brickid] = new brick(); |
||||
bricks[brickid].pos.x = 40+(w*40); |
||||
bricks[brickid].pos.y = 40+(h*20); |
||||
bricks[brickid].id = brickid; |
||||
} |
||||
} |
||||
var fires = []; |
||||
|
||||
for (var i = 0; i < 80; i++) { |
||||
fires[i] = new fire(); |
||||
} |
||||
startFireCount = 1; |
||||
|
||||
pause = true; |
||||
gameover = false; |
||||
|
||||
var frame = function() { |
||||
if (window.score >= window.bricks.length) { |
||||
endGame(); |
||||
} |
||||
window.ctx.clearRect(0, 0, window.c.width, window.c.height); |
||||
for (var i = 0; i < window.bricks.length; i++) { |
||||
window.bricks[i].render(); |
||||
} |
||||
for (var i = 0; i < window.bricks.length; i++) { |
||||
if (window.bricks[i].test_hit()) { |
||||
break; |
||||
} |
||||
} |
||||
for (var i = 0; i < window.fires.length && i < startFireCount; i++) { |
||||
window.fires[i].render(); |
||||
} |
||||
if (startFireCount <= window.fires.length) { |
||||
startFireCount++; |
||||
} |
||||
window.paddle.move(); |
||||
window.paddle.render(); |
||||
window.paddle.test_hit(); |
||||
window.ball.render(); |
||||
|
||||
if (pause) { |
||||
if (!gameover) { |
||||
ctx.font = "50px Gugi"; |
||||
ctx.fillStyle = '#FFFFFF'; |
||||
ctx.textAlign = "center"; |
||||
ctx.fillText("Ready " + curr_user_name, c.width/2, c.height/2); |
||||
ctx.fillText("Press Space to Start", c.width/2, c.height/2 + 60); |
||||
} |
||||
} else { |
||||
requestAnimationFrame(frame); |
||||
} |
||||
} |
||||
|
||||
start_time = false; |
||||
document.fonts.load('50px Gugi').then(frame); |
||||
|
||||
var endGame = function() { |
||||
window.pause = true; |
||||
window.gameover = true; |
||||
window.submitScore(); |
||||
} |
||||
|
||||
var refreshScoreBoard = function() { |
||||
var scores = JSON.parse(this.responseText); |
||||
console.log(scores); |
||||
var output = '<tr><th>Score</th><th>Time</th><th>Name</th></tr>'; |
||||
for (var i = 0; i < scores.length; i++) { |
||||
output += '<tr><td>' + scores[i].score + '</td><td>' + scores[i].time + 's</td><td>' + scores[i].name + '</td></tr>'; |
||||
} |
||||
document.getElementById("leadertable").innerHTML = output; |
||||
} |
||||
|
||||
var submitScore = function() { |
||||
var time_taken = Math.floor(Date.now() / 1000) - start_time; |
||||
var xhttp = new XMLHttpRequest(); |
||||
xhttp.addEventListener("load", getScoreBoard); |
||||
xhttp.open("GET", "api/score.php?launch_id=" + launch_id + "&score=" + window.score + "&time=" + time_taken, false); |
||||
xhttp.send(); |
||||
} |
||||
|
||||
var getScoreBoard = function() { |
||||
var xhttp = new XMLHttpRequest(); |
||||
xhttp.addEventListener("load", refreshScoreBoard); |
||||
xhttp.open("GET", "api/scoreboard.php?launch_id=" + launch_id, true); |
||||
xhttp.send(); |
||||
} |
||||
|
||||
getScoreBoard(); |
@ -1,35 +0,0 @@ |
||||
<link href="https://fonts.googleapis.com/css?family=Gugi" rel="stylesheet"> |
||||
{% if launch.isDeepLinkLaunch %} |
||||
<div class="dl-config"> |
||||
<h1>Pick a Difficulty</h1> |
||||
<ul> |
||||
<li><a href="{{ _p.web_plugin }}lti_provider/web/configure.php?diff=easy&launch_id={{ launch.getLaunchId }}">Easy</a></li> |
||||
<li><a href="{{ _p.web_plugin }}lti_provider/web/configure.php?diff=normal&launch_id={{ launch.getLaunchId }}">Normal</a></li> |
||||
<li><a href="{{ _p.web_plugin }}lti_provider/web/configure.php?diff=hard&launch_id={{ launch.getLaunchId }}">Hard</a></li> |
||||
</ul> |
||||
</div> |
||||
{% else %} |
||||
|
||||
<div id="game-screen"> |
||||
<div style="position:absolute;width:1000px;margin-left:-500px;left:50%; display:block"> |
||||
<div id="scoreboard" style="position:absolute; right:0; width:200px; height:486px"> |
||||
<h3 style="margin-left:12px;">Scoreboard - {{ courseCode }}</h3> |
||||
<table id="leadertable" style="margin-left:12px;"> |
||||
</table> |
||||
</div> |
||||
<canvas id="breakoutbg" width="800" height="500" style="position:absolute;left:0;border:0;"> |
||||
</canvas> |
||||
<canvas id="breakout" width="800" height="500" style="position:absolute;left:0;"> |
||||
</canvas> |
||||
</div> |
||||
</div> |
||||
<div class="clearfix"></div> |
||||
<button onclick="location.reload()" class="btn btn-sm" id="btn-again">Play Again</button> |
||||
<script> |
||||
var curr_diff = "{{ diff }}"; |
||||
var curr_user_name = "{{ username }}"; |
||||
var launch_id = "{{ launch.getLaunchId }}"; |
||||
</script> |
||||
<script type="text/javascript" src="{{ _p.web_plugin }}lti_provider/web/static/breakout.js" charset="utf-8"></script> |
||||
|
||||
{% endif %} |
Loading…
Reference in new issue