annotate import/myrrdin/animatedsprite.d @ 6:510541745cd1

turned myrrdin into package.
author fred@reichbier.de
date Sat, 19 Jul 2008 15:10:56 +0200
parents f4b89014ad39
children 806b3781f4e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
1 /*
6
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
2 myrrdin, a 2d tile engine
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
3 Copyright (c) 2008 Friedrich Weber
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
4
6
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
5 Permission is hereby granted, free of charge, to any person obtaining a copy
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
6 of this software and associated documentation files (the "Software"), to deal
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
7 in the Software without restriction, including without limitation the rights
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
9 copies of the Software, and to permit persons to whom the Software is
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
10 furnished to do so, subject to the following conditions:
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
11
6
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
12 The above copyright notice and this permission notice shall be included in
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
13 all copies or substantial portions of the Software.
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
14
6
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
21 THE SOFTWARE.
510541745cd1 turned myrrdin into package.
fred@reichbier.de
parents: 5
diff changeset
22 */
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
23
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
24 module animatedsprite;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
25
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
26 import dsfml.window.all;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
27 import dsfml.system.all;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
28 import dsfml.graphics.all;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
29
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
30 class Frame {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
31 Image image;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
32 int length; // length in frames
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 this(Image image, int length) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
35 this.image = image;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
36 this.length = length;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
37 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
38 }
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 class Animation {
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
41 public Frame[] frames;
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
42 private int current_frame_idx;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
43 private Frame current_frame;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
44 private int frame_counter;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
45
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
46 this() {
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 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
49
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
50 /* add a frame */
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
51 void add_frame(Image image, int length) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
52 this.frames ~= new Frame(image, length);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
53 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
54
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
55 void add_frame(Frame frame) {
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
56 this.frames ~= frame;
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
57 }
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
58
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
59 /* internal. you do not have to call it */
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
60 void play() {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
61 this.current_frame = this.frames[0];
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
62 this.current_frame_idx = 0;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
63 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
64
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
65 /* return the current image or null if the animation ended */
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
66 Image get_image() {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
67 if(this.frame_counter >= this.current_frame.length) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
68 this.frame_counter = 0;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
69 this.current_frame_idx++;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
70 if (this.frames.length <= this.current_frame_idx) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
71 // animation stop
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
72 return null;
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 this.current_frame = this.frames[this.current_frame_idx];
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
75 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
76 this.frame_counter++;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
77 return this.current_frame.image;
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 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
80
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
81 class AnimatedSprite : Sprite {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
82 private Animation current_animation = null;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
83 private bool is_loop = false;
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 /* play an animation now. */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
86 void play_animation(Animation animation, bool loop=false) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
87 this.current_animation = animation;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
88 this.is_loop = loop;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
89 this.current_animation.play();
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
90 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
91
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
92 bool is_playing() {
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
93 return (this.current_animation !is null);
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
94 }
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
95
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
96 /* update everything. Perfect for an animated sprite */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
97 void update() {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
98 if(this.current_animation) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
99 Image img = this.current_animation.get_image();
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
100 if(img) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
101 this.setImage(img);
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 else if (this.is_loop) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
104 this.current_animation.play(); // is a loop, play again
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
105 } else {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
106 this.current_animation = null;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
107 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
108 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
109 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
diff changeset
110 }