… | |
… | |
2870 | |
2870 | |
2871 | sub new { |
2871 | sub new { |
2872 | my ($class, %arg) = @_; |
2872 | my ($class, %arg) = @_; |
2873 | |
2873 | |
2874 | my $self = $class->SUPER::new ( |
2874 | my $self = $class->SUPER::new ( |
|
|
2875 | tooltip => sub { |
|
|
2876 | my ($self) = @_; |
|
|
2877 | |
|
|
2878 | sprintf "%s points experience (level %d).\n%s points to next level %s.", |
|
|
2879 | ::formsep $self->{exp}, |
|
|
2880 | $self->{lvl}, |
|
|
2881 | ::formsep $self->{nxt} |
|
|
2882 | }, |
2875 | %arg |
2883 | %arg |
2876 | ); |
2884 | ); |
2877 | |
2885 | |
2878 | $::CONN->{on_exp_update}{$self+0} = sub { $self->set_value ($self->{value}) } |
2886 | $::CONN->{on_exp_update}{$self+0} = sub { $self->set_value ($self->{value}) } |
2879 | if $::CONN; |
2887 | if $::CONN; |
… | |
… | |
2890 | $self->SUPER::DESTROY; |
2898 | $self->SUPER::DESTROY; |
2891 | } |
2899 | } |
2892 | |
2900 | |
2893 | sub set_value { |
2901 | sub set_value { |
2894 | my ($self, $lvl, $exp) = @_; |
2902 | my ($self, $lvl, $exp) = @_; |
|
|
2903 | |
|
|
2904 | $self->{lvl} = $exp; |
|
|
2905 | $self->{exp} = $exp; |
2895 | |
2906 | |
2896 | my $v = -1; |
2907 | my $v = -1; |
2897 | |
2908 | |
2898 | if ($::CONN && (my $table = $::CONN->{exp_table})) { |
2909 | if ($::CONN && (my $table = $::CONN->{exp_table})) { |
2899 | my $l0 = $table->[$lvl - 1]; |
2910 | my $l0 = $table->[$lvl - 1]; |
2900 | my $l1 = $table->[$lvl]; |
2911 | my $l1 = $table->[$lvl]; |
|
|
2912 | |
|
|
2913 | $self->{nxt} = $l1; |
2901 | |
2914 | |
2902 | $v = ($exp - $l0) / ($l1 - $l0); |
2915 | $v = ($exp - $l0) / ($l1 - $l0); |
2903 | } |
2916 | } |
2904 | |
2917 | |
2905 | $self->SUPER::set_value ($v); |
2918 | $self->SUPER::set_value ($v); |