… | |
… | |
60 | %{$self->{completer}{command}} = (); |
60 | %{$self->{completer}{command}} = (); |
61 | } |
61 | } |
62 | |
62 | |
63 | sub button_down { |
63 | sub button_down { |
64 | my ($self, $ev, $x, $y) = @_; |
64 | my ($self, $ev, $x, $y) = @_; |
|
|
65 | |
|
|
66 | return unless $::CONN; |
65 | |
67 | |
66 | $self->focus_in; |
68 | $self->focus_in; |
67 | |
69 | |
68 | if ($ev->{button} == 1) { |
70 | if ($ev->{button} == 1) { |
69 | my $x = int +($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale}); |
71 | my $x = int +($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale}); |
… | |
… | |
181 | $self->{completer}->set_prefix (""); |
183 | $self->{completer}->set_prefix (""); |
182 | $self->{completer}->show; |
184 | $self->{completer}->show; |
183 | } elsif (exists $DIR{$sym}) { |
185 | } elsif (exists $DIR{$sym}) { |
184 | if ($mod & CFClient::KMOD_SHIFT) { |
186 | if ($mod & CFClient::KMOD_SHIFT) { |
185 | $self->{shft}++; |
187 | $self->{shft}++; |
|
|
188 | if ($DIR{$sym}[0] != $self->{fire_dir}) { |
186 | $::CONN->user_send ("fire $DIR{$sym}[0]"); |
189 | $::CONN->user_send ("fire $DIR{$sym}[0]"); |
|
|
190 | } |
|
|
191 | $self->{fire_dir} = $DIR{$sym}[0]; |
187 | } elsif ($mod & CFClient::KMOD_CTRL) { |
192 | } elsif ($mod & CFClient::KMOD_CTRL) { |
188 | $self->{ctrl}++; |
193 | $self->{ctrl}++; |
189 | $::CONN->user_send ("run $DIR{$sym}[0]"); |
194 | $::CONN->user_send ("run $DIR{$sym}[0]"); |
190 | } else { |
195 | } else { |
191 | $::CONN->user_send ("$DIR{$sym}[1]"); |
196 | $::CONN->user_send ("$DIR{$sym}[1]"); |
… | |
… | |
219 | |
224 | |
220 | my $res = 0; |
225 | my $res = 0; |
221 | my $mod = $ev->{mod}; |
226 | my $mod = $ev->{mod}; |
222 | my $sym = $ev->{sym}; |
227 | my $sym = $ev->{sym}; |
223 | |
228 | |
|
|
229 | if ($::CFG->{shift_fire_stop}) { |
224 | if (!($mod & CFClient::KMOD_SHIFT) && delete $self->{shft}) { |
230 | if (!($mod & CFClient::KMOD_SHIFT) && delete $self->{shft}) { |
225 | $::CONN->user_send ("fire_stop"); |
231 | $::CONN->user_send ("fire_stop"); |
|
|
232 | delete $self->{fire_dir}; |
226 | $res = 1; |
233 | $res = 1; |
|
|
234 | } |
|
|
235 | } else { |
|
|
236 | if (exists $DIR{$sym} && delete $self->{shft}) { |
|
|
237 | $::CONN->user_send ("fire_stop"); |
|
|
238 | delete $self->{fire_dir}; |
|
|
239 | $res = 1; |
|
|
240 | } elsif (($sym == CFClient::SDLK_LSHIFT || $sym == CFClient::SDLK_RSHIFT) && delete $self->{shft}) { # XXX: is RSHIFT ok? |
|
|
241 | $::CONN->user_send ("fire_stop"); |
|
|
242 | delete $self->{fire_dir}; |
|
|
243 | $res = 1; |
|
|
244 | } |
227 | } |
245 | } |
228 | |
246 | |
229 | if (!($mod & CFClient::KMOD_CTRL ) && delete $self->{ctrl}) { |
247 | if (!($mod & CFClient::KMOD_CTRL ) && delete $self->{ctrl}) { |
230 | $::CONN->user_send ("run_stop"); |
248 | $::CONN->user_send ("run_stop"); |
231 | $res = 1; |
249 | $res = 1; |
… | |
… | |
239 | |
257 | |
240 | my $focused = $CFClient::UI::FOCUS == $self |
258 | my $focused = $CFClient::UI::FOCUS == $self |
241 | || $CFClient::UI::FOCUS == $self->{completer}{entry}; |
259 | || $CFClient::UI::FOCUS == $self->{completer}{entry}; |
242 | |
260 | |
243 | return |
261 | return |
244 | unless $focused || !$::FAST; |
262 | unless $::CONN && ($focused || !$::FAST); |
245 | |
263 | |
246 | if (delete $self->{need_update}) { |
264 | if (delete $self->{need_update}) { |
|
|
265 | $self->{fow_texture} ||= glGenTexture; |
|
|
266 | |
247 | glNewList $self->{list}; |
267 | glNewList $self->{list}; |
248 | |
268 | |
249 | if ($::MAP) { |
269 | if ($::MAP) { |
250 | my $sw = $self->{sw} = int $::WIDTH / (32 * $::CFG->{map_scale}) + 0.99; |
270 | my $sw = $self->{sw} = int $::WIDTH / (32 * $::CFG->{map_scale}) + 0.99; |
251 | my $sh = $self->{sh} = int $::HEIGHT / (32 * $::CFG->{map_scale}) + 0.99; |
271 | my $sh = $self->{sh} = int $::HEIGHT / (32 * $::CFG->{map_scale}) + 0.99; |