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.69 by root, Thu May 25 23:06:05 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
169 . $_[1]->content->present ($_[0]) 171 . $_[1]->content->present ($_[0])
170} 172}
171 173
172sub view_verbatim { 174sub view_verbatim {
173 (join "", 175 (join "",
174 map +("\t" x ($indent / 2)) . "$_\n", 176 map +("\t" x ($indent / 2)) . "<tt>$_</tt>\n",
175 split /\n/, CFClient::UI::Label::escape ($_[1])) 177 split /\n/, CFClient::UI::Label::escape ($_[1]))
176 . "\n" 178 . "\n"
177} 179}
178 180
179sub view_textblock { 181sub view_textblock {
180 ("\t" x ($indent / 2)) . "$_[1]\n\n" 182 ("\t" x ($indent / 2)) . "$_[1]\n\n"
181} 183}
182 184
183sub view_head1 { 185sub view_head1 {
184 "<span foreground='#ffff00' size='x-large'>" . $_[1]->title->present ($_[0]) . "</span>\n\n" 186 "\n\n<span foreground='#ffff00' size='x-large'>" . $_[1]->title->present ($_[0]) . "</span>\n\n"
185 . $_[1]->content->present ($_[0]) 187 . $_[1]->content->present ($_[0])
186}; 188};
187 189
188sub view_head2 { 190sub view_head2 {
189 "<span foreground='#ccccff' size='large'>" . $_[1]->title->present ($_[0]) . "</span>\n\n" 191 "\n<span foreground='#ccccff' size='large'>" . $_[1]->title->present ($_[0]) . "</span>\n\n"
192 . $_[1]->content->present ($_[0])
193};
194
195sub view_head3 {
196 "\n<span size='large'>" . $_[1]->title->present ($_[0]) . "</span>\n\n"
190 . $_[1]->content->present ($_[0]) 197 . $_[1]->content->present ($_[0])
191}; 198};
192 199
193sub view_over { 200sub view_over {
194 local $indent = $indent + $_[1]->indent; 201 local $indent = $indent + $_[1]->indent;
213 my ($db, $key, $data) = @_; 220 my ($db, $key, $data) = @_;
214 221
215 $DB_SYNC{$db} = AnyEvent->timer (after => 5, cb => sub { $db->db_sync }); 222 $DB_SYNC{$db} = AnyEvent->timer (after => 5, cb => sub { $db->db_sync });
216 223
217 $db->db_put ($key => $data) 224 $db->db_put ($key => $data)
225}
226
227package CFClient::Item;
228
229sub desc_string {
230 my ($self) = @_;
231
232 my $desc =
233 $self->{nrof} < 2
234 ? $self->{name}
235 : "$self->{nrof} × $self->{name_pl}";
236
237 $self->{flags} & Crossfire::Protocol::F_OPEN
238 and $desc .= " (open)";
239 $self->{flags} & Crossfire::Protocol::F_APPLIED
240 and $desc .= " (applied)";
241 $self->{flags} & Crossfire::Protocol::F_UNPAID
242 and $desc .= " (unpaid)";
243 $self->{flags} & Crossfire::Protocol::F_MAGIC
244 and $desc .= " (magic)";
245 $self->{flags} & Crossfire::Protocol::F_CURSED
246 and $desc .= " (cursed)";
247 $self->{flags} & Crossfire::Protocol::F_DAMNED
248 and $desc .= " (damned)";
249 $self->{flags} & Crossfire::Protocol::F_LOCKED
250 and $desc .= " *";
251
252 $desc
253}
254
255sub weight_string {
256 my ($self) = @_;
257
258 my $weight = ($self->{nrof} || 1) * $self->{weight};
259
260 $weight < 0 ? "?" : $weight * 0.001
261}
262
263sub update_widgets {
264 my ($self) = @_;
265
266 my $button_cb = sub {
267 my (undef, $ev, $x, $y) = @_;
268
269 if (($ev->{mod} & CFClient::KMOD_SHIFT) && $ev->{button} == 1) {
270 my $targ = $::CONN->{player}{tag};
271
272 if ($self->{container} == $::CONN->{player}{tag}) {
273 $targ = $::CONN->{open_container};
274 }
275
276 $::CONN->send ("move $targ $self->{tag} 0");
277 } elsif ($ev->{button} == 1) {
278 $::CONN->send ("examine $self->{tag}");
279 } elsif ($ev->{button} == 2) {
280 $::CONN->send ("apply $self->{tag}");
281 } elsif ($ev->{button} == 3) {
282 my @menu_items = (
283 ["examine", sub { $::CONN->send ("examine $self->{tag}") }],
284 ["mark", sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }],
285 ["apply", sub { $::CONN->send ("apply $self->{tag}") }],
286 (
287 $self->{flags} & Crossfire::Protocol::F_LOCKED
288 ? (
289 ["unlock", sub { $::CONN->send ("lock " . pack "CN", 0, $self->{tag}) }],
290 )
291 : (
292 ["lock", sub { $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) }],
293 ["drop", sub { $::CONN->send ("move $::CONN->{open_container} $self->{tag} 0") }],
294 )
295 ),
296 );
297
298 CFClient::UI::Menu->new (items => \@menu_items)->popup ($ev);
299 }
300
301 1
302 };
303
304 my $tooltip_std = "<small>"
305 . "Left click - examine item\n"
306 . "Shift-Left click - " . ($self->{container} ? "move or drop" : "take") . " item\n"
307 . "Middle click - apply\n"
308 . "Right click - further options"
309 . "</small>\n";
310
311 $self->{face_widget} ||= new CFClient::UI::Face
312 can_events => 1,
313 can_hover => 1,
314 anim => $self->{anim},
315 animspeed => $self->{animspeed}, # TODO# must be set at creation time
316 connect_button_down => $button_cb,
317 ;
318 $self->{face_widget}{face} = $self->{face};
319 $self->{face_widget}{anim} = $self->{anim};
320 $self->{face_widget}{animspeed} = $self->{animspeed};
321 $self->{face_widget}->set_tooltip (
322 "<b>Face/Animation.</b>\n"
323 . "Item uses face #$self->{face}. "
324 . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ")
325 . "\n\n$tooltip_std"
326 );
327
328 $self->{desc_widget} ||= new CFClient::UI::Label
329 can_events => 1,
330 can_hover => 1,
331 ellipsise => 2,
332 align => -1,
333 connect_button_down => $button_cb,
334 ;
335 my $desc = CFClient::Item::desc_string $self;
336 $self->{desc_widget}->set_text ($desc);
337 $self->{desc_widget}->set_tooltip ("<b>$desc</b>.\n$tooltip_std");
338
339 $self->{weight_widget} ||= new CFClient::UI::Label
340 can_events => 1,
341 can_hover => 1,
342 ellipsise => 0,
343 align => 0,
344 connect_button_down => $button_cb,
345 ;
346 $self->{weight_widget}->set_text (CFClient::Item::weight_string $self);
347
348 $self->{weight_widget}->set_tooltip (
349 "<b>Weight</b>.\n"
350 . ($self->{weight} >= 0 ? "One item weighs $self->{weight}g. " : "You have no idea how much this weighs. ")
351 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ")
352 . "\n\n$tooltip_std"
353 );
218} 354}
219 355
220package CFClient::Texture; 356package CFClient::Texture;
221 357
222use strict; 358use strict;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines