ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC.pm (file contents):
Revision 1.61 by root, Wed May 24 21:49:58 2006 UTC vs.
Revision 1.66 by root, Thu May 25 21:18:47 2006 UTC

18 $VERSION = '0.1'; 18 $VERSION = '0.1';
19 19
20 use XSLoader; 20 use XSLoader;
21 XSLoader::load "CFClient", $VERSION; 21 XSLoader::load "CFClient", $VERSION;
22} 22}
23
24use utf8;
23 25
24use Carp (); 26use Carp ();
25use AnyEvent (); 27use AnyEvent ();
26use BerkeleyDB; 28use BerkeleyDB;
27 29
213 my ($db, $key, $data) = @_; 215 my ($db, $key, $data) = @_;
214 216
215 $DB_SYNC{$db} = AnyEvent->timer (after => 5, cb => sub { $db->db_sync }); 217 $DB_SYNC{$db} = AnyEvent->timer (after => 5, cb => sub { $db->db_sync });
216 218
217 $db->db_put ($key => $data) 219 $db->db_put ($key => $data)
220}
221
222package CFClient::Item;
223
224sub desc_string {
225 my ($self) = @_;
226
227 my $desc =
228 $self->{nrof} < 2
229 ? $self->{name}
230 : "$self->{nrof} × $self->{name_pl}";
231
232 $self->{flags} & Crossfire::Protocol::F_OPEN
233 and $desc .= " (open)";
234 $self->{flags} & Crossfire::Protocol::F_APPLIED
235 and $desc .= " (applied)";
236 $self->{flags} & Crossfire::Protocol::F_UNPAID
237 and $desc .= " (unpaid)";
238 $self->{flags} & Crossfire::Protocol::F_MAGIC
239 and $desc .= " (magic)";
240 $self->{flags} & Crossfire::Protocol::F_CURSED
241 and $desc .= " (cursed)";
242 $self->{flags} & Crossfire::Protocol::F_DAMNED
243 and $desc .= " (damned)";
244 $self->{flags} & Crossfire::Protocol::F_LOCKED
245 and $desc .= " *";
246
247 $desc
248}
249
250sub weight_string {
251 my ($self) = @_;
252
253 my $weight = ($self->{nrof} || 1) * $self->{weight};
254
255 $weight < 0 ? "?" : $weight * 0.001
256}
257
258sub update_widgets {
259 my ($self) = @_;
260
261 my $button_cb = sub {
262 my (undef, $ev, $x, $y) = @_;
263
264 if (($ev->{mod} & CFClient::KMOD_SHIFT) && $ev->{button} == 1) {
265 my $targ = $::CONN->{player}{tag};
266
267 if ($self->{container} == $::CONN->{player}{tag}) {
268 $targ = $::CONN->{open_container};
269 }
270
271 $::CONN->send ("move $targ $self->{tag} 0");
272 } elsif ($ev->{button} == 1) {
273 $::CONN->send ("examine $self->{tag}");
274 } elsif ($ev->{button} == 2) {
275 $::CONN->send ("apply $self->{tag}");
276 } elsif ($ev->{button} == 3) {
277 my @menu_items = (
278 ["examine", sub { $::CONN->send ("examine $self->{tag}") }],
279 ["mark", sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }],
280 ["apply", sub { $::CONN->send ("apply $self->{tag}") }],
281 (
282 $self->{flags} & Crossfire::Protocol::F_LOCKED
283 ? (
284 ["unlock", sub { $::CONN->send ("lock " . pack "CN", 0, $self->{tag}) }],
285 )
286 : (
287 ["lock", sub { $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) }],
288 ["drop", sub { $::CONN->send ("move $::CONN->{open_container} $self->{tag} 0") }],
289 )
290 ),
291 );
292
293 CFClient::UI::Menu->new (items => \@menu_items)->popup ($ev);
294 }
295
296 1
297 };
298
299 my $tooltip_std = "<small>"
300 . "Left click - examine item\n"
301 . "Shift-Left click - " . ($self->{container} ? "move or drop" : "take") . " item\n"
302 . "Middle click - apply\n"
303 . "Right click - further options"
304 . "</small>\n";
305
306 $self->{face_widget} ||= new CFClient::UI::Face
307 can_events => 1,
308 can_hover => 1,
309 animspeed => $self->{animspeed}, # TODO# must be set at creation time
310 connect_button_down => $button_cb,
311 ;
312 $self->{face_widget}{face} = $self->{face};
313 $self->{face_widget}{anim} = $self->{anim};
314 $self->{face_widget}{animspeed} = $self->{animspeed};
315 $self->{face_widget}->set_tooltip (
316 "<b>Face/Animation.</b>\n"
317 . "Item uses face #$self->{face}. "
318 . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ")
319 . "\n\n$tooltip_std"
320 );
321
322 $self->{desc_widget} ||= new CFClient::UI::Label
323 can_events => 1,
324 can_hover => 1,
325 ellipsise => 2,
326 xalign => 0,
327 connect_button_down => $button_cb,
328 ;
329 my $desc = CFClient::Item::desc_string $self;
330 $self->{desc_widget}->set_text ($desc);
331 $self->{desc_widget}->set_tooltip ("<b>$desc</b>.\n$tooltip_std");
332
333 $self->{weight_widget} ||= new CFClient::UI::Label
334 can_events => 1,
335 can_hover => 1,
336 ellipsise => 0,
337 xalign => 0.5,
338 connect_button_down => $button_cb,
339 ;
340 $self->{weight_widget}->set_text (CFClient::Item::weight_string $self);
341
342 $self->{weight_widget}->set_tooltip (
343 "<b>Weight</b>.\n"
344 . ($self->{weight} >= 0 ? "One item weighs $self->{weight}g. " : "You have no idea how much this weighs. ")
345 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ")
346 . "\n\n$tooltip_std"
347 );
218} 348}
219 349
220package CFClient::Texture; 350package CFClient::Texture;
221 351
222use strict; 352use strict;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines