26
26
27
27
TextArea::TextArea (const ReaderMapping& mapping) :
28
28
TriggerBase(mapping),
29
- m_started(false ),
30
- m_inside(false ),
31
29
m_once(false ),
32
- m_finished(false ),
33
30
m_items(),
34
31
m_delay(4 .0f ),
35
32
m_fade_delay(1 .0f ),
36
- m_text_id (0 ),
37
- m_update_timer( ),
38
- m_fade_timer ()
33
+ m_current_text (0 ),
34
+ m_status(Status::NOT_STARTED ),
35
+ m_timer ()
39
36
{
40
37
float w, h;
38
+
41
39
mapping.get (" x" , m_col.m_bbox .get_left (), 0 .0f );
42
40
mapping.get (" y" , m_col.m_bbox .get_top (), 0 .0f );
43
41
mapping.get (" width" , w, 32 .0f );
@@ -46,29 +44,27 @@ TextArea::TextArea(const ReaderMapping& mapping) :
46
44
mapping.get (" delay" , m_delay);
47
45
mapping.get (" once" , m_once);
48
46
mapping.get (" fade-delay" , m_fade_delay);
47
+
49
48
m_col.m_bbox .set_size (w, h);
50
49
}
51
50
52
51
TextArea::TextArea (const Vector& pos) :
53
- m_started(false ),
54
- m_inside(false ),
55
52
m_once(false ),
56
- m_finished(false ),
57
53
m_items(),
58
54
m_delay(4 .0f ),
59
55
m_fade_delay(1 .0f ),
60
- m_text_id (0 ),
61
- m_update_timer( ),
62
- m_fade_timer ()
56
+ m_current_text (0 ),
57
+ m_status(Status::NOT_STARTED ),
58
+ m_timer ()
63
59
{
64
60
m_col.m_bbox .set_pos (pos);
65
- m_col.m_bbox .set_size (32 ,32 );
61
+ m_col.m_bbox .set_size (32 , 32 );
66
62
}
67
63
68
64
void
69
65
TextArea::draw (DrawingContext& context)
70
66
{
71
- if (Editor::is_active ())
67
+ if (Editor::is_active ())
72
68
context.color ().draw_filled_rect (m_col.m_bbox , Color (1 .0f , 1 .0f , 1 .0f , 0 .6f ), LAYER_OBJECTS);
73
69
}
74
70
@@ -77,60 +73,84 @@ TextArea::event(Player& player, EventType type)
77
73
{
78
74
switch (type)
79
75
{
80
- case EVENT_TOUCH:
81
- if (!m_started && !m_fade_timer.started () && m_items.size () > 0 && !m_inside && (!m_once || !m_finished))
82
- {
83
- m_update_timer.start (m_delay + m_fade_delay * 2 , true );
84
- m_started = true ;
85
- m_text_id = 0 ;
86
- }
87
- m_inside = true ;
88
- break ;
89
- case EVENT_LOSETOUCH:
90
- m_inside = false ;
91
- break ;
92
- default :
93
- break ;
76
+ case EVENT_TOUCH:
77
+ if (m_status == Status::NOT_STARTED)
78
+ {
79
+ if (m_items.size () < 1 )
80
+ {
81
+ log_warning << " Attempt to run a TextArea with no text, aborting" << std::endl;
82
+ return ;
83
+ }
84
+
85
+ TextObject& text_object = Sector::get ().get_singleton_by_type <TextObject>();
86
+
87
+ m_current_text = 0 ;
88
+ m_status = Status::FADING_IN;
89
+ m_timer.start (m_fade_delay);
90
+ text_object.set_text (m_items[m_current_text]);
91
+ text_object.fade_in (m_fade_delay);
92
+ }
93
+ break ;
94
+
95
+ default :
96
+ break ;
94
97
}
95
98
}
96
99
97
100
void
98
101
TextArea::update (float dt_sec)
99
102
{
100
103
TriggerBase::update (dt_sec);
101
- if (m_started)
104
+
105
+ if (m_timer.check ())
102
106
{
103
107
TextObject& text_object = Sector::get ().get_singleton_by_type <TextObject>();
104
- if (m_text_id < m_items.size () && (m_update_timer.check () || m_text_id == 0 ) && !m_fade_timer.started ())
105
- {
106
- m_fade_timer.start (m_delay + m_fade_delay);
107
- text_object.set_text (m_items[m_text_id]);
108
- text_object.fade_in (m_fade_delay);
109
- m_text_id++;
110
- }
111
- else if (m_text_id >= m_items.size ())
108
+
109
+ switch (m_status)
112
110
{
113
- m_started = false ;
114
- m_update_timer.stop ();
115
- m_fade_timer.start (m_delay + m_fade_delay);
116
- m_finished = true ;
111
+ case Status::FADING_IN:
112
+ m_status = Status::WAITING;
113
+ m_timer.start (m_delay);
114
+ break ;
115
+
116
+ case Status::WAITING:
117
+ m_status = Status::FADING_OUT;
118
+ m_timer.start (m_fade_delay);
119
+ text_object.fade_out (m_fade_delay);
120
+ break ;
121
+
122
+ case Status::FADING_OUT:
123
+ if (++m_current_text >= m_items.size ())
124
+ {
125
+ m_current_text = 0 ;
126
+ m_status = m_once ? Status::FINISHED : Status::NOT_STARTED;
127
+ }
128
+ else
129
+ {
130
+ m_status = Status::FADING_IN;
131
+ m_timer.start (m_fade_delay);
132
+ text_object.set_text (m_items[m_current_text]);
133
+ text_object.fade_in (m_fade_delay);
134
+ }
135
+ break ;
136
+
137
+ default :
138
+ break ;
117
139
}
118
140
}
119
- if (m_fade_timer.check ())
120
- {
121
- Sector::get ().get_singleton_by_type <TextObject>().fade_out (m_fade_delay);
122
- m_fade_timer.stop ();
123
- }
124
141
}
125
142
126
143
ObjectSettings
127
144
TextArea::get_settings ()
128
145
{
129
146
ObjectSettings settings = TriggerBase::get_settings ();
147
+
130
148
settings.add_bool (_ (" Once" ), &m_once, " once" );
131
149
settings.add_float (_ (" Text change time" ), &m_delay, " delay" );
132
150
settings.add_float (_ (" Fade time" ), &m_fade_delay, " fade-delay" );
133
151
settings.add_string_array (_ (" Texts" ), " texts" , m_items);
152
+
134
153
return settings;
135
154
}
155
+
136
156
/* EOF */
0 commit comments