Pārlūkot izejas kodu

Normalise tower construction

Dragging + dropping a tower now creates a new entry in the model,
instead of just a new DOM node
master
Chris Smith 12 gadus atpakaļ
vecāks
revīzija
09626bf9f5
1 mainītis faili ar 48 papildinājumiem un 20 dzēšanām
  1. 48
    20
      index.html

+ 48
- 20
index.html Parādīt failu

@@ -9,60 +9,88 @@
9 9
   <script src="res/data/layout.js" type="text/javascript"></script>
10 10
   <script type="text/javascript">
11 11
    $(function() {
12
+    var activeTower, thisLevel;
13
+
12 14
     $.fn.rotate = function(rot) {
13 15
      return this.css('-webkit-transform', 'rotate(' + rot + 'deg)')
14 16
                 .css('-moz-transform', 'rotate(' + rot + 'deg');
15 17
     };
16 18
 
17
-    function createElForTower(type) {
19
+    $.fn.offsetFrom = function(el) {
20
+     var offset = this.offset();
21
+     var otherOffset = $(el).offset();
22
+     return {top: offset.top - otherOffset.top, left: offset.left - otherOffset.left};
23
+    }
24
+
25
+    function createBaseElForTower(key) {
26
+     var type = towers[key];
27
+
18 28
      return $('<img>')
19 29
        .attr('src', type.image)
20 30
        .attr('alt', type.name)
31
+       .data('type', key)
21 32
        .addClass('tower');
22 33
     }
23 34
 
24
-    function adjustMapOffset(towerOffset, level) {
35
+    function createElForTower(tower) {
36
+     return createBaseElForTower(tower.type)
37
+       .data('tower', tower)
38
+       .draggable()
39
+       .css('position', 'absolute')
40
+       .offset(adjustMapOffset(tower.position, thisLevel))
41
+       .rotate(tower.rotation);
42
+    }
43
+
44
+    function adjustMapOffset(towerOffset, level, reverse) {
25 45
      var res = $.extend({}, towerOffset);
26 46
 
27
-     if (level.offsets) {
47
+     if (level.offsets && !reverse) {
28 48
       res.left += level.offsets.left;
29 49
       res.top += level.offsets.top;
30 50
      }
31 51
 
32 52
      if (level.scale) {
33
-      res.left *= level.scale.left;
34
-      res.top *= level.scale.top;
53
+      if (reverse) {
54
+       res.left /= level.scale.left;
55
+       res.top /= level.scale.top;
56
+      } else {
57
+       res.left *= level.scale.left;
58
+       res.top *= level.scale.top;
59
+      }
60
+     }
61
+
62
+     if (level.offsets && reverse) {
63
+      res.left -= level.offsets.left;
64
+      res.top -= level.offsets.top;
35 65
      }
36 66
 
37 67
      return res;
38 68
     }
39 69
 
40
-    $.each(towers, function() {
41
-     createElForTower(this)
42
-       .appendTo($('#palette'));
70
+    $.each(towers, function(key) {
71
+     createBaseElForTower(key, this).appendTo($('#palette'));
43 72
     });
44 73
 
45 74
     $('.tower,.core').draggable({
46 75
      helper: 'clone',
47 76
      containment: 'window',
48 77
      stop: function(evt, ui) {
49
-      $(this).clone()
50
-        .draggable()
51
-        .css('position', 'absolute')
52
-        .offset(ui.helper.offset())
53
-        .appendTo(document.body);
78
+      var tower = {
79
+       type: $(this).data('type'),
80
+       rotation: 0,
81
+       position: adjustMapOffset(ui.helper.offsetFrom('#mapcontainer'), thisLevel, 1)
82
+      };
83
+
84
+      layout.towers.push(tower);
85
+      createElForTower(tower).appendTo($('#mapcontainer'));
54 86
      }
55 87
     });
56 88
 
57
-    $('#mapcontainer').css('background-image', 'url("' + levels[layout.level - 1].minimap + '")');
89
+    thisLevel = levels[layout.level - 1];
90
+    $('#mapcontainer').css('background-image', 'url("' + thisLevel.minimap + '")');
58 91
 
59 92
     $.each(layout.towers, function() {
60
-     createElForTower(towers[this.type])
61
-       .draggable()
62
-       .css('position', 'absolute')
63
-       .offset(adjustMapOffset(this.position, levels[layout.level - 1]))
64
-       .rotate(this.rotation)
65
-       .appendTo($('#mapcontainer'));
93
+     createElForTower(this).appendTo($('#mapcontainer'));
66 94
     });
67 95
    });
68 96
   </script>

Notiek ielāde…
Atcelt
Saglabāt