… | |
… | |
628 | cache_file "$LIB/crossfire.0", "$VARDIR/tilecache.pst", sub { |
628 | cache_file "$LIB/crossfire.0", "$VARDIR/tilecache.pst", sub { |
629 | $TILE = new_from_file Gtk2::Gdk::Pixbuf "$VARDIR/tilecache.png" |
629 | $TILE = new_from_file Gtk2::Gdk::Pixbuf "$VARDIR/tilecache.png" |
630 | or die "$VARDIR/tilecache.png: $!"; |
630 | or die "$VARDIR/tilecache.png: $!"; |
631 | *FACE = $_[0]; |
631 | *FACE = $_[0]; |
632 | }, sub { |
632 | }, sub { |
633 | require File::Temp; |
|
|
634 | |
|
|
635 | my $tile = read_pak "$LIB/crossfire.0"; |
633 | my $tile = read_pak "$LIB/crossfire.0"; |
636 | |
634 | |
637 | my %cache; |
635 | my %cache; |
638 | |
636 | |
639 | my $idx = 0; |
637 | my $idx = 0; |
640 | |
638 | |
641 | for my $name (sort keys %$tile) { |
639 | for my $name (sort keys %$tile) { |
642 | my ($fh, $filename) = File::Temp::tempfile (); |
640 | my $pb = new Gtk2::Gdk::PixbufLoader; |
643 | print $fh $tile->{$name}; |
641 | $pb->write ($tile->{$name}); |
644 | close $fh; |
642 | $pb->close; |
645 | my $pb = new_from_file Gtk2::Gdk::Pixbuf $filename; |
643 | my $pb = $pb->get_pixbuf; |
646 | unlink $filename; |
|
|
647 | |
644 | |
648 | my $tile = $cache{$name} = { |
645 | my $tile = $cache{$name} = { |
649 | pb => $pb, |
646 | pb => $pb, |
650 | idx => $idx, |
647 | idx => $idx, |
651 | w => int $pb->get_width / TILESIZE, |
648 | w => int $pb->get_width / TILESIZE, |
… | |
… | |
669 | $pb, ($idx % 64) * TILESIZE, TILESIZE * int $idx / 64); |
666 | $pb, ($idx % 64) * TILESIZE, TILESIZE * int $idx / 64); |
670 | } |
667 | } |
671 | } |
668 | } |
672 | } |
669 | } |
673 | |
670 | |
674 | $pb->save ("$VARDIR/tilecache.png", "png"); |
671 | $pb->save ("$VARDIR/tilecache.png", "png", compression => 1); |
675 | |
672 | |
676 | \%cache |
673 | \%cache |
677 | }; |
674 | }; |
678 | } |
675 | } |
679 | |
676 | |