move over rewritten lispreader from tuxkart (with additional fixes), generalized...
[supertux.git] / src / trigger / sequence_trigger.cpp
1 #include <config.h>
2
3 #include "sequence_trigger.h"
4 #include "gameloop.h"
5 #include "lisp/lisp.h"
6 #include "lisp/writer.h"
7
8 SequenceTrigger::SequenceTrigger(const lisp::Lisp& reader)
9 {
10   reader.get("x", bbox.p1.x);
11   reader.get("y", bbox.p1.y);
12   float w, h;
13   reader.get("width", w);
14   reader.get("height", h);
15   bbox.set_size(w, h);
16   reader.get("sequence", sequence_name);
17 }
18
19 SequenceTrigger::SequenceTrigger(const Vector& pos, const std::string& sequence)
20 {
21   bbox.set_pos(pos);
22   bbox.set_size(32, 32);
23   sequence_name = sequence;
24   triggerevent = EVENT_TOUCH;
25 }
26
27 SequenceTrigger::~SequenceTrigger()
28 {
29 }
30
31 void
32 SequenceTrigger::write(lisp::Writer& writer)
33 {
34   writer.start_list("sequencetrigger");
35
36   writer.write_float("x", bbox.p1.x);
37   writer.write_float("y", bbox.p1.y);
38   writer.write_float("width", bbox.get_width());
39   writer.write_float("height", bbox.get_height());
40   writer.write_string("sequence", sequence_name);
41
42   writer.end_list("sequencetrigger");
43 }
44
45 void
46 SequenceTrigger::event(Player& , EventType type)
47 {
48   if(type == triggerevent) {
49     GameSession::current()->start_sequence(sequence_name);
50   }
51 }