1 | package DC::Protocol; |
1 | package DC::Protocol; |
2 | |
2 | |
3 | use utf8; |
3 | use common::sense; |
4 | use strict; |
|
|
5 | |
4 | |
6 | use Guard (); |
5 | use Guard (); |
7 | |
6 | |
8 | use Deliantra::Protocol::Constants; |
7 | use Deliantra::Protocol::Constants; |
9 | |
8 | |
… | |
… | |
18 | |
17 | |
19 | our $TEX_DIALOGUE = new_from_resource DC::Texture |
18 | our $TEX_DIALOGUE = new_from_resource DC::Texture |
20 | "dialogue.png", minify => 1, mipmap => 1; |
19 | "dialogue.png", minify => 1, mipmap => 1; |
21 | |
20 | |
22 | our $TEX_NOFACE = new_from_resource DC::Texture |
21 | our $TEX_NOFACE = new_from_resource DC::Texture |
23 | "noface.png", minify => 1, mipmap => 1; |
22 | "noface.png", minify => 1, mipmap => 1, wrap => 1; |
24 | |
|
|
25 | our $TEX_HIDDEN = new_from_resource DC::Texture |
|
|
26 | "hidden.png", minify => 1, mipmap => 1; |
|
|
27 | |
23 | |
28 | sub MIN_TEXTURE_UNUSED() { 1 }#d# |
24 | sub MIN_TEXTURE_UNUSED() { 1 }#d# |
29 | |
25 | |
30 | sub new { |
26 | sub new { |
31 | my ($class, %arg) = @_; |
27 | my ($class, %arg) = @_; |
… | |
… | |
96 | } |
92 | } |
97 | |
93 | |
98 | { |
94 | { |
99 | $self->{noface} = my $tex = $TEX_NOFACE; |
95 | $self->{noface} = my $tex = $TEX_NOFACE; |
100 | $self->{map}->set_texture (2, @$tex{qw(name w h s t)}, @{$tex->{minified}}); |
96 | $self->{map}->set_texture (2, @$tex{qw(name w h s t)}, @{$tex->{minified}}); |
101 | } |
|
|
102 | |
|
|
103 | { |
|
|
104 | $self->{hidden} = my $tex = $TEX_HIDDEN; |
|
|
105 | $self->{map}->set_texture (3, @$tex{qw(name w h s t)}, @{$tex->{minified}}); |
|
|
106 | } |
97 | } |
107 | |
98 | |
108 | # $self->{expire_count} = DC::DB::FIRST_TILE_ID; # minimum non-fixed tile id |
99 | # $self->{expire_count} = DC::DB::FIRST_TILE_ID; # minimum non-fixed tile id |
109 | # $self->{expire_w} = EV::timer 1, 1, sub { |
100 | # $self->{expire_w} = EV::timer 1, 1, sub { |
110 | # my $count = (int @{ $self->{texture} } / MIN_TEXTURE_UNUSED) || 1; |
101 | # my $count = (int @{ $self->{texture} } / MIN_TEXTURE_UNUSED) || 1; |
… | |
… | |
410 | ? (($new & $_ ? "+" : "-") . $self->{spell_paths}{$_}) |
401 | ? (($new & $_ ? "+" : "-") . $self->{spell_paths}{$_}) |
411 | : () |
402 | : () |
412 | } |
403 | } |
413 | sort { $a <=> $b } keys %{$self->{spell_paths}}; |
404 | sort { $a <=> $b } keys %{$self->{spell_paths}}; |
414 | |
405 | |
415 | join "", @diff |
406 | "\u$name: " . (join ", ", @diff) |
416 | } |
407 | } |
417 | |
408 | |
418 | # all stats that are chacked against changes |
409 | # all stats that are chacked against changes |
419 | my @statchange = ( |
410 | my @statchange = ( |
420 | [&CS_STAT_STR => \&_stat_numdiff, "Str"], |
411 | [&CS_STAT_STR => \&_stat_numdiff, "Str"], |
… | |
… | |
475 | } |
466 | } |
476 | |
467 | |
477 | if ( |
468 | if ( |
478 | my @diffs = map $_->[1]->($self, $_->[2], $prev->{$_->[0]}, $stats->{$_->[0]}), @statchange |
469 | my @diffs = map $_->[1]->($self, $_->[2], $prev->{$_->[0]}, $stats->{$_->[0]}), @statchange |
479 | ) { |
470 | ) { |
480 | my $msg = "<b>stat change</b>: " . (join " ", @diffs); |
471 | my $msg = "<b>stat change</b>: " . (join " ", map "($_)", @diffs); |
481 | $self->{statusbox}->add ($msg, group => "stat $msg", fg => [0.8, 1, 0.2, 1], timeout => 20); |
472 | $self->{statusbox}->add ($msg, group => "stat $msg", fg => [0.8, 1, 0.2, 1], timeout => 20); |
482 | } |
473 | } |
483 | |
474 | |
484 | $self->update_stats_window ($stats, $prev); |
475 | $self->update_stats_window ($stats, $prev); |
485 | |
476 | |
… | |
… | |
547 | $::STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); |
538 | $::STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); |
548 | $::STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); |
539 | $::STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); |
549 | |
540 | |
550 | $self->update_weight; |
541 | $self->update_weight; |
551 | |
542 | |
552 | $::STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$RES_TBL{$_}}) |
543 | $::STATWIDS->{"res_$_"}->set_text (sprintf "%d%%", $stats->{$RES_TBL{$_}}) |
553 | for keys %RES_TBL; |
544 | for keys %RES_TBL; |
554 | |
545 | |
555 | my $sktbl = $::STATWIDS->{skill_tbl}; |
546 | my $sktbl = $::STATWIDS->{skill_tbl}; |
556 | my @skills = keys %{ $self->{skill_info} }; |
547 | my @skills = keys %{ $self->{skill_info} }; |
557 | |
548 | |
… | |
… | |
998 | |
989 | |
999 | my $tex = $self->{texture}[$tile] ||= |
990 | my $tex = $self->{texture}[$tile] ||= |
1000 | new DC::Texture |
991 | new DC::Texture |
1001 | tile => $tile, |
992 | tile => $tile, |
1002 | image => $data, delete_image => 1, |
993 | image => $data, delete_image => 1, |
1003 | minify => 1, mipmap => 1; |
994 | minify => 1; |
1004 | |
995 | |
1005 | if (my $cbs = delete $self->{tile_cb}{$tile}) { |
996 | if (my $cbs = delete $self->{tile_cb}{$tile}) { |
1006 | $_->($tex) for @$cbs; |
997 | $_->($tex) for @$cbs; |
1007 | } |
998 | } |
1008 | } |
999 | } |