WebFund 2014W Lecture 17
The video from the lecture given on March 14, 2014 is available:
adventure-editor-class is also available (without modules, you'll have to run "npm install" or copy node_modules from adventure-editor or similar application).
Assignment 3 Tips
"Load" button tips:
- We need to create editor.js and update getContents.
The following client-side code is created in editor.js. When the user click on the load button, the $.getJSON call specifies getContents as the url to send the request to:
$(function(){
var updateRoom = function(room) {
$('#roomTitle').html(room.title);
$('#description').html(room.description);
if (room.activity) {
$('#activity').html(room.activity);
} else {
$('#activity').html("");
}
$('#exits').html(room.roomExits + "");
}
$("#loadRoom").on("click",function(){
$.getJSON("/getContents",
{ theRoom: $("#roomName").val()},
updateRoom);
});
});
- In index.js, the function getContents handles the request find the room in the roomsCollection and loads the queried room
var getContents = function(req, res) { var theRoom; if (req.session.player) { theRoom = req.session.player.room; } else if (req.session.editorName) { theRoom = req.query.theRoom; } else { console.log("Invalid getContents request."); res.send("Error: NotLoggedIn"); return; } roomsCollection.findOne( {name: theRoom}, function(err, room) { if (err || !room) { room = defaultRoom; } res.send(room); } ); }
"Save" button tips:
- The current save button does a POST to /updateRooms.
- It already works and sends everything. All we need to do is implement updateRoom on the server side.
- "Cannot POST /updateRoom" means we don't have a route to updateRoom, so we would need to create one and write a function for updateRoom.
- After the room is saved we should decide what happens after, such as having a page that says "Room saved" and takes you back to the editor.
Drop down button tips:
- We could use a table, or just a simple button drop down using Bootstrap.
HTML Canvas Element
- Part of HTML5
- scriptable rendering of 2D shapes and bitmap images
- We first set up a HTML canvas widget
- Give it a name (ID), and dimensions
<canvas id="example" width="200" height="200"> We put some text here to display if browser does not support HTML5 canvas. </canvas>
- We can use Javascript to draw on the canvas.
- The following code draws a red box and circle on the screen.
<script>
var example = document.getElementById('example');
var context = example.getContext('2d');
context.fillStyle = 'red';
context.fillRect(30, 30, 50, 50)
//The following code draws a circle.
context.beginPath();
context.arc(100, 75, 50, 0, 2 *Math.PI);
context.stroke();
</script>
- Drawing a arc is similar in languages such as Processing.
- Arcs are defined by a center point, a radius, a starting angle, an ending angle, and the drawing direction (either clockwise or anticlockwise).
- To use JQuery, we need to add it in the <head>
<script src="http://code.jquery.com/jquery-1.11.0.min,js"></script>
- We can now use JQuery and write
var example = $('example'); var context = example[0].getContext('2d');
- To use javascript we need to get the canvas object.
- We have to get the standard object out of the JQuery object (what the [0] is).
- Must use getContext(). In this case the parameter is "2d", we could also use 3d (WebGL) and others.
- Then we can use context.arc, context.fillStyle etc. for example to drawing things.