--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/07/28 16:48:45 1.138 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/08/03 02:20:32 1.144 @@ -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 { @@ -64,7 +62,7 @@ $self->send_exti_msg (fx_want => { 3 => !!$::CFG->{bgm_enable}, # FT_MUSIC - #5 => !!$::CFG->{audio_enable}, # FT_SOUND + 5 => !!$::CFG->{audio_enable}, # FT_SOUND }); if (my $ts = $cap{tileset}) { @@ -737,7 +735,7 @@ } elsif ($face->{type} & 1) { # with metadata #::message ({ markup => "starting to download song #$face/$pri, check your output-rate setting if your connection gets laggy." }); - CFPlus::DB::get "res-metadata" => $face->{name}, $cb; + CFPlus::DB::get res_meta => $face->{name}, $cb; } } @@ -760,26 +758,32 @@ ::message ({ markup => "downloaded song #$facenum" }) if $changed; - &::audio_music_set ($self->{songs}); + &::audio_music_push ($facenum); }; - } + } elsif ($face->{type} == 5) { # FT_SOUND + $cb = sub { + $self->{sound_meta}{$facenum} = $face; - my $path = CFPlus::DB::path_of_res $face->{name}; + ::message ({ markup => "downloaded sound #$facenum" }) + if $changed; + + &::audio_sound_push ($facenum); + }; + } if ($changed) { # new data my ($meta_json, $data) = unpack "(w/a*)*", delete $face->{data}; - CFPlus::DB::write_file $path, $data, sub { - CFPlus::DB::put "res-metadata" => $face->{name} => $meta_json, sub { - $face->{meta} = $self->{json_coder}->decode ($meta_json); - $face->{path} = $path; - - $cb->(); - }; + 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}); - $face->{path} = $path; + ::add_license ($face); $cb->(); } } @@ -819,10 +823,10 @@ } sub sound_play { - my ($self, $x, $y, $soundnum, $type) = @_; - warn "sound play <@_>\n";#d# + my ($self, $type, $face, $dx, $dy, $vol) = @_; - #$self->{sound_play}->($x, $y, $soundnum, $type); + &::audio_sound_play ($face, $dx, $dy, $vol) + unless $type & 1; # odd types are silent for future expansion } my $LAST_QUERY; # server is stupid, stupid, stupid @@ -970,40 +974,6 @@ ::stop_game (); } -sub image_info { - my ($self, $numfaces) = @_; - - $self->{num_faces} = $numfaces; - $self->{face_prefetch} = [1 .. $numfaces]; - $self->face_prefetch; -} - -sub face_prefetch { - my ($self) = @_; - - return unless $::CFG->{face_prefetch}; - - if ($self->{num_faces}) { - return if @{ $self->{send_queue} || [] }; - my $todo = @{ $self->{face_prefetch} } - or return; - - my ($face) = splice @{ $self->{face_prefetch} }, + rand @{ $self->{face_prefetch} }, 1, (); - - $self->send ("requestinfo image_sums $face $face"); - - $self->{statusbox}->add (CFPlus::asxml "prefetching $todo", - group => "prefetch", timeout => 3, fg => [1, 1, 0, 0.5]); - } elsif (!exists $self->{num_faces}) { - $self->send ("requestinfo image_info"); - - $self->{num_faces} = 0; - - $self->{statusbox}->add (CFPlus::asxml "starting to prefetch", - group => "prefetch", timeout => 3, fg => [1, 1, 0, 0.5]); - } -} - sub update_floorbox { $CFPlus::UI::ROOT->on_refresh ($::FLOORBOX => sub { return unless $::CONN;