--- deliantra/Deliantra-Client/DC/MapWidget.pm 2006/06/11 17:30:53 1.53 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2006/06/11 20:05:55 1.54 @@ -66,13 +66,19 @@ $self->focus_in; if ($ev->{button} == 1) { - my $sw = int $::WIDTH / (32 * $::CFG->{map_scale}) + 0.99; - my $sh = int $::HEIGHT / (32 * $::CFG->{map_scale}) + 0.99; + my $x = int +($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale}); + my $y = int +($ev->{y} - $::CFG->{map_shift_y}) / (32 * $::CFG->{map_scale}); + + $x += int 0.5 * ($::MAP->w - $self->{sw} - 1); + $y += int 0.5 * ($::MAP->h - $self->{sh} - 1); - my $fx = int +($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale}) - 0.5 * $sw + 0.99; - my $fy = int +($ev->{y} - $::CFG->{map_shift_y}) / (32 * $::CFG->{map_scale}) - 0.5 * $sh + 0.99; + $x -= int 0.5 * $::MAP->w; + $y -= int 0.5 * $::MAP->h; - $::CONN->send (sprintf "lookat %d %d", $fx, $fy) + $x += 1; + $y += 1; + + $::CONN->send (sprintf "lookat %d %d", $x, $y) if $::CONN; } elsif ($ev->{button} == 2) { @@ -241,16 +247,18 @@ glNewList $self->{list}; if ($::MAP) { - my $sw = int $::WIDTH / (32 * $::CFG->{map_scale}) + 0.99; - my $sh = int $::HEIGHT / (32 * $::CFG->{map_scale}) + 0.99; + my $sw = $self->{sw} = int $::WIDTH / (32 * $::CFG->{map_scale}) + 0.99; + my $sh = $self->{sh} = int $::HEIGHT / (32 * $::CFG->{map_scale}) + 0.99; - my $sx = $::CFG->{map_shift_x} / $::CFG->{map_scale}; my $sx0 = $sx & 31; $sx = ($sx - $sx0) / 32; - my $sy = $::CFG->{map_shift_y} / $::CFG->{map_scale}; my $sy0 = $sy & 31; $sy = ($sy - $sy0) / 32; + my $sx = $::CFG->{map_shift_x} / $::CFG->{map_scale}; + my $sy = $::CFG->{map_shift_y} / $::CFG->{map_scale}; + my $sx0 = $self->{sx0} = ($sx & 31) - 32; $sx = $self->{sx} = ($sx - $sx0) / 32; + my $sy0 = $self->{sy0} = ($sy & 31) - 32; $sy = $self->{sy} = ($sy - $sy0) / 32; glPushMatrix; glScale $::CFG->{map_scale}, $::CFG->{map_scale}; - glTranslate $sx0 - 32, $sy0 - 32, 0; + glTranslate $sx0, $sy0; my ($w, $h, $data) = $::MAP->draw ($sx, $sy, 0, 0, $sw + 1, $sh + 1);