… | |
… | |
53 | use Coro::Util (); |
53 | use Coro::Util (); |
54 | |
54 | |
55 | use JSON::XS 2.01 (); |
55 | use JSON::XS 2.01 (); |
56 | use BDB (); |
56 | use BDB (); |
57 | use Data::Dumper; |
57 | use Data::Dumper; |
58 | use Digest::MD5; |
|
|
59 | use Fcntl; |
58 | use Fcntl; |
60 | use YAML::XS (); |
59 | use YAML::XS (); |
61 | use IO::AIO (); |
60 | use IO::AIO (); |
62 | use Time::HiRes; |
61 | use Time::HiRes; |
63 | use Compress::LZF; |
62 | use Compress::LZF; |
… | |
… | |
3292 | while (my ($face, $info) = each %$faces) { |
3291 | while (my ($face, $info) = each %$faces) { |
3293 | my $idx = (cf::face::find $face) || cf::face::alloc $face; |
3292 | my $idx = (cf::face::find $face) || cf::face::alloc $face; |
3294 | |
3293 | |
3295 | cf::face::set_visibility $idx, $info->{visibility}; |
3294 | cf::face::set_visibility $idx, $info->{visibility}; |
3296 | cf::face::set_magicmap $idx, $info->{magicmap}; |
3295 | cf::face::set_magicmap $idx, $info->{magicmap}; |
3297 | cf::face::set_data $idx, 0, $info->{data32}, Digest::MD5::md5 $info->{data32}; |
3296 | cf::face::set_data $idx, 0, $info->{data32}, $info->{hash32}; |
3298 | cf::face::set_data $idx, 1, $info->{data64}, Digest::MD5::md5 $info->{data64}; |
3297 | cf::face::set_data $idx, 1, $info->{data64}, $info->{hash64}; |
3299 | |
3298 | |
3300 | cf::cede_to_tick; |
3299 | cf::cede_to_tick; |
3301 | } |
3300 | } |
3302 | |
3301 | |
3303 | while (my ($face, $info) = each %$faces) { |
3302 | while (my ($face, $info) = each %$faces) { |
… | |
… | |
3327 | |
3326 | |
3328 | cf::anim::invalidate_all; # d'oh |
3327 | cf::anim::invalidate_all; # d'oh |
3329 | } |
3328 | } |
3330 | |
3329 | |
3331 | { |
3330 | { |
3332 | # TODO: for gcfclient pleasure, we should give resources |
|
|
3333 | # that gcfclient doesn't grok a >10000 face index. |
|
|
3334 | my $res = $facedata->{resource}; |
3331 | my $res = $facedata->{resource}; |
3335 | |
3332 | |
3336 | while (my ($name, $info) = each %$res) { |
3333 | while (my ($name, $info) = each %$res) { |
3337 | if (defined $info->{type}) { |
3334 | if (defined $info->{type}) { |
3338 | my $idx = (cf::face::find $name) || cf::face::alloc $name; |
3335 | my $idx = (cf::face::find $name) || cf::face::alloc $name; |
3339 | my $data; |
|
|
3340 | |
3336 | |
3341 | if ($info->{type} & 1) { |
3337 | cf::face::set_data $idx, 0, $info->{data}, $info->{hash}; |
3342 | # prepend meta info |
|
|
3343 | |
|
|
3344 | my $meta = $enc->encode ({ |
|
|
3345 | name => $name, |
|
|
3346 | %{ $info->{meta} || {} }, |
|
|
3347 | }); |
|
|
3348 | |
|
|
3349 | $data = pack "(w/a*)*", $meta, $info->{data}; |
|
|
3350 | } else { |
|
|
3351 | $data = $info->{data}; |
|
|
3352 | } |
|
|
3353 | |
|
|
3354 | cf::face::set_data $idx, 0, $data, Digest::MD5::md5 $data; |
|
|
3355 | cf::face::set_type $idx, $info->{type}; |
3338 | cf::face::set_type $idx, $info->{type}; |
3356 | } else { |
3339 | } else { |
3357 | $RESOURCE{$name} = $info; |
3340 | $RESOURCE{$name} = $info; |
3358 | } |
3341 | } |
3359 | |
3342 | |