b57624c39466302c45ff44fa42d176223587660f
[supertux.git] / src / trigger / secretarea_trigger.cpp
1 #include <config.h>
2
3 #include "secretarea_trigger.h"
4 #include "utils/lispwriter.h"
5 #include "gameloop.h"
6
7 #define MESSAGE_TIME 3.5
8
9 //TODO: Count numbers of triggered/total secret areas
10 SecretAreaTrigger::SecretAreaTrigger(LispReader& reader)
11 {
12   reader.read_float("x", bbox.p1.x);
13   reader.read_float("y", bbox.p1.y);
14   bbox.set_size(32, 32);
15
16   reader.read_string("message", message);
17   message_displayed = false;
18 }
19
20 SecretAreaTrigger::SecretAreaTrigger(const Vector& pos)
21 {
22   bbox.set_pos(pos);
23   bbox.set_size(32, 32);
24   message = "You found a secret area!";
25   message_displayed = false;
26 }
27
28 SecretAreaTrigger::~SecretAreaTrigger()
29 {
30 }
31
32 void
33 SecretAreaTrigger::write(LispWriter& writer)
34 {
35   writer.start_list("secretarea");
36
37   writer.write_float("x", bbox.p1.x);
38   writer.write_float("y", bbox.p1.y);
39   writer.write_float("width", bbox.get_width());
40   writer.write_float("height", bbox.get_height());
41   writer.write_string("message", message);
42
43   writer.end_list("secretarea");
44 }
45
46 void
47 SecretAreaTrigger::draw(DrawingContext& context)
48 {
49    if (message_timer.started()) {
50       context.push_transform();
51       context.set_translation(Vector(0, 0));
52       Vector pos = Vector(0, screen->h/2 - gold_text->get_height()/2);
53       context.draw_center_text(gold_text, message, pos, LAYER_GUI);
54       context.pop_transform();
55    }
56    if (message_timer.check()) {
57       remove_me();
58    }
59 }
60
61 void
62 SecretAreaTrigger::event(Player& , EventType type)
63 {
64   if(type == EVENT_TOUCH) {
65     if (!message_displayed) {
66       message_timer.start(MESSAGE_TIME);
67       message_displayed = true;
68     }
69   }
70 }