… | |
… | |
31 | my $class = shift; |
31 | my $class = shift; |
32 | my $self = bless { |
32 | my $self = bless { |
33 | mapw => 13, |
33 | mapw => 13, |
34 | maph => 13, |
34 | maph => 13, |
35 | max_outstanding => 2, |
35 | max_outstanding => 2, |
|
|
36 | token => "a0", |
36 | @_ |
37 | @_ |
37 | }, $class; |
38 | }, $class; |
38 | |
39 | |
39 | $self->{fh} = new IO::Socket::INET PeerHost => $self->{host}, PeerPort => $self->{port} |
40 | $self->{fh} = new IO::Socket::INET PeerHost => $self->{host}, PeerPort => $self->{port} |
40 | or die "$self->{host}:$self->{port}: $!"; |
41 | or die "$self->{host}:$self->{port}: $!"; |
… | |
… | |
432 | |
433 | |
433 | my ($dx, $dy) = split / /, $data; |
434 | my ($dx, $dy) = split / /, $data; |
434 | |
435 | |
435 | $self->{delayed_scroll_x} += $dx; |
436 | $self->{delayed_scroll_x} += $dx; |
436 | $self->{delayed_scroll_y} += $dy; |
437 | $self->{delayed_scroll_y} += $dy; |
|
|
438 | |
|
|
439 | $self->map_scroll ($dx, $dy); |
437 | } |
440 | } |
438 | |
441 | |
439 | sub feed_newmap { |
442 | sub feed_newmap { |
440 | my ($self) = @_; |
443 | my ($self) = @_; |
441 | |
444 | |
… | |
… | |
449 | $self->map_clear; |
452 | $self->map_clear; |
450 | } |
453 | } |
451 | |
454 | |
452 | sub feed_mapinfo { |
455 | sub feed_mapinfo { |
453 | my ($self, $data) = @_; |
456 | my ($self, $data) = @_; |
|
|
457 | |
|
|
458 | my ($token, @data) = split / /, $data; |
454 | |
459 | |
455 | $self->map_info (split / /, $data, 7); |
460 | (delete $self->{mapinfo_cb}{$token})->(@data) |
|
|
461 | if $self->{mapinfo_cb}{$token}; |
|
|
462 | |
|
|
463 | $self->map_change (@data) if $token eq "-"; |
|
|
464 | } |
|
|
465 | |
|
|
466 | sub send_mapinfo { |
|
|
467 | my ($self, $data, $cb) = @_; |
|
|
468 | |
|
|
469 | my $token = ++$self->{token}; |
|
|
470 | |
|
|
471 | $self->{mapinfo_cb}{$token} = $cb; |
|
|
472 | $self->send ("mapinfo $token $data"); |
456 | } |
473 | } |
457 | |
474 | |
458 | sub feed_image { |
475 | sub feed_image { |
459 | my ($self, $data) = @_; |
476 | my ($self, $data) = @_; |
460 | |
|
|
461 | |
477 | |
462 | my ($num, $len, $data) = unpack "NNa*", $data; |
478 | my ($num, $len, $data) = unpack "NNa*", $data; |
463 | |
479 | |
464 | $self->send_queue; |
480 | $self->send_queue; |
465 | $self->{face}[$num]{image} = $data; |
481 | $self->{face}[$num]{image} = $data; |
… | |
… | |
475 | } |
491 | } |
476 | |
492 | |
477 | $self->map_update (\@dirty); |
493 | $self->map_update (\@dirty); |
478 | } |
494 | } |
479 | |
495 | |
480 | =item $conn->map_info ($mode, ...) [OVERWRITE] |
496 | =item $conn->map_change ($mode, ...) [OVERWRITE] |
481 | |
497 | |
482 | current <flags> <x> <y> <width> <height> <hashstring> |
498 | current <flags> <x> <y> <width> <height> <hashstring> |
483 | |
499 | |
484 | =cut |
500 | =cut |
485 | |
501 | |