annotate import/myrrdin/renderer.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/renderer.d@292df259cc85
children 510541745cd1
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 /*
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
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
18 module renderer;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
19
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
20 import dsfml.window.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
21 import dsfml.system.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
22 import dsfml.graphics.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
23
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
24 import consumer;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
25 import imagecache;
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
26 import animatedsprite;
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
27
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
28 class Renderer {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
29 public RenderWindow app;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
30 public Cache cache;
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
31 private Consumer[] draw_consumers;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
32 private Consumer[] event_consumers;
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
33
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
34 this(char[] title, int width, int height, int depth=32) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
35 this.app = new RenderWindow(VideoMode(width, height, depth), title);
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
36 this.app.setFramerateLimit(40);
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
37
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
38 this.cache = new Cache("."); // TODO
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
39 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
40
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
41 /* add a consumer for event handling and drawing */
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
42 void add_consumer(Consumer consumer) {
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
43 this.add_event_consumer(consumer);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
44 this.add_draw_consumer(consumer);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
45 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
46
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
47 /* add a consumer only for event handling */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
48 void add_event_consumer(Consumer consumer) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
49 this.event_consumers ~= consumer;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
50 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
51
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
52 /* add a consumer only for drawing */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
53 void add_draw_consumer(Consumer consumer) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
54 this.draw_consumers ~= consumer;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
55 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
56
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
57 /* use this instead of this.app.draw - it contains a hook for animated sprites */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
58 void draw(AnimatedSprite obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
59 obj.update();
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
60 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
61 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
62
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
63 void draw(IDrawable obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
64 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
65 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
66
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
67 void draw(Sprite obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
68 if(cast(AnimatedSprite)obj !is null) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
69 this.draw(cast(AnimatedSprite)obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
70 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
71 else {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
72 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
73 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
74 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
75
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
76 /* start the mainloop */
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
77 void mainloop() {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
78 Event evt;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
79
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
80 while(this.app.isOpened()) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
81 // handle all events
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
82 while(this.app.getEvent(evt)) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
83 if (evt.Type == Event.EventType.CLOSED) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
84 this.app.close();
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
85 } else {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
86 foreach(Consumer consumer; this.event_consumers) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
87 if(consumer.handle_event(evt)) break;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
88 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
89 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
90 }
5
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
91 // loop iteration
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
92 foreach(Consumer consumer; this.draw_consumers) {
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
93 consumer.loop_iteration();
f4b89014ad39 added moving figure stuff + animated sprites. not usable atm.
fred@reichbier.de
parents: 4
diff changeset
94 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
95 // draw all
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
96 foreach(Consumer consumer; this.draw_consumers) {
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
97 consumer.draw();
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
98 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
99 // display all
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
100 this.app.display();
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
101 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
102 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
103 }