annotate src/renderer.d @ 4:292df259cc85

view + sprite consumers, animated sprite working
author fred@reichbier.de
date Fri, 18 Jul 2008 16:12:41 +0200
parents a2d653eb9e99
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
1 module renderer;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
2
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
3 import dsfml.window.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
4 import dsfml.system.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
5 import dsfml.graphics.all;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
6
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
7 import consumer;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
8 import imagecache;
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
9 import animatedsprite;
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
10
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
11 class Renderer {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
12 public RenderWindow app;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
13 public Cache cache;
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
14 private Consumer[] draw_consumers;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
15 private Consumer[] event_consumers;
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
16
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
17 this(char[] title, int width, int height, int depth=32) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
18 this.app = new RenderWindow(VideoMode(width, height, depth), title);
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
19 this.app.setFramerateLimit(40);
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
20
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
21 this.cache = new Cache("."); // TODO
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
22 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
23
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
24 /* add a consumer for event handling and drawing */
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
25 void add_consumer(Consumer consumer) {
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
26 this.add_event_consumer(consumer);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
27 this.add_draw_consumer(consumer);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
28 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
29
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
30 /* add a consumer only for event handling */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
31 void add_event_consumer(Consumer consumer) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
32 this.event_consumers ~= consumer;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
33 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
34
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
35 /* add a consumer only for drawing */
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
36 void add_draw_consumer(Consumer consumer) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
37 this.draw_consumers ~= consumer;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
38 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
39
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
40 /* 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
41 void draw(AnimatedSprite obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
42 obj.update();
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
43 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
44 }
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 void draw(IDrawable obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
47 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
48 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
49
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
50 void draw(Sprite obj) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
51 if(cast(AnimatedSprite)obj !is null) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
52 this.draw(cast(AnimatedSprite)obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
53 }
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
54 else {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
55 this.app.draw(obj);
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
56 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
57 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
58
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
59 /* start the mainloop */
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
60 void mainloop() {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
61 Event evt;
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
62
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
63 while(this.app.isOpened()) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
64 // handle all events
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
65 while(this.app.getEvent(evt)) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
66 if (evt.Type == Event.EventType.CLOSED) {
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
67 this.app.close();
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
68 } else {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
69 foreach(Consumer consumer; this.event_consumers) {
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
70 if(consumer.handle_event(evt)) break;
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
71 }
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
72 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
73 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
74 // draw all
4
292df259cc85 view + sprite consumers, animated sprite working
fred@reichbier.de
parents: 0
diff changeset
75 foreach(Consumer consumer; this.draw_consumers) {
0
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
76 consumer.draw();
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
77 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
78 // display all
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
79 this.app.display();
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
80 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
81 }
a2d653eb9e99 first working version.
fred@reichbier.de
parents:
diff changeset
82 }