Mercurial > projects > myrrdin
annotate import/myrrdin/animatedsprite.d @ 5:f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
author | fred@reichbier.de |
---|---|
date | Sat, 19 Jul 2008 14:33:08 +0200 |
parents | src/animatedsprite.d@292df259cc85 |
children | 510541745cd1 |
rev | line source |
---|---|
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
1 /* |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
2 This file is part of myrrdin. |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
3 |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
4 myrrdin is free software: you can redistribute it and/or modify |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
5 it under the terms of the GNU Lesser General Public License as |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
6 published by the Free Software Foundation, either version 3 of |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
7 the License, or (at your option) any later version. |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
8 |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
9 myrrdin is distributed in the hope that it will be useful, |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
12 GNU Lesser General Public License for more details. |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
13 |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
14 You should have received a copy of the GNU Lesser General Public |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
15 License along with myrrdin. If not, see <http://www.gnu.org/licenses/>. |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
16 */ |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
17 |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
18 module animatedsprite; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
19 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
20 import dsfml.window.all; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
21 import dsfml.system.all; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
22 import dsfml.graphics.all; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
23 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
24 class Frame { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
25 Image image; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
26 int length; // length in frames |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
27 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
28 this(Image image, int length) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
29 this.image = image; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
30 this.length = length; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
31 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
32 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
33 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
34 class Animation { |
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
35 public Frame[] frames; |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
36 private int current_frame_idx; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
37 private Frame current_frame; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
38 private int frame_counter; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
39 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
40 this() { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
41 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
42 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
43 |
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
44 /* add a frame */ |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
45 void add_frame(Image image, int length) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
46 this.frames ~= new Frame(image, length); |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
47 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
48 |
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
49 void add_frame(Frame frame) { |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
50 this.frames ~= frame; |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
51 } |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
52 |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
53 /* internal. you do not have to call it */ |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
54 void play() { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
55 this.current_frame = this.frames[0]; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
56 this.current_frame_idx = 0; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
57 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
58 |
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
59 /* return the current image or null if the animation ended */ |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
60 Image get_image() { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
61 if(this.frame_counter >= this.current_frame.length) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
62 this.frame_counter = 0; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
63 this.current_frame_idx++; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
64 if (this.frames.length <= this.current_frame_idx) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
65 // animation stop |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
66 return null; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
67 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
68 this.current_frame = this.frames[this.current_frame_idx]; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
69 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
70 this.frame_counter++; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
71 return this.current_frame.image; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
72 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
73 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
74 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
75 class AnimatedSprite : Sprite { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
76 private Animation current_animation = null; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
77 private bool is_loop = false; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
78 |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
79 /* play an animation now. */ |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
80 void play_animation(Animation animation, bool loop=false) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
81 this.current_animation = animation; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
82 this.is_loop = loop; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
83 this.current_animation.play(); |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
84 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
85 |
5
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
86 bool is_playing() { |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
87 return (this.current_animation !is null); |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
88 } |
f4b89014ad39
added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents:
4
diff
changeset
|
89 |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
90 /* update everything. Perfect for an animated sprite */ |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
91 void update() { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
92 if(this.current_animation) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
93 Image img = this.current_animation.get_image(); |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
94 if(img) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
95 this.setImage(img); |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
96 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
97 else if (this.is_loop) { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
98 this.current_animation.play(); // is a loop, play again |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
99 } else { |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
100 this.current_animation = null; |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
101 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
102 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
103 } |
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff
changeset
|
104 } |