ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/MainWindow.pm
(Generate patch)

Comparing deliantra/gde/GCE/MainWindow.pm (file contents):
Revision 1.10 by elmex, Tue Feb 7 14:28:23 2006 UTC vs.
Revision 1.11 by root, Tue Feb 7 17:24:56 2006 UTC

21 update_stack_view => { return_type => undef, param_types => [Glib::Int, Glib::Int, Glib::Scalar] }, 21 update_stack_view => { return_type => undef, param_types => [Glib::Int, Glib::Int, Glib::Scalar] },
22 }; 22 };
23 23
24use strict; 24use strict;
25 25
26
27sub delete_arch { 26sub delete_arch {
28 my ($self, $x, $y) = @_; 27 my ($self, $x, $y) = @_;
29 28
30 return 0 unless 29 return 0 unless
31 defined $self->{map}; 30 defined $self->{map};
32 31
33 my ($mx, $my) = $self->{map}->coord ($x, $y);
34 my $s = map_pop_tile_stack ($self->{map}, $mx, $my); 32 my $s = map_pop_tile_stack ($self->{map}, $x, $y);
35 $self->{map}->update_map ($mx, $my, 1, 1); 33 $self->{map}->update_map ($x, $y, 1, 1);
36} 34}
37
38 35
39sub get_top_arch { 36sub get_top_arch {
40 my ($self, $x, $y) = @_; 37 my ($self, $x, $y) = @_;
41 38
42 return 0 unless 39 return 0 unless
50 47
51 return 0 unless 48 return 0 unless
52 defined $self->{map} 49 defined $self->{map}
53 and defined $self->{pick_arch}; 50 and defined $self->{pick_arch};
54 51
55 my ($mx, $my) = $self->{map}->coord ($x, $y);
56 my $s = map_get_tile_stack ($self->{map}, $mx, $my); 52 my $s = map_get_tile_stack ($self->{map}, $x, $y);
57 my $top = $s->[-1]; 53 my $top = $s->[-1];
58 my $arch = { _name => $self->{pick_arch}->{_name} }; 54 my $arch = { _name => $self->{pick_arch}->{_name} };
59 55
60 if ($top->{_name} ne $arch->{_name}) { 56 if ($top->{_name} ne $arch->{_name}) {
61 map_push_tile_stack ($self->{map}, $mx, $my, $arch); 57 map_push_tile_stack ($self->{map}, $x, $y, $arch);
62 } 58 }
63 59
64 $self->{map}->update_map ($mx, $my, 1, 1); 60 $self->{map}->update_map ($x, $y, 1, 1);
65} 61}
66 62
67sub INIT_INSTANCE { 63sub INIT_INSTANCE {
68 my ($self) = @_; 64 my ($self) = @_;
69 65
141 # XXX:load $ARGV _cleanly_? 137 # XXX:load $ARGV _cleanly_?
142 my $path = $ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3"; 138 my $path = $ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3";
143 $map->set_map (arch2map read_arch $path); 139 $map->set_map (arch2map read_arch $path);
144 $self->{map} = $map; 140 $self->{map} = $map;
145 141
146
147 $map->signal_connect (button_press_event => sub { 142 $map->signal_connect (button_press_event => sub {
148 my ($mself, $event) = @_; 143 my ($map, $event) = @_;
149 return 0 unless defined $self->{map}; 144
145 my ($x, $y) = $map->coord ($event->x, $event->y);
150 146
151 if ($event->button == 1) { 147 if ($event->button == 1) {
148 $map->disable_tooltip unless $self->{draw_mode};
152 $self->{draw_mode} = 1; 149 $self->{draw_mode} = [1, $x, $y];
150 $self->place_pick ($x, $y);
153 return 1; 151 return 1;
154 152
155 } elsif ($event->button == 3) { 153 } elsif ($event->button == 3) {
154 $map->disable_tooltip unless $self->{draw_mode};
156 $self->{draw_mode} = 2; 155 $self->{draw_mode} = [2, $x, $y];
156 $self->delete_arch ($x, $y);
157 return 1; 157 return 1;
158 } 158 }
159 159
160 0 160 0
161 }); 161 });
162 162
163 $map->signal_connect (motion_notify_event => sub { 163 $map->signal_connect_after (motion_notify_event => sub {
164 my ($mself, $event) = @_; 164 my ($map, $event) = @_;
165 165
166 return unless $self->{draw_mode};
167
168 my ($x, $y) = $map->coord ($map->get_pointer);
169
170 return if $x == $self->{draw_mode}[1]
171 && $y == $self->{draw_mode}[2];
172
173 @{$self->{draw_mode}}[1,2] = ($x, $y);
174
166 if ($self->{draw_mode} == 1) { 175 if ($self->{draw_mode}[0] == 1) {
167 $self->place_pick ($event->x, $event->y); 176 $self->place_pick ($x, $y);
168
169 return 1; 177 return 1;
178
170 } elsif ($self->{draw_mode} == 2) { 179 } elsif ($self->{draw_mode}[0] == 2) {
171 $self->delete_arch ($event->x, $event->y); 180 $self->delete_arch ($x, $y);
172
173 return 1; 181 return 1;
182
174 } 183 }
184
185 0
175 }); 186 });
187
176 $self->signal_connect (button_release_event => sub { 188 $map->signal_connect (button_release_event => sub {
177 my ($mself, $event) = @_; 189 my ($map, $event) = @_;
178 190
179 delete $self->{draw_mode}; 191 $map->enable_tooltip if delete $self->{draw_mode};
192
180 if ($event->button == 1 && $event->state * "shift-mask") { 193 if ($event->button == 1 && $event->state * "shift-mask") {
181 return 0 unless defined $self->{attr_edit}; 194 return 0 unless defined $self->{attr_edit};
182 $self->{attr_edit}->set_arch ($self->get_top_arch ($event->x, $event->y)); 195 $self->{attr_edit}->set_arch ($self->get_top_arch ($event->x, $event->y));
183 return 1; 196 return 1;
184 } elsif ($event->button == 1) {
185 $self->place_pick ($event->x, $event->y);
186 return 1;
187
188 } elsif ($event->button == 3) {
189 $self->delete_arch ($event->x, $event->y);
190 return 1;
191 } 197 }
192 });
193 198
194 199 0
200 });
195 201
196 $vb->pack_start ($map, 1, 1, 0); 202 $vb->pack_start ($map, 1, 1, 0);
197} 203}
198 204
199sub new_cb { 205sub new_cb {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines