--- deliantra/Deliantra-Client/DC.pm 2006/05/24 21:49:58 1.61 +++ deliantra/Deliantra-Client/DC.pm 2006/05/25 16:24:43 1.62 @@ -21,6 +21,8 @@ XSLoader::load "CFClient", $VERSION; } +use utf8; + use Carp (); use AnyEvent (); use BerkeleyDB; @@ -217,6 +219,77 @@ $db->db_put ($key => $data) } +package CFClient::Item; + +sub desc_string { + my ($self) = @_; + + my $desc = + $self->{nrof} < 2 + ? $self->{name} + : "$self->{nrof} × $self->{name_pl}"; + + $self->{flags} & Crossfire::Protocol::F_OPEN + and $desc .= " (open)"; + $self->{flags} & Crossfire::Protocol::F_APPLIED + and $desc .= " (applied)"; + $self->{flags} & Crossfire::Protocol::F_UNPAID + and $desc .= " (unpaid)"; + $self->{flags} & Crossfire::Protocol::F_MAGIC + and $desc .= " (magic)"; + $self->{flags} & Crossfire::Protocol::F_CURSED + and $desc .= " (cursed)"; + $self->{flags} & Crossfire::Protocol::F_DAMNED + and $desc .= " (damned)"; + $self->{flags} & Crossfire::Protocol::F_LOCKED + and $desc .= " *"; + + $desc +} + +sub weight_string { + my ($self) = @_; + + my $weight = ($self->{nrof} || 1) * $self->{weight}; + + $weight < 0 ? "?" : $weight * 0.001 +} + +sub update_widgets { + my ($self) = @_; + + my $tooltip_std = "" + . "Left click - examine item\n" + . "Shift-Left click - " . ($self->{container} ? "move or drop" : "take") . " item\n" + . "Middle click - apply\n" + . "Right click - further options" + . "\n"; + + $self->{face_widget} ||= new CFClient::UI::Face can_events => 1, can_hover => 1; + $self->{face_widget}{face} = $self->{face}; + $self->{face_widget}{anim} = $self->{anim}; + $self->{face_widget}{animspeed} = $self->{animespeed}; + $self->{face_widget}->set_tooltip ( + "Face/Animation.\n" + . "Item uses face #$self->{face}. " + . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ") + . "\n\n$tooltip_std" + ); + + $self->{desc_widget} ||= new CFClient::UI::Label ellipsise => 2, can_events => 1, can_hover => 1; + $self->{desc_widget}->set_text (CFClient::Item::desc_string $self); + + $self->{weight_widget} ||= new CFClient::UI::Label ellipsise => 0, can_events => 1, can_hover => 1, align => 0.5; + $self->{weight_widget}->set_text (CFClient::Item::weight_string $self); + + $self->{weight_widget}->set_tooltip ( + "Weight.\n" + . ($self->{weight} >= 0 ? "One item weighs $self->{weight}g. " : "You have no idea how much this weighs. ") + . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ") + . "\n\n$tooltip_std" + ); +} + package CFClient::Texture; use strict;