Browse Source

Split up JS into separate files

master
Chris Smith 12 years ago
parent
commit
aa5f82c873
3 changed files with 178 additions and 179 deletions
  1. 2
    179
      index.html
  2. 22
    0
      res/js/util.js
  3. 154
    0
      res/js/viewer.js

+ 2
- 179
index.html View File

@@ -6,185 +6,8 @@
6 6
   <script src="res/js/jquery-ui-1.8.17.custom.min.js" type="text/javascript"></script>
7 7
   <script src="res/data/levels.js" type="text/javascript"></script>
8 8
   <script src="res/data/towers.js" type="text/javascript"></script>
9
-  <script type="text/javascript">
10
-   $(function() {
11
-    var thisLevel;
12
-
13
-    $.fn.rotate = function(rot) {
14
-     return this.css('-webkit-transform', 'rotate(' + rot + 'deg)')
15
-                .css('-moz-transform', 'rotate(' + rot + 'deg')
16
-                .css('-o-transform', 'rotate(' + rot + 'deg')
17
-                .css('-ms-transform', 'rotate(' + rot + 'deg')
18
-                .css('transform', 'rotate(' + rot + 'deg');
19
-    };
20
-
21
-    $.fn.offsetFrom = function(el) {
22
-     var offset = this.offset();
23
-     var otherOffset = $(el).offset();
24
-     return {top: offset.top - otherOffset.top, left: offset.left - otherOffset.left};
25
-    }
26
-
27
-    $.fn.offsetCentre = function() {
28
-     var offset = this.offset();
29
-     return {top: offset.top + this.height() / 2, left: offset.left + this.width() / 2};
30
-    }
31
-
32
-    function updateDefenseUnits() {
33
-     var used = 0;
34
-
35
-     $.each(layout.towers, function() {
36
-      used += towers[this.type].units;
37
-     });
38
-
39
-     $('#du_used').text(used);
40
-
41
-     var hasClass = $('#du_wrapper').hasClass('over');
42
-
43
-     $('#du_wrapper').removeClass('over');
44
-     if (used > thisLevel.du) {
45
-      $('#du_wrapper').addClass('over');
46
-      if (!hasClass) {
47
-       $('#du_wrapper').effect('pulsate', {times: 2}, 'fast');
48
-      }
49
-     }
50
-    }
51
-
52
-    function getURLParameter(name) {
53
-     return decodeURIComponent((location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]);
54
-    }
55
-
56
-    function createBaseElForTower(key) {
57
-     var type = towers[key];
58
-
59
-     return $('<img>')
60
-       .attr('src', type.image)
61
-       .attr('alt', type.name)
62
-       .data('type', key)
63
-       .addClass(type.class.toLowerCase())
64
-       .addClass('tower');
65
-    }
66
-
67
-    function createElForTower(tower) {
68
-     return createBaseElForTower(tower.type)
69
-       .data('tower', tower)
70
-       .draggable({
71
-        start: function(evt) {
72
-         return !evt.shiftKey;
73
-        },
74
-        stop: function() {
75
-         $(this).data('tower').position = adjustMapOffset($(this).offsetFrom('#mapcontainer'), thisLevel, 1);
76
-        }
77
-       })
78
-       .css('position', 'absolute')
79
-       .offset(adjustMapOffset(tower.position, thisLevel))
80
-       .rotate(tower.rotation)
81
-       .dblclick(function() {
82
-        layout.towers = $.grep(layout.towers, function(value) { return value != tower; });
83
-        $(this).remove();
84
-        updateDefenseUnits();
85
-       })
86
-       .mousedown(function(e) {
87
-        if (!e.shiftKey) {
88
-         return;
89
-        }
90
-
91
-        var el = $(this);
92
-        var centre = el.offsetCentre();
93
-        var mouseX = e.pageX - centre.left, mouseY = e.pageY - centre.top;
94
-        var initialMouseAngle = Math.atan2(mouseY, mouseX);
95
-        var initialRotation = tower.rotation;
96
-
97
-        var moveHandler = function(evt) {
98
-          var mouseX = evt.pageX - centre.left, mouseY = evt.pageY - centre.top;
99
-          var newMouseAngle = Math.atan2(mouseY, mouseX);
100
-          var mouseDelta = newMouseAngle - initialMouseAngle;
101
-          var rotation = initialRotation + newMouseAngle * (180 / Math.PI);
102
-          tower.rotation = rotation;
103
-          el.rotate(rotation);
104
-        };
105
-
106
-        var upHandler = function() {
107
-         $(document).unbind('mousemove', moveHandler);
108
-         $(document).unbind('mouseup', upHandler);
109
-        };
110
-
111
-        $(document).mousemove(moveHandler);
112
-        $(document).mouseup(upHandler);
113
-
114
-        return false;
115
-       });
116
-    }
117
-
118
-    function adjustMapOffset(towerOffset, level, reverse) {
119
-     var res = $.extend({}, towerOffset);
120
-
121
-     if (level.offsets && !reverse) {
122
-      res.left += level.offsets.left;
123
-      res.top += level.offsets.top;
124
-     }
125
-
126
-     if (level.scale) {
127
-      if (reverse) {
128
-       res.left /= level.scale.left;
129
-       res.top /= level.scale.top;
130
-      } else {
131
-       res.left *= level.scale.left;
132
-       res.top *= level.scale.top;
133
-      }
134
-     }
135
-
136
-     if (level.offsets && reverse) {
137
-      res.left -= level.offsets.left;
138
-      res.top -= level.offsets.top;
139
-     }
140
-
141
-     return res;
142
-    }
143
-
144
-    $.each(towers, function(key) {
145
-     createBaseElForTower(key, this).appendTo($('#palette'));
146
-    });
147
-
148
-    $('.tower,.core').draggable({
149
-     helper: 'clone',
150
-     containment: 'document',
151
-     stop: function(evt, ui) {
152
-      if (!$(this).data('type')) {
153
-       return;
154
-      }
155
-
156
-      var tower = {
157
-       type: $(this).data('type'),
158
-       rotation: 0,
159
-       position: adjustMapOffset(ui.helper.offsetFrom('#mapcontainer'), thisLevel, 1)
160
-      };
161
-
162
-      layout.towers.push(tower);
163
-      createElForTower(tower).appendTo($('#mapcontainer'));
164
-      updateDefenseUnits();
165
-     }
166
-    });
167
-
168
-    function updateLayout() {
169
-     thisLevel = levels[layout.level - 1];
170
-     $('#mapcontainer').css('background-image', 'url("' + thisLevel.minimap + '")');
171
-
172
-     $('#notecontent').val(layout.notes);
173
-     $.each(layout.towers, function() {
174
-      createElForTower(this).appendTo($('#mapcontainer'));
175
-      updateDefenseUnits();
176
-     });
177
-
178
-     $('#du_total').text(thisLevel.du);
179
-    }
180
-
181
-    function getLayout(id) {
182
-     $.getScript('res/data/layouts/' + id + '.js', updateLayout);
183
-    }
184
-
185
-    getLayout(parseInt(getURLParameter('id')) || 13934);
186
-   });
187
-  </script>
9
+  <script src="res/js/util.js" type="text/javascript"></script>
10
+  <script src="res/js/viewer.js" type="text/javascript"></script>
188 11
   <link rel="stylesheet" type="text/css" href="res/style.css">
189 12
  </head>
190 13
  <body>

+ 22
- 0
res/js/util.js View File

@@ -0,0 +1,22 @@
1
+$.fn.rotate = function(rot) {
2
+ return this.css('-webkit-transform', 'rotate(' + rot + 'deg)')
3
+            .css('-moz-transform', 'rotate(' + rot + 'deg')
4
+            .css('-o-transform', 'rotate(' + rot + 'deg')
5
+            .css('-ms-transform', 'rotate(' + rot + 'deg')
6
+            .css('transform', 'rotate(' + rot + 'deg');
7
+};
8
+
9
+$.fn.offsetFrom = function(el) {
10
+ var offset = this.offset();
11
+ var otherOffset = $(el).offset();
12
+ return {top: offset.top - otherOffset.top, left: offset.left - otherOffset.left};
13
+}
14
+
15
+$.fn.offsetCentre = function() {
16
+ var offset = this.offset();
17
+ return {top: offset.top + this.height() / 2, left: offset.left + this.width() / 2};
18
+}
19
+
20
+function getURLParameter(name) {
21
+ return decodeURIComponent((location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]);
22
+}

+ 154
- 0
res/js/viewer.js View File

@@ -0,0 +1,154 @@
1
+$(function() {
2
+ var thisLevel;
3
+
4
+ function updateDefenseUnits() {
5
+  var used = 0;
6
+
7
+  $.each(layout.towers, function() {
8
+   used += towers[this.type].units;
9
+  });
10
+
11
+  $('#du_used').text(used);
12
+
13
+  var hasClass = $('#du_wrapper').hasClass('over');
14
+
15
+  $('#du_wrapper').removeClass('over');
16
+  if (used > thisLevel.du) {
17
+   $('#du_wrapper').addClass('over');
18
+   if (!hasClass) {
19
+    $('#du_wrapper').effect('pulsate', {times: 2}, 'fast');
20
+   }
21
+  }
22
+ }
23
+
24
+ function createBaseElForTower(key) {
25
+  var type = towers[key];
26
+
27
+  return $('<img>')
28
+    .attr('src', type.image)
29
+    .attr('alt', type.name)
30
+    .data('type', key)
31
+    .addClass(type.class.toLowerCase())
32
+    .addClass('tower');
33
+ }
34
+
35
+ function createElForTower(tower) {
36
+  return createBaseElForTower(tower.type)
37
+    .data('tower', tower)
38
+    .draggable({
39
+     start: function(evt) {
40
+      return !evt.shiftKey;
41
+     },
42
+     stop: function() {
43
+      $(this).data('tower').position = adjustMapOffset($(this).offsetFrom('#mapcontainer'), thisLevel, 1);
44
+     }
45
+    })
46
+    .css('position', 'absolute')
47
+    .offset(adjustMapOffset(tower.position, thisLevel))
48
+    .rotate(tower.rotation)
49
+    .dblclick(function() {
50
+     layout.towers = $.grep(layout.towers, function(value) { return value != tower; });
51
+     $(this).remove();
52
+     updateDefenseUnits();
53
+    })
54
+    .mousedown(function(e) {
55
+     if (!e.shiftKey) {
56
+      return;
57
+     }
58
+
59
+     var el = $(this);
60
+     var centre = el.offsetCentre();
61
+     var mouseX = e.pageX - centre.left, mouseY = e.pageY - centre.top;
62
+     var initialMouseAngle = Math.atan2(mouseY, mouseX);
63
+     var initialRotation = tower.rotation;
64
+
65
+     var moveHandler = function(evt) {
66
+       var mouseX = evt.pageX - centre.left, mouseY = evt.pageY - centre.top;
67
+       var newMouseAngle = Math.atan2(mouseY, mouseX);
68
+       var mouseDelta = newMouseAngle - initialMouseAngle;
69
+       var rotation = initialRotation + newMouseAngle * (180 / Math.PI);
70
+       tower.rotation = rotation;
71
+       el.rotate(rotation);
72
+     };
73
+
74
+     var upHandler = function() {
75
+      $(document).unbind('mousemove', moveHandler);
76
+      $(document).unbind('mouseup', upHandler);
77
+     };
78
+
79
+     $(document).mousemove(moveHandler);
80
+     $(document).mouseup(upHandler);
81
+
82
+     return false;
83
+    });
84
+ }
85
+
86
+ function adjustMapOffset(towerOffset, level, reverse) {
87
+  var res = $.extend({}, towerOffset);
88
+
89
+  if (level.offsets && !reverse) {
90
+   res.left += level.offsets.left;
91
+   res.top += level.offsets.top;
92
+  }
93
+
94
+  if (level.scale) {
95
+   if (reverse) {
96
+    res.left /= level.scale.left;
97
+    res.top /= level.scale.top;
98
+   } else {
99
+    res.left *= level.scale.left;
100
+    res.top *= level.scale.top;
101
+   }
102
+  }
103
+
104
+  if (level.offsets && reverse) {
105
+   res.left -= level.offsets.left;
106
+   res.top -= level.offsets.top;
107
+  }
108
+
109
+  return res;
110
+ }
111
+
112
+ $.each(towers, function(key) {
113
+  createBaseElForTower(key, this).appendTo($('#palette'));
114
+ });
115
+
116
+ $('.tower,.core').draggable({
117
+  helper: 'clone',
118
+  containment: 'document',
119
+  stop: function(evt, ui) {
120
+   if (!$(this).data('type')) {
121
+    return;
122
+   }
123
+
124
+   var tower = {
125
+    type: $(this).data('type'),
126
+    rotation: 0,
127
+    position: adjustMapOffset(ui.helper.offsetFrom('#mapcontainer'), thisLevel, 1)
128
+   };
129
+
130
+   layout.towers.push(tower);
131
+   createElForTower(tower).appendTo($('#mapcontainer'));
132
+   updateDefenseUnits();
133
+  }
134
+ });
135
+
136
+ function updateLayout() {
137
+  thisLevel = levels[layout.level - 1];
138
+  $('#mapcontainer').css('background-image', 'url("' + thisLevel.minimap + '")');
139
+
140
+  $('#notecontent').val(layout.notes);
141
+  $.each(layout.towers, function() {
142
+   createElForTower(this).appendTo($('#mapcontainer'));
143
+   updateDefenseUnits();
144
+  });
145
+
146
+  $('#du_total').text(thisLevel.du);
147
+ }
148
+
149
+ function getLayout(id) {
150
+  $.getScript('res/data/layouts/' + id + '.js', updateLayout);
151
+ }
152
+
153
+ getLayout(parseInt(getURLParameter('id')) || 13934);
154
+});

Loading…
Cancel
Save