… | |
… | |
34 | $pl->ob->active or next; |
34 | $pl->ob->active or next; |
35 | my $ns = $pl->ns or next; |
35 | my $ns = $pl->ns or next; |
36 | $ns->extcmd or next; |
36 | $ns->extcmd or next; |
37 | my $map = $pl->ob->map or next; |
37 | my $map = $pl->ob->map or next; |
38 | |
38 | |
|
|
39 | my $faces = delete $ns->{music_play_once}; |
39 | my $faces = $MUSIC_FACE_CACHE{$map} ||= do { |
40 | $faces ||= $MUSIC_FACE_CACHE{$map} ||= do { |
40 | # 1. map-specific music info |
41 | # 1. map-specific music info |
41 | parse_facelist "music/", $map->{music} |
42 | parse_facelist "music/", $map->{music} |
42 | or do { |
43 | or do { |
43 | # 2. fall back to region if no map-specific music |
44 | # 2. fall back to region if no map-specific music |
44 | my $rgn = $pl->ob->region |
45 | my $rgn = $pl->ob->region |
… | |
… | |
80 | on_region_change => sub { |
81 | on_region_change => sub { |
81 | my ($pl, $new, $old) = @_; |
82 | my ($pl, $new, $old) = @_; |
82 | |
83 | |
83 | $pl->ob->message ("You are now " . $new->longname . ". H<Use whereami for more details.>", $new->longname); |
84 | $pl->ob->message ("You are now " . $new->longname . ". H<Use whereami for more details.>", $new->longname); |
84 | |
85 | |
85 | $MUSIC_QUEUE{$pl->ob->name} = undef; |
86 | undef $MUSIC_QUEUE{$pl->ob->name}; |
86 | $MUSIC_SCHEDULER->ready; |
87 | $MUSIC_SCHEDULER->ready; |
87 | }, |
88 | }, |
88 | on_map_change => sub { |
89 | on_map_change => sub { |
89 | my ($pl, $new) = @_; |
90 | my ($pl, $new) = @_; |
90 | |
91 | |
91 | $MUSIC_QUEUE{$pl->ob->name} = undef; |
92 | undef $MUSIC_QUEUE{$pl->ob->name}; |
92 | $MUSIC_SCHEDULER->ready; |
93 | $MUSIC_SCHEDULER->ready; |
93 | }, |
94 | }, |
94 | ); |
95 | ); |
95 | |
96 | |
|
|
97 | sub play_music_once { |
|
|
98 | my ($pl, $music) = @_; |
96 | |
99 | |
|
|
100 | $pl->ns->{music_play_once} = parse_facelist "music/", $music; |
|
|
101 | |
|
|
102 | undef $MUSIC_QUEUE{$pl->ob->name}; |
|
|
103 | $MUSIC_SCHEDULER->ready; |
|
|
104 | } |
|
|
105 | |