--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/29 21:31:47 1.141 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/08/06 05:06:33 1.146 @@ -50,11 +50,9 @@ } sort { $a->{par} <=> $b->{par} } CFPlus::Pod::find command => "*"; - $self->connect_ext (music => sub { - my ($ev) = @_; - - &::audio_music_set ($self->{songs} = $ev->{play}) - if $ev->{play}; + $self->connect_ext (ambient_music => sub { + my ($songs) = @_; + &::audio_music_set_ambient ($songs); }); $self->connect_ext (capabilities => sub { @@ -230,23 +228,7 @@ sub logprint { my ($self, @a) = @_; - $self->{log_fh} ||= do { - my $path = "$Crossfire::VARDIR/log.$self->{host}"; - - open my $fh, ">>:utf8", $path - or die "Couldn't open logfile $path: $!"; - - $fh->autoflush (1); - - $fh; - }; - - my ($sec, $min, $hour, $mday, $mon, $year) = localtime time; - - my $ts = sprintf "%04d-%02d-%02d %02d:%02d:%02d", - $year + 1900, $mon + 1, $mday, $hour, $min, $sec; - - print {$self->{log_fh}} "$ts ", @a, "\n"; + CFPlus::DB::logprint "$Crossfire::VARDIR/log.$self->{host}" => (join "", @a), sub { }; } sub _stat_numdiff { @@ -564,13 +546,13 @@ or return; } while $self->{texture}[$id]; - CFPlus::DB::get tilecache => $id, sub { - my ($data) = @_; + CFPlus::DB::exists tilecache => $id, sub { + my ($exists) = @_; return unless $self->{map}; # stop when destroyed - $self->set_texture ($id => $data) - if defined $data; + $self->have_tile ($id) + if $exists; $self->bg_fetch; }; @@ -748,7 +730,7 @@ CFPlus::DB::put tilecache => $face->{id} => $face->{data}, sub { } if $changed; - $self->set_texture ($face->{id} => delete $face->{data}); + $self->have_tile ($face->{id}); } elsif ($face->{type} & 1) { # split metadata my $cb = sub { }; @@ -760,7 +742,7 @@ ::message ({ markup => "downloaded song #$facenum" }) if $changed; - &::audio_music_set ($self->{songs}); + &::audio_music_push ($facenum); }; } elsif ($face->{type} == 5) { # FT_SOUND $cb = sub { @@ -779,11 +761,13 @@ CFPlus::DB::put res_data => $face->{name} => $data, sub { }; CFPlus::DB::put res_meta => $face->{name} => $meta_json, sub { $face->{meta} = $self->{json_coder}->decode ($meta_json); + ::add_license ($face); $cb->(); }; } else { $face->{meta} = $self->{json_coder}->decode (delete $face->{data}); + ::add_license ($face); $cb->(); } } @@ -795,19 +779,16 @@ $self->{map}->set_smooth ($facenum, $face->{smoothface}, $face->{smoothlevel}); } -sub set_texture { - my ($self, $id, $data) = @_; +sub have_tile { + my ($self, $tile) = @_; return unless $self->{map}; - $self->{texture}[$id] = my $tex = - new_from_image CFPlus::Texture - $data, minify => 1, mipmap => 1; - - $self->{map}->set_texture ($id, @$tex{qw(name w h s t)}, @{$tex->{minified}}); - $self->{map_widget}->update; + $self->{texture}[$tile] ||= my $tex = + new CFPlus::Texture + tile => $tile, minify => 1, mipmap => 1, delay => 1; - $_->() for @{(delete $self->{face_cb}{$id}) || []}; + $_->() for @{(delete $self->{face_cb}{$tile}) || []}; } sub connect_face_update {