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.