-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathAnimation.dart
126 lines (123 loc) · 4.45 KB
/
Animation.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
part of BigIsland;
// Big Island video game source code file
// Copyright (C) 2012 Severin Ibarluzea
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// Big Island video game source code file
// Copyright (C) 2012 Severin Ibarluzea
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
class Animation {
static const int WALK = 1;
static const int SLASH = 2;
static const int DEATH = 3;
static const int SHOOT = 4;
static const int THRUST = 5;
static const AnimationTypes = const[SLASH,SHOOT,THRUST];
static const AnimationTime = const[6,12,8];
List<FrameMap> frameMapIndex;
int size,mid;
Animation(properties){
size = (properties['size']==null)?64:properties["size"];
mid = (size/2).toInt();
frameMapIndex = new List<FrameMap>(8);
loadProperties(properties);
}
void loadProperties(properties){
properties.forEach((k,v){
switch(k){
case "walk":
loadWalkAnimation(v,(animation){
frameMapIndex[WALK] = animation;
});
break;
case "slash":
loadSlashAnimation(v,(animation){
frameMapIndex[SLASH] = animation;
});
break;
case "death":
loadDeathAnimation(v,(animation){
frameMapIndex[DEATH] = animation;
});
break;
case "shoot":
loadShootAnimation(v,(animation){
frameMapIndex[SHOOT] = animation;
});
break;
case "thrust":
loadThrustAnimation(v,(animation){
frameMapIndex[THRUST] = animation;
});
break;
}
});
}
void loadWalkAnimation(String path,callback){
//Load image, split into many images, save groups of images into FrameMaps
List<html.ImageElement> imgArray;
res.loadSplitImage(path,(List<html.ImageElement> imgs){
callback(new FrameMap(4,9,imgs));
},px:size,py:size);
}
void loadSlashAnimation(String path,callback){
//Load image, split into many images, save groups of images into FrameMaps
List<html.ImageElement> imgArray;
res.loadSplitImage(path,(List<html.ImageElement> imgs){
callback(new FrameMap(4,6,imgs));
},px:size,py:size);
}
void loadDeathAnimation(String path,callback){
//Load image, split into many images, save groups of images into FrameMaps
List<html.ImageElement> imgArray;
res.loadSplitImage(path,(List<html.ImageElement> imgs){
callback(new FrameMap(1,6,imgs));
},px:size,py:size);
}
void loadShootAnimation(String path,callback){
//Load image, split into many images, save groups of images into FrameMaps
List<html.ImageElement> imgArray;
res.loadSplitImage(path,(List<html.ImageElement> imgs){
callback(new FrameMap(4,13,imgs));
},px:size,py:size);
}
void loadThrustAnimation(String path,callback){
//Load image, split into many images, save groups of images into FrameMaps
List<html.ImageElement> imgArray;
res.loadSplitImage(path,(List<html.ImageElement> imgs){
callback(new FrameMap(4,8,imgs));
},px:size,py:size);
}
void render(html.CanvasRenderingContext2D c,int animation,int orientation,int frame){
c.save();
c.translate(-mid,-mid);
FrameMap fmap = frameMapIndex[animation];
if (fmap!=null){
fmap.render(c, orientation,frame);
}
c.restore();
}
}