script.js
changeset 84 b7834ce141c4
parent 83 228adcfd8f23
child 85 e78c4a33e958
     1.1 --- a/script.js	Fri Jan 06 00:02:26 2012 +0100
     1.2 +++ b/script.js	Fri Jan 06 01:23:40 2012 +0100
     1.3 @@ -5,7 +5,7 @@
     1.4  
     1.5  $(document).ready(function() {   
     1.6      simulation = new Simulation(document.getElementById("sim"), 
     1.7 -                                670, 50, 4, green, background);  
     1.8 +                                670, 50, 8, green, background);  
     1.9      var image = new Image();
    1.10      image.onload = init_logo;
    1.11      image.src = "images/logobase.png";
    1.12 @@ -36,10 +36,10 @@
    1.13      window.onEachFrame(update);  
    1.14      var pos = document.location.href.lastIndexOf("/") + 1; 
    1.15      var page = document.location.href.substr(pos);
    1.16 -    if (page == "experiments.html") {
    1.17 +    if (page == "mandelbrot.html") {
    1.18          draw(0, 0, 0, 0, 0);
    1.19      } else if (page == "gameoflife.html") {
    1.20 -        init_gameoflife();
    1.21 +        init_gameoflife("text");
    1.22      }
    1.23  });
    1.24  
    1.25 @@ -296,15 +296,66 @@
    1.26      context.putImageData(image, 0, 0);
    1.27  }
    1.28  
    1.29 -function init_gameoflife() {
    1.30 +var char_map = new Array();
    1.31 +char_map["A"] = new Array(new Array(0, 4), new Array(1, 3),
    1.32 +                          new Array(2, 2), new Array(3, 1),
    1.33 +                          new Array(4, 0), new Array(5, 1),
    1.34 +                          new Array(6, 2), new Array(7, 3),
    1.35 +                          new Array(8, 4), new Array(2, 3),
    1.36 +                          new Array(3, 3), new Array(4, 3),
    1.37 +                          new Array(5, 3), new Array(6, 3));
    1.38 +char_map["M"] = new Array(new Array(0, 4), new Array(0, 3),
    1.39 +                          new Array(0, 2), new Array(0, 1),
    1.40 +                          new Array(0, 0), new Array(0, 5),
    1.41 +                          new Array(5, 4), new Array(5, 3),
    1.42 +                          new Array(5, 2), new Array(5, 1),
    1.43 +                          new Array(5, 0), new Array(5, 5),
    1.44 +                          new Array(1, 1), new Array(2, 2), 
    1.45 +                          new Array(4, 2), new Array(5, 1),
    1.46 +                          new Array(3, 3));
    1.47 +char_map["E"] = new Array(new Array(0, 4), new Array(0, 3),
    1.48 +                          new Array(0, 2), new Array(0, 1),
    1.49 +                          new Array(0, 0), new Array(0, 5),
    1.50 +                          new Array(1, 0), new Array(2, 0),
    1.51 +                          new Array(3, 0),
    1.52 +                          new Array(1, 3), new Array(2, 3),                       
    1.53 +                          new Array(1, 5), new Array(2, 5),
    1.54 +                          new Array(3, 5))
    1.55 +char_map["7"] = new Array(new Array(0, 0), new Array(1, 0),
    1.56 +                          new Array(2, 0),
    1.57 +                          new Array(0, 5), new Array(0, 4),
    1.58 +                          new Array(1, 3), new Array(2, 2));
    1.59 +char_map["3"] = new Array(new Array(2, 4), new Array(2, 3),
    1.60 +                          new Array(2, 2), new Array(2, 1),
    1.61 +                          new Array(0, 0), new Array(0, 5),
    1.62 +                          new Array(1, 0), new Array(2, 0),                         
    1.63 +                          new Array(1, 3), new Array(2, 3),                          
    1.64 +                          new Array(1, 5), new Array(2, 5))
    1.65 +
    1.66 +function init_gameoflife(text) {
    1.67      var canvas = document.getElementById("gameoflife");
    1.68 +    var cell_size = 16;
    1.69      if (canvas) {
    1.70 -        gameoflife = new Simulation(canvas, 670, 670, 16,
    1.71 +        gameoflife = new Simulation(canvas, 670, 670, cell_size,
    1.72                                      green, black);
    1.73          $("#gameoflife").mousemove(function(event) { 
    1.74              gameoflife.mouse_moved(mouse_pos(event, "#gameoflife")); 
    1.75 -        });       
    1.76 -    }
    1.77 +        });   
    1.78 +        text = "ME73";
    1.79 +        var offset = new Array(13, 17);
    1.80 +        for (var c in text) {            
    1.81 +            var w = 0;
    1.82 +            for (p in char_map[text[c]]) {
    1.83 +                var x = char_map[text[c]][p][0];
    1.84 +                var y = char_map[text[c]][p][1];
    1.85 +                w = Math.max(w, x);
    1.86 +                var pos = new Array((x + offset[0]) * cell_size, 
    1.87 +                                    (y + offset[1]) * cell_size);
    1.88 +                gameoflife.activate_cell(pos);
    1.89 +            }            
    1.90 +            offset[0] += w + 2;
    1.91 +        }       
    1.92 +    }    
    1.93  }
    1.94  
    1.95  function Colour(r, g, b, a) {
    1.96 @@ -638,7 +689,7 @@
    1.97  }
    1.98  
    1.99  function Simulation(canvas, w, h, cell_size, life_colour, dead_colour) {
   1.100 -    this.last_update = 0;
   1.101 +    this.last_update = $.now() + 3000;
   1.102      this.last_draw = 0;
   1.103      this.last_mouse_moved = 0;
   1.104      this.redraw = new Array();   
   1.105 @@ -668,7 +719,7 @@
   1.106  }
   1.107  Simulation.prototype.update = function() {
   1.108      var now = $.now();
   1.109 -    if (this.pos_queue.length) {
   1.110 +    while (this.pos_queue.length) {
   1.111          var pos = this.pos_queue.pop();       
   1.112          if (pos[0] < this.canvas.width
   1.113              && pos[1] < this.canvas.height) {
   1.114 @@ -708,10 +759,13 @@
   1.115      this.cell_queue = next_cell_queue;
   1.116      this.last_update = now;  
   1.117  }
   1.118 +Simulation.prototype.activate_cell = function(pos) {
   1.119 +    this.pos_queue.push(pos);   
   1.120 +}
   1.121  Simulation.prototype.mouse_moved = function(pos) {
   1.122      var now = $.now();    
   1.123 -    if (this.last_mouse_moved + 50 < now) {
   1.124 -        this.pos_queue.push(pos);
   1.125 +    if (this.last_mouse_moved + 50 < now) {       
   1.126 +        this.pos_queue.push(pos);      
   1.127          this.last_mouse_moved = now;       
   1.128      }
   1.129  }