… | |
… | |
432 | my $spd = $::CONN->{stat}{DC::Protocol::CS_STAT_SPEED}; |
432 | my $spd = $::CONN->{stat}{DC::Protocol::CS_STAT_SPEED}; |
433 | |
433 | |
434 | # the minimum time for a single tile movement |
434 | # the minimum time for a single tile movement |
435 | my $mintime = DC::Protocol::TICK * DC::ceil 1 / ($spd * DC::Protocol::TICK || 1); |
435 | my $mintime = DC::Protocol::TICK * DC::ceil 1 / ($spd * DC::Protocol::TICK || 1); |
436 | |
436 | |
|
|
437 | $spd *= $self->{tilesize}; |
|
|
438 | |
437 | # jump if "impossibly high" speed |
439 | # jump if "impossibly high" speed |
438 | if ( |
440 | if ( |
439 | (max abs $self->{sdx}, abs $self->{sdy}) |
441 | (max abs $self->{sdx}, abs $self->{sdy}) |
440 | > $spd * $self->{tilesize} * $mintime * 1.1 |
442 | > $spd * $mintime * 2.1 |
441 | ) { |
443 | ) { |
442 | #warn "jump ", (max abs $self->{sdx}, abs $self->{sdy}), " ", $spd * $mintime * 1.0;#d# |
444 | #warn "jump ", (max abs $self->{sdx}, abs $self->{sdy}), " ", $spd * $mintime * 2.1;#d# |
443 | $self->{sdx} = $self->{sdy} = 0; |
445 | $self->{sdx} = $self->{sdy} = 0; |
444 | } else { |
446 | } else { |
445 | $spd *= $self->{tilesize} * $diff * 1.0001; # 1.0001 so that we don't accumulate rounding errors the wrong direction |
447 | $spd *= $diff * 1.0001; # 1.0001 so that we don't accumulate rounding errors the wrong direction |
446 | |
448 | |
447 | my $dx = $self->{sdx} < 0 ? -$spd : $spd; |
449 | my $dx = $self->{sdx} < 0 ? -$spd : $spd; |
448 | my $dy = $self->{sdy} < 0 ? -$spd : $spd; |
450 | my $dy = $self->{sdy} < 0 ? -$spd : $spd; |
449 | |
451 | |
450 | if ($self->{sdx} * ($self->{sdx} - $dx) <= 0) { $self->{sdx} = 0 } else { $self->{sdx} -= $dx } |
452 | if ($self->{sdx} * ($self->{sdx} - $dx) <= 0) { $self->{sdx} = 0 } else { $self->{sdx} -= $dx } |
451 | if ($self->{sdy} * ($self->{sdy} - $dy) <= 0) { $self->{sdy} = 0 } else { $self->{sdy} -= $dy } |
453 | if ($self->{sdy} * ($self->{sdy} - $dy) <= 0) { $self->{sdy} = 0 } else { $self->{sdy} -= $dy } |
452 | |
|
|
453 | $self->update; |
|
|
454 | } |
454 | } |
|
|
455 | |
|
|
456 | $self->update; |
455 | } |
457 | } |
456 | } else { |
458 | } else { |
457 | $self->{sdx} = $self->{sdy} = 0; |
459 | $self->{sdx} = $self->{sdy} = 0; |
458 | } |
460 | } |
459 | |
461 | |