--- deliantra/Deliantra-Client/DC/MapWidget.pm 2008/09/03 06:07:39 1.143 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2009/01/13 00:01:48 1.149 @@ -165,7 +165,7 @@ if ($ev->{button} == 1) { $self->grab_focus; - return unless $::CONN; + return unless $::CONN && $self->{ctilesize}; my $x = $self->{dx} + DC::floor +($ev->{x} - $self->{sx0}) / $self->{ctilesize}; my $y = $self->{dy} + DC::floor +($ev->{y} - $self->{sy0}) / $self->{ctilesize}; @@ -203,12 +203,6 @@ ["Inventory…\tF5", sub { ::toggle_player_page ($::INVENTORY_PAGE) }], ["Setup… \tF9", sub { $::SETUP_DIALOG->toggle_visibility }], # ["Server Messages…", sub { $::MESSAGE_WINDOW->toggle_visibility }], - [ - $::PICKUP_ENABLE->{state} - ? "Disable automatic pickup" - : "Enable automatic pickup", - sub { $::PICKUP_ENABLE->toggle } - ], ); if ($::CONN && $::CONN->{editor_support}) { @@ -434,24 +428,26 @@ # the minimum time for a single tile movement my $mintime = DC::Protocol::TICK * DC::ceil 1 / ($spd * DC::Protocol::TICK || 1); + $spd *= $self->{tilesize}; + # jump if "impossibly high" speed if ( (max abs $self->{sdx}, abs $self->{sdy}) - > $spd * $self->{tilesize} * $mintime * 1.1 + > $spd * $mintime * 2.1 ) { - #warn "jump ", (max abs $self->{sdx}, abs $self->{sdy}), " ", $spd * $mintime * 1.0;#d# + #warn "jump ", (max abs $self->{sdx}, abs $self->{sdy}), " ", $spd * $mintime * 2.1;#d# $self->{sdx} = $self->{sdy} = 0; } else { - $spd *= $self->{tilesize} * $diff * 1.0001; # 1.0001 so that we don't accumulate rounding errors the wrong direction + $spd *= $diff * 1.0001; # 1.0001 so that we don't accumulate rounding errors the wrong direction my $dx = $self->{sdx} < 0 ? -$spd : $spd; my $dy = $self->{sdy} < 0 ? -$spd : $spd; if ($self->{sdx} * ($self->{sdx} - $dx) <= 0) { $self->{sdx} = 0 } else { $self->{sdx} -= $dx } if ($self->{sdy} * ($self->{sdy} - $dy) <= 0) { $self->{sdy} = 0 } else { $self->{sdy} -= $dy } - - $self->update; } + + $self->update; } } else { $self->{sdx} = $self->{sdy} = 0; @@ -511,14 +507,14 @@ glPushMatrix; glTranslate $sx0, $sy0; glScale $::CFG->{map_scale}, $::CFG->{map_scale}; - glTranslate $self->{sdx}, $self->{sdy}; + glTranslate DC::ceil $self->{sdx}, DC::ceil $self->{sdy}; $::MAP->draw ($dx, $dy, $sw, $sh, $self->{tilesize}, $::CONN->{player}{tag}, -$self->{sdx}, -$self->{sdy}); - #glTranslate -$self->{sdx}, -$self->{sdy}; # anchro fow at player + #glTranslate -$self->{sdx}, -$self->{sdy}; # anchor fow at player glScale $self->{tilesize}, $self->{tilesize}; if (my $tex = $self->{fow_texture}) { @@ -613,6 +609,8 @@ if ($::MAP && $self->{texture_atime} < time) { my ($w, $h) = @$self{qw(w h)}; + return unless $w && $h; + my $sw = int $::WIDTH / ($::MAPWIDGET->{tilesize} * $::CFG->{map_scale}) + 0.99; my $sh = int $::HEIGHT / ($::MAPWIDGET->{tilesize} * $::CFG->{map_scale}) + 0.99;