Mercurial > projects > myrrdin
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 |
rev | line source |
---|---|
0 | 1 module renderer; |
2 | |
3 import dsfml.window.all; | |
4 import dsfml.system.all; | |
5 import dsfml.graphics.all; | |
6 | |
7 import consumer; | |
8 import imagecache; | |
4
292df259cc85
view + sprite consumers, animated sprite working
fred@reichbier.de
parents:
0
diff
changeset
|
9 import animatedsprite; |
0 | 10 |
11 class Renderer { | |
12 public RenderWindow app; | |
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 | 16 |
17 this(char[] title, int width, int height, int depth=32) { | |
18 this.app = new RenderWindow(VideoMode(width, height, depth), title); | |
19 this.app.setFramerateLimit(40); | |
20 | |
21 this.cache = new Cache("."); // TODO | |
22 } | |
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 | 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 | 57 } |
58 | |
59 /* start the mainloop */ | |
60 void mainloop() { | |
61 Event evt; | |
62 | |
63 while(this.app.isOpened()) { | |
64 // handle all events | |
65 while(this.app.getEvent(evt)) { | |
66 if (evt.Type == Event.EventType.CLOSED) { | |
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 | 72 } |
73 } | |
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 | 76 consumer.draw(); |
77 } | |
78 // display all | |
79 this.app.display(); | |
80 } | |
81 } | |
82 } |