… | |
… | |
40 | use CFClient::UI; |
40 | use CFClient::UI; |
41 | use CFClient::BindingEditor; |
41 | use CFClient::BindingEditor; |
42 | use CFClient::MapWidget; |
42 | use CFClient::MapWidget; |
43 | |
43 | |
44 | $SIG{QUIT} = sub { Carp::cluck "QUIT" }; |
44 | $SIG{QUIT} = sub { Carp::cluck "QUIT" }; |
|
|
45 | $SIG{PIPE} = 'IGNORE'; |
45 | |
46 | |
46 | $Event::DIED = sub { |
47 | $Event::DIED = sub { |
47 | # TODO: display dialog box or so |
48 | # TODO: display dialog box or so |
48 | Carp::confess $_[1];#d#TODO: remove when stable |
49 | Carp::confess $_[1];#d#TODO: remove when stable |
49 | CFClient::error $_[1]; |
50 | CFClient::error $_[1]; |
… | |
… | |
85 | our $CONSOLE; |
86 | our $CONSOLE; |
86 | our $METASERVER; |
87 | our $METASERVER; |
87 | our $LOGIN_BUTTON; |
88 | our $LOGIN_BUTTON; |
88 | our $QUIT_DIALOG; |
89 | our $QUIT_DIALOG; |
89 | our $HOST_ENTRY; |
90 | our $HOST_ENTRY; |
|
|
91 | our $FULLSCREEN_ENABLE; |
|
|
92 | our $PICKUP_ENABLE; |
90 | our $SERVER_INFO; |
93 | our $SERVER_INFO; |
91 | |
94 | |
92 | our $SETUP_DIALOG; |
95 | our $SETUP_DIALOG; |
93 | our $SETUP_NOTEBOOK; |
96 | our $SETUP_NOTEBOOK; |
94 | our $SETUP_SERVER; |
97 | our $SETUP_SERVER; |
95 | our $SETUP_KEYBOARD; |
98 | our $SETUP_KEYBOARD; |
96 | our $SETUP_SPELLS; |
|
|
97 | |
99 | |
|
|
100 | our $PL_NOTEBOOK; |
98 | our $STATS_WINDOW; |
101 | our $PL_WINDOW; |
|
|
102 | |
|
|
103 | our $INVENTORY_PAGE; |
|
|
104 | our $STATS_PAGE; |
|
|
105 | our $SKILL_PAGE; |
|
|
106 | our $SPELL_PAGE; |
|
|
107 | |
|
|
108 | our $HELP_WINDOW; |
99 | our $MESSAGE_WINDOW; |
109 | our $MESSAGE_WINDOW; |
100 | our $FLOORBOX; |
110 | our $FLOORBOX; |
101 | our $GAUGES; |
111 | our $GAUGES; |
102 | our $STATWIDS; |
112 | our $STATWIDS; |
103 | |
113 | |
… | |
… | |
110 | |
120 | |
111 | our $ALT_ENTER_MESSAGE; |
121 | our $ALT_ENTER_MESSAGE; |
112 | our $STATUSBOX; |
122 | our $STATUSBOX; |
113 | our $DEBUG_STATUS; |
123 | our $DEBUG_STATUS; |
114 | |
124 | |
115 | our $INV_WINDOW; |
|
|
116 | our $INV; |
125 | our $INV; |
117 | our $INVR; |
126 | our $INVR; |
118 | our $INV_RIGHT_HB; |
127 | our $INV_RIGHT_HB; |
119 | |
128 | |
120 | our $BIND_EDITOR; |
129 | our $BIND_EDITOR; |
… | |
… | |
221 | $conn->send ("reply $stat"); |
230 | $conn->send ("reply $stat"); |
222 | destroy_query_dialog $conn; |
231 | destroy_query_dialog $conn; |
223 | return; |
232 | return; |
224 | } |
233 | } |
225 | |
234 | |
226 | $STATS_WINDOW->show; |
235 | $STATS_PAGE->show; |
227 | $MESSAGE_WINDOW->hide; |
236 | $MESSAGE_WINDOW->hide; |
228 | |
237 | |
229 | unshift @dialog, new CFClient::UI::Label |
238 | unshift @dialog, new CFClient::UI::Label |
230 | max_w => $::WIDTH * 0.4, |
239 | max_w => $::WIDTH * 0.4, |
231 | ellipsise => 0, |
240 | ellipsise => 0, |
… | |
… | |
271 | # right: accept |
280 | # right: accept |
272 | $table->add (4, 0, new CFClient::UI::Button |
281 | $table->add (4, 0, new CFClient::UI::Button |
273 | text => "Accept", |
282 | text => "Accept", |
274 | on_activate => sub { |
283 | on_activate => sub { |
275 | $conn->send ("reply n"); |
284 | $conn->send ("reply n"); |
276 | $STATS_WINDOW->hide; |
285 | $STATS_PAGE->hide; |
277 | destroy_query_dialog $conn; |
286 | destroy_query_dialog $conn; |
278 | 0 |
287 | 0 |
279 | }, |
288 | }, |
280 | ); |
289 | ); |
281 | |
290 | |
… | |
… | |
373 | |
382 | |
374 | sub stop_game { |
383 | sub stop_game { |
375 | $LOGIN_BUTTON->set_text ("Login"); |
384 | $LOGIN_BUTTON->set_text ("Login"); |
376 | $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); |
385 | $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); |
377 | $SETUP_DIALOG->show; |
386 | $SETUP_DIALOG->show; |
378 | $INV_WINDOW->hide; |
387 | $PL_WINDOW->hide; |
379 | $SETUP_SPELLS->clear_spells; |
388 | $SPELL_PAGE->clear_spells; |
380 | |
389 | |
381 | return unless $CONN; |
390 | return unless $CONN; |
382 | |
391 | |
383 | status "connection closed"; |
392 | status "connection closed"; |
384 | |
393 | |
… | |
… | |
409 | $mode_slider->emit (changed => $mode_slider->{range}[0]); |
418 | $mode_slider->emit (changed => $mode_slider->{range}[0]); |
410 | |
419 | |
411 | my $row = 1; |
420 | my $row = 1; |
412 | |
421 | |
413 | $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); |
422 | $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); |
414 | $table->add (1, $row++, new CFClient::UI::CheckBox |
423 | $table->add (1, $row++, $FULLSCREEN_ENABLE = new CFClient::UI::CheckBox |
415 | state => $CFG->{fullscreen}, |
424 | state => $CFG->{fullscreen}, |
416 | tooltip => "Bring the client into fullscreen mode.", |
425 | tooltip => "Bring the client into fullscreen mode.", |
417 | on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } |
426 | on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } |
418 | ); |
427 | ); |
419 | |
428 | |
… | |
… | |
469 | range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], |
478 | range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], |
470 | tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", |
479 | tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", |
471 | on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, |
480 | on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, |
472 | ); |
481 | ); |
473 | |
482 | |
474 | $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); |
|
|
475 | |
|
|
476 | $table->add (1, $row++, new CFClient::UI::Slider |
|
|
477 | range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], |
|
|
478 | tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.", |
|
|
479 | on_changed => sub { |
|
|
480 | $CFG->{stat_fontsize} = $_[1]; |
|
|
481 | &set_stats_window_fontsize; |
|
|
482 | 0 |
|
|
483 | } |
|
|
484 | ); |
|
|
485 | |
|
|
486 | $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); |
483 | $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); |
487 | $table->add (1, $row++, new CFClient::UI::Slider |
484 | $table->add (1, $row++, new CFClient::UI::Slider |
488 | range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], |
485 | range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], |
489 | tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", |
486 | tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", |
490 | on_changed => sub { |
487 | on_changed => sub { |
… | |
… | |
559 | ); |
556 | ); |
560 | |
557 | |
561 | $vbox |
558 | $vbox |
562 | } |
559 | } |
563 | |
560 | |
564 | sub set_stats_window_fontsize { |
|
|
565 | for (values %{$STATWIDS}) { |
|
|
566 | $_->set_fontsize ($::CFG->{stat_fontsize}); |
|
|
567 | } |
|
|
568 | } |
|
|
569 | |
|
|
570 | sub set_gauge_window_fontsize { |
561 | sub set_gauge_window_fontsize { |
571 | for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { |
562 | for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { |
572 | $_->set_fontsize ($::CFG->{gauge_fontsize}); |
563 | $_->set_fontsize ($::CFG->{gauge_fontsize}); |
573 | } |
564 | } |
574 | } |
565 | } |
… | |
… | |
653 | |
644 | |
654 | $table |
645 | $table |
655 | } |
646 | } |
656 | |
647 | |
657 | sub stats_window { |
648 | sub stats_window { |
658 | my $tgw = new CFClient::UI::FancyFrame |
649 | my $vb = new CFClient::UI::VBox; |
659 | y => $HEIGHT * (2/8), |
|
|
660 | x => "max", |
|
|
661 | title => "Stats", |
|
|
662 | name => "stats_window", |
|
|
663 | has_close_button => 1; |
|
|
664 | |
650 | |
665 | $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox); |
|
|
666 | $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, |
651 | $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, |
667 | can_hover => 1, can_events => 1, |
652 | can_hover => 1, can_events => 1, |
668 | tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); |
653 | tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); |
669 | $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, |
654 | $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, |
670 | can_hover => 1, can_events => 1, |
655 | can_hover => 1, can_events => 1, |
… | |
… | |
706 | font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip); |
691 | font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip); |
707 | $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label |
692 | $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label |
708 | font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip); |
693 | font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip); |
709 | } |
694 | } |
710 | |
695 | |
711 | $hb->add (my $tbl2 = new CFClient::UI::Table expand => 1); |
696 | $vb->add (my $tbl2 = new CFClient::UI::Table expand => 1); |
712 | |
697 | |
713 | my $row = 0; |
698 | my $row = 0; |
714 | my $col = 0; |
699 | my $col = 0; |
715 | |
700 | |
716 | my %resist_names = ( |
701 | my %resist_names = ( |
|
|
702 | slow => ["Slow", |
717 | slow => "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)", |
703 | "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)"], |
|
|
704 | holyw => ["Holy Word", |
718 | holyw => "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)", |
705 | "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)"], |
|
|
706 | conf => ["Confusion", |
719 | conf => "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)", |
707 | "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)"], |
|
|
708 | fire => ["Fire", |
720 | fire => "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)", |
709 | "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)"], |
|
|
710 | depl => ["Depletion", |
721 | depl => "<b>Depletion</b> (some monsters and other effects can cause stats depletion)", |
711 | "<b>Depletion</b> (some monsters and other effects can cause stats depletion)"], |
|
|
712 | magic => ["Magic", |
722 | magic => "<b>Magic</b> (resistance to magic spells like magic missile or similar)", |
713 | "<b>Magic</b> (resistance to magic spells like magic missile or similar)"], |
|
|
714 | drain => ["Draining", |
723 | drain => "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)", |
715 | "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)"], |
|
|
716 | acid => ["Acid", |
724 | acid => "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)", |
717 | "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)"], |
|
|
718 | pois => ["Poison", |
725 | pois => "<b>Poison</b> (resistance to getting poisoned)", |
719 | "<b>Poison</b> (resistance to getting poisoned)"], |
|
|
720 | para => ["Paralysation", |
726 | para => "<b>Paralysation</b> (this resistance affects the chance you get paralysed)", |
721 | "<b>Paralysation</b> (this resistance affects the chance you get paralysed)"], |
|
|
722 | deat => ["Death", |
727 | deat => "<b>Death</b> (resistance against death spells)", |
723 | "<b>Death</b> (resistance against death spells)"], |
|
|
724 | phys => ["Physical", |
728 | phys => "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)", |
725 | "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)"], |
|
|
726 | blind => ["Blind", |
729 | blind => "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)", |
727 | "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)"], |
|
|
728 | fear => ["Fear", |
730 | fear => "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)", |
729 | "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)"], |
|
|
730 | tund => ["Turn undead", |
731 | tund => "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead...", |
731 | "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead..."], |
|
|
732 | elec => ["Electricity", |
732 | elec => "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)", |
733 | "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)"], |
|
|
734 | cold => ["Cold", |
733 | cold => "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)", |
735 | "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)"], |
|
|
736 | ghit => ["Ghost hit", |
734 | ghit => "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)", |
737 | "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)"], |
735 | ); |
738 | ); |
736 | for (qw/slow holyw conf fire depl magic |
739 | for (qw/slow holyw conf fire depl magic |
737 | drain acid pois para deat phys |
740 | drain acid pois para deat phys |
738 | blind fear tund elec cold ghit/) |
741 | blind fear tund elec cold ghit/) |
739 | { |
742 | { |
… | |
… | |
744 | template => "-100%", |
747 | template => "-100%", |
745 | align => +1, |
748 | align => +1, |
746 | valign => 0, |
749 | valign => 0, |
747 | can_events => 1, |
750 | can_events => 1, |
748 | can_hover => 1, |
751 | can_hover => 1, |
749 | tooltip => $resist_names{$_}, |
752 | tooltip => $resist_names{$_}->[1], |
750 | ); |
753 | ); |
751 | $tbl2->add ($col + 1, $row, new CFClient::UI::Image |
754 | $tbl2->add ($col + 1, $row, new CFClient::UI::Image |
752 | font => $FONT_FIXED, |
755 | font => $FONT_FIXED, |
753 | can_hover => 1, |
756 | can_hover => 1, |
754 | can_events => 1, |
757 | can_events => 1, |
755 | path => "ui/resist/resist_$_.png", |
758 | path => "ui/resist/resist_$_.png", |
756 | tooltip => $resist_names{$_}, |
759 | tooltip => $resist_names{$_}->[1], |
|
|
760 | ); |
|
|
761 | $tbl2->add ($col + 2, $row, new CFClient::UI::Label |
|
|
762 | text => $resist_names{$_}->[0], |
|
|
763 | font => $FONT_FIXED, |
|
|
764 | can_hover => 1, |
|
|
765 | can_events => 1, |
|
|
766 | tooltip => $resist_names{$_}->[1], |
757 | ); |
767 | ); |
758 | |
768 | |
759 | $row++; |
769 | $row++; |
760 | if ($row % 6 == 0) { |
770 | if ($row % 6 == 0) { |
761 | $col += 2; |
771 | $col += 3; |
762 | $row = 0; |
772 | $row = 0; |
763 | } |
773 | } |
764 | } |
774 | } |
765 | |
775 | |
766 | &set_stats_window_fontsize; |
|
|
767 | update_stats_window ({}); |
776 | #update_stats_window ({}); |
768 | |
777 | |
769 | $tgw |
778 | $vb |
|
|
779 | } |
|
|
780 | |
|
|
781 | sub skill_window { |
|
|
782 | $STATWIDS->{skill_tbl} = new CFClient::UI::Table expand => 1, col_expand => [0, 0, 1, 0, 0, 1] |
770 | } |
783 | } |
771 | |
784 | |
772 | sub formsep($) { |
785 | sub formsep($) { |
773 | scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 |
786 | scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 |
774 | } |
|
|
775 | |
|
|
776 | sub update_stats_window { |
|
|
777 | my ($stats) = @_; |
|
|
778 | |
|
|
779 | # I love text protocols... |
|
|
780 | |
|
|
781 | my $hp = $stats->{+CS_STAT_HP} * 1; |
|
|
782 | my $hp_m = $stats->{+CS_STAT_MAXHP} * 1; |
|
|
783 | my $sp = $stats->{+CS_STAT_SP} * 1; |
|
|
784 | my $sp_m = $stats->{+CS_STAT_MAXSP} * 1; |
|
|
785 | my $fo = $stats->{+CS_STAT_FOOD} * 1; |
|
|
786 | my $fo_m = 999; |
|
|
787 | my $gr = $stats->{+CS_STAT_GRACE} * 1; |
|
|
788 | my $gr_m = $stats->{+CS_STAT_MAXGRACE} * 1; |
|
|
789 | |
|
|
790 | $GAUGES->{hp} ->set_value ($hp, $hp_m); |
|
|
791 | $GAUGES->{mana} ->set_value ($sp, $sp_m); |
|
|
792 | $GAUGES->{food} ->set_value ($fo, $fo_m); |
|
|
793 | $GAUGES->{grace} ->set_value ($gr, $gr_m); |
|
|
794 | $GAUGES->{exp} ->set_text ("Exp: " . (formsep $stats->{+CS_STAT_EXP64}) |
|
|
795 | . " (lvl " . ($stats->{+CS_STAT_LEVEL} * 1) . ")"); |
|
|
796 | my $rng = $stats->{+CS_STAT_RANGE}; |
|
|
797 | $rng =~ s/^Range: //; # thank you so much dear server |
|
|
798 | $GAUGES->{range} ->set_text ("Rng: " . $rng); |
|
|
799 | my $title = $stats->{+CS_STAT_TITLE}; |
|
|
800 | $title =~ s/^Player: //; |
|
|
801 | $STATWIDS->{title} ->set_text ("Title: " . $title); |
|
|
802 | |
|
|
803 | $STATWIDS->{st_str} ->set_text (sprintf "%d" , $stats->{+CS_STAT_STR}); |
|
|
804 | $STATWIDS->{st_dex} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DEX}); |
|
|
805 | $STATWIDS->{st_con} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CON}); |
|
|
806 | $STATWIDS->{st_int} ->set_text (sprintf "%d" , $stats->{+CS_STAT_INT}); |
|
|
807 | $STATWIDS->{st_wis} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WIS}); |
|
|
808 | $STATWIDS->{st_pow} ->set_text (sprintf "%d" , $stats->{+CS_STAT_POW}); |
|
|
809 | $STATWIDS->{st_cha} ->set_text (sprintf "%d" , $stats->{+CS_STAT_CHA}); |
|
|
810 | $STATWIDS->{st_wc} ->set_text (sprintf "%d" , $stats->{+CS_STAT_WC}); |
|
|
811 | $STATWIDS->{st_ac} ->set_text (sprintf "%d" , $stats->{+CS_STAT_AC}); |
|
|
812 | $STATWIDS->{st_dam} ->set_text (sprintf "%d" , $stats->{+CS_STAT_DAM}); |
|
|
813 | $STATWIDS->{st_arm} ->set_text (sprintf "%d" , $stats->{+CS_STAT_RES_PHYS}); |
|
|
814 | $STATWIDS->{st_spd} ->set_text (sprintf "%.1f", $stats->{+CS_STAT_SPEED}); |
|
|
815 | $STATWIDS->{st_wspd}->set_text (sprintf "%.1f", $stats->{+CS_STAT_WEAP_SP}); |
|
|
816 | |
|
|
817 | $STATWIDS->{m_weight}->set_text (sprintf "Max weight: %.1fkg", $stats->{+CS_STAT_WEIGHT_LIM} / 1000); |
|
|
818 | |
|
|
819 | my %tbl = ( |
|
|
820 | phys => CS_STAT_RES_PHYS, |
|
|
821 | magic => CS_STAT_RES_MAG, |
|
|
822 | fire => CS_STAT_RES_FIRE, |
|
|
823 | elec => CS_STAT_RES_ELEC, |
|
|
824 | cold => CS_STAT_RES_COLD, |
|
|
825 | conf => CS_STAT_RES_CONF, |
|
|
826 | acid => CS_STAT_RES_ACID, |
|
|
827 | drain => CS_STAT_RES_DRAIN, |
|
|
828 | ghit => CS_STAT_RES_GHOSTHIT, |
|
|
829 | pois => CS_STAT_RES_POISON, |
|
|
830 | slow => CS_STAT_RES_SLOW, |
|
|
831 | para => CS_STAT_RES_PARA, |
|
|
832 | tund => CS_STAT_TURN_UNDEAD, |
|
|
833 | fear => CS_STAT_RES_FEAR, |
|
|
834 | depl => CS_STAT_RES_DEPLETE, |
|
|
835 | deat => CS_STAT_RES_DEATH, |
|
|
836 | holyw => CS_STAT_RES_HOLYWORD, |
|
|
837 | blind => CS_STAT_RES_BLIND, |
|
|
838 | ); |
|
|
839 | |
|
|
840 | $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) |
|
|
841 | for keys %tbl; |
|
|
842 | } |
787 | } |
843 | |
788 | |
844 | my $METASERVER_ATIME; |
789 | my $METASERVER_ATIME; |
845 | |
790 | |
846 | sub update_metaserver { |
791 | sub update_metaserver { |
… | |
… | |
1092 | sub message_window { |
1037 | sub message_window { |
1093 | my $window = new CFClient::UI::FancyFrame |
1038 | my $window = new CFClient::UI::FancyFrame |
1094 | name => "message_window", |
1039 | name => "message_window", |
1095 | title => "Messages", |
1040 | title => "Messages", |
1096 | border_bg => [1, 1, 1, 1], |
1041 | border_bg => [1, 1, 1, 1], |
1097 | bg => [0, 0, 0, 0.75], |
|
|
1098 | x => "max", |
1042 | x => "max", |
1099 | y => 0, |
1043 | y => 0, |
1100 | force_w => $::WIDTH * 0.4, |
1044 | force_w => $::WIDTH * 0.4, |
1101 | force_h => $::HEIGHT * 0.5, |
1045 | force_h => $::HEIGHT * 0.5, |
1102 | child => (my $vbox = new CFClient::UI::VBox), |
1046 | child => (my $vbox = new CFClient::UI::VBox), |
… | |
… | |
1188 | sub autopickup_setup { |
1132 | sub autopickup_setup { |
1189 | my $table = new CFClient::UI::Table; |
1133 | my $table = new CFClient::UI::Table; |
1190 | |
1134 | |
1191 | for ( |
1135 | for ( |
1192 | ["General", 0, 0, |
1136 | ["General", 0, 0, |
1193 | ["Enable autopickup" => PICKUP_NEWMODE], |
1137 | ["Enable autopickup" => PICKUP_NEWMODE, \$PICKUP_ENABLE], |
1194 | ["Inhibit autopickup" => PICKUP_INHIBIT], |
1138 | ["Inhibit autopickup" => PICKUP_INHIBIT], |
1195 | ["Stop before pickup" => PICKUP_STOP], |
1139 | ["Stop before pickup" => PICKUP_STOP], |
1196 | ["Debug autopickup" => PICKUP_DEBUG], |
1140 | ["Debug autopickup" => PICKUP_DEBUG], |
1197 | ], |
1141 | ], |
1198 | ["Weapons", 0, 6, |
1142 | ["Weapons", 0, 6, |
… | |
… | |
1235 | for (@bits) { |
1179 | for (@bits) { |
1236 | ++$y; |
1180 | ++$y; |
1237 | |
1181 | |
1238 | my $mask = $_->[1]; |
1182 | my $mask = $_->[1]; |
1239 | $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); |
1183 | $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); |
1240 | $table->add ($x+1, $y, new CFClient::UI::CheckBox |
1184 | $table->add ($x+1, $y, my $checkbox = new CFClient::UI::CheckBox |
1241 | state => $::CFG->{pickup} & $mask, |
1185 | state => $::CFG->{pickup} & $mask, |
1242 | on_changed => sub { |
1186 | on_changed => sub { |
1243 | my ($box, $value) = @_; |
1187 | my ($box, $value) = @_; |
1244 | |
1188 | |
1245 | if ($value) { |
1189 | if ($value) { |
… | |
… | |
1251 | $::CONN->send_command ("pickup $::CFG->{pickup}") |
1195 | $::CONN->send_command ("pickup $::CFG->{pickup}") |
1252 | if defined $::CONN; |
1196 | if defined $::CONN; |
1253 | |
1197 | |
1254 | 0 |
1198 | 0 |
1255 | }); |
1199 | }); |
|
|
1200 | |
|
|
1201 | ${$_->[2]} = $checkbox if $_->[2]; |
1256 | } |
1202 | } |
1257 | } |
1203 | } |
1258 | |
1204 | |
1259 | $table->add (2, 18, new CFClient::UI::ValSlider |
1205 | $table->add (2, 18, new CFClient::UI::ValSlider |
1260 | range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1], |
1206 | range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1], |
… | |
… | |
1278 | }); |
1224 | }); |
1279 | |
1225 | |
1280 | $table |
1226 | $table |
1281 | } |
1227 | } |
1282 | |
1228 | |
1283 | sub inventory_window { |
1229 | sub inventory_widget { |
|
|
1230 | my $hb = new CFClient::UI::HBox homogeneous => 1; |
|
|
1231 | |
|
|
1232 | $hb->add (my $vb1 = new CFClient::UI::VBox); |
|
|
1233 | $vb1->add (new CFClient::UI::Label align => 0, text => "Player"); |
|
|
1234 | $vb1->add ($INV = new CFClient::UI::Inventory); |
|
|
1235 | |
|
|
1236 | $hb->add (my $vb2 = new CFClient::UI::VBox); |
|
|
1237 | |
|
|
1238 | $vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox); |
|
|
1239 | |
|
|
1240 | $vb2->add ($INVR = new CFClient::UI::Inventory); |
|
|
1241 | |
|
|
1242 | # XXX: Call after $INVR = ... because set_opencont sets the items |
|
|
1243 | CFClient::Protocol::set_opencont ($::CONN, 0, "Floor"); |
|
|
1244 | |
|
|
1245 | $hb |
|
|
1246 | } |
|
|
1247 | |
|
|
1248 | sub toggle_player_page { |
|
|
1249 | my ($widget) = @_; |
|
|
1250 | |
|
|
1251 | if ($PL_WINDOW->{visible} && $PL_NOTEBOOK->get_current_page == $widget) { |
|
|
1252 | $PL_WINDOW->hide; |
|
|
1253 | } else { |
|
|
1254 | $PL_NOTEBOOK->set_current_page ($widget); |
|
|
1255 | $PL_WINDOW->show; |
|
|
1256 | } |
|
|
1257 | } |
|
|
1258 | |
|
|
1259 | sub player_window { |
1284 | my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame |
1260 | my $plwin = $PL_WINDOW = new CFClient::UI::FancyFrame |
1285 | x => "center", |
1261 | x => "center", |
1286 | y => "center", |
1262 | y => "center", |
1287 | force_w => $WIDTH * 9/10, |
1263 | force_w => $WIDTH * 9/10, |
1288 | force_h => $HEIGHT * 9/10, |
1264 | force_h => $HEIGHT * 9/10, |
1289 | title => "Inventory", |
1265 | title => "Player", |
1290 | name => "inventory_window", |
1266 | name => "playerbook", |
1291 | has_close_button => 1, |
1267 | has_close_button => 1 |
1292 | ; |
1268 | ; |
1293 | |
1269 | |
1294 | $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1); |
1270 | my $ntb = |
|
|
1271 | $PL_NOTEBOOK = |
|
|
1272 | new CFClient::UI::Notebook |
|
|
1273 | expand => 1, |
|
|
1274 | debug => 1, |
|
|
1275 | filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), |
|
|
1276 | ; |
1295 | |
1277 | |
1296 | $hb->add (my $vb1 = new CFClient::UI::VBox); |
1278 | $ntb->add ( |
1297 | $vb1->add (new CFClient::UI::Label align => 0, text => "Player"); |
1279 | "Statistics (F2)" => $STATS_PAGE = stats_window, |
1298 | $vb1->add ($INV = new CFClient::UI::Inventory expand => 1); |
1280 | "Shows statistics, where all your Stats and Resistances are shown." |
|
|
1281 | ); |
|
|
1282 | $ntb->add ( |
|
|
1283 | "Skills (F3)" => $SKILL_PAGE = skill_window, |
|
|
1284 | "Shows all your Skills." |
|
|
1285 | ); |
|
|
1286 | $ntb->add ( |
|
|
1287 | "Spellbook (F4)" => $SPELL_PAGE = new CFClient::UI::SpellList, |
|
|
1288 | "Displays all spells you have and lets you edit keyboard shortcuts for them." |
|
|
1289 | ); |
|
|
1290 | $ntb->add ( |
|
|
1291 | "Inventory (F5)" => $INVENTORY_PAGE = inventory_widget, |
|
|
1292 | "Toggles the inventory window, where you can manage your loot (or treasures :). " |
|
|
1293 | . "You can also hit the <b>Tab</b>-key to show/hide the Inventory." |
|
|
1294 | ); |
1299 | |
1295 | |
1300 | $hb->add (my $vb2 = new CFClient::UI::VBox); |
1296 | $ntb->set_current_page ($INVENTORY_PAGE); |
1301 | |
1297 | |
1302 | $vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox); |
1298 | $plwin->add ($ntb); |
1303 | |
1299 | $plwin |
1304 | $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1); |
|
|
1305 | |
|
|
1306 | # XXX: Call after $INVR = ... because set_opencont sets the items |
|
|
1307 | CFClient::Protocol::set_opencont ($::CONN, 0, "Floor"); |
|
|
1308 | |
|
|
1309 | $invwin |
|
|
1310 | } |
|
|
1311 | |
|
|
1312 | sub spell_setup { |
|
|
1313 | new CFClient::UI::SpellList |
|
|
1314 | } |
1300 | } |
1315 | |
1301 | |
1316 | sub update_bindings { |
1302 | sub update_bindings { |
1317 | $BIND_UPD_CB->() if $BIND_UPD_CB; |
1303 | $BIND_UPD_CB->() if $BIND_UPD_CB; |
1318 | } |
1304 | } |
… | |
… | |
1328 | for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) { |
1314 | for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) { |
1329 | my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym}; |
1315 | my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym}; |
1330 | next unless ref $cmds eq 'ARRAY' and @$cmds > 0; |
1316 | next unless ref $cmds eq 'ARRAY' and @$cmds > 0; |
1331 | |
1317 | |
1332 | my $lbl = join "; ", @$cmds; |
1318 | my $lbl = join "; ", @$cmds; |
1333 | my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym); |
1319 | my $nam = CFClient::BindingEditor::keycombo_to_name ($mod, $sym); |
1334 | $binding_list->add (my $hb = new CFClient::UI::HBox); |
1320 | $binding_list->add (my $hb = new CFClient::UI::HBox); |
1335 | $hb->add (new CFClient::UI::Button |
1321 | $hb->add (new CFClient::UI::Button |
1336 | text => "delete", |
1322 | text => "delete", |
1337 | tooltip => "Deletes the binding", |
1323 | tooltip => "Deletes the binding", |
1338 | on_activate => sub { |
1324 | on_activate => sub { |
… | |
… | |
1423 | $refresh->(); |
1409 | $refresh->(); |
1424 | |
1410 | |
1425 | $vb |
1411 | $vb |
1426 | } |
1412 | } |
1427 | |
1413 | |
|
|
1414 | # just weirdness, pls. ignore |
|
|
1415 | sub load_html_page { |
|
|
1416 | my ($viewer, $base) = @_; |
|
|
1417 | |
|
|
1418 | $viewer->clear; |
|
|
1419 | |
|
|
1420 | require LWP::Simple; |
|
|
1421 | require HTML::Parser; |
|
|
1422 | require URI; |
|
|
1423 | |
|
|
1424 | my $page = LWP::Simple::get ($base) |
|
|
1425 | or return; |
|
|
1426 | |
|
|
1427 | my @s = { }; |
|
|
1428 | my %passthrough = map ($_ => undef), qw(b i u s tt big small sub sup); |
|
|
1429 | |
|
|
1430 | my $parser = HTML::Parser->new ( |
|
|
1431 | text_h => [sub { |
|
|
1432 | my ($text) = @_; |
|
|
1433 | $text =~ s/\s+/ /g; |
|
|
1434 | $s[-1]{text} .= CFClient::UI::Label::escape $text; |
|
|
1435 | }, "dtext"], |
|
|
1436 | start_h => [sub { |
|
|
1437 | my ($tag, $attr) = @_; |
|
|
1438 | if ($passthrough{$tag}) { |
|
|
1439 | $s[-1]{text} .= "<$tag>"; |
|
|
1440 | } elsif ($tag eq "h1") { |
|
|
1441 | push @s, { text => "<span foreground='#ffff00' size='x-large'>" }; |
|
|
1442 | } elsif ($tag eq "h2") { |
|
|
1443 | push @s, { text => "<span foreground='#ccccff' size='large'>" }; |
|
|
1444 | } elsif ($tag eq "h3") { |
|
|
1445 | push @s, { text => "<span size='large'>" }; |
|
|
1446 | } elsif ($tag eq "a") { |
|
|
1447 | push @s, { text => "", url => $attr->{href} }; |
|
|
1448 | } elsif ($tag eq "p") { |
|
|
1449 | push @s, { }; |
|
|
1450 | } elsif ($tag eq "img") { |
|
|
1451 | eval { |
|
|
1452 | push @{$s[-1]{obj}}, new CFClient::UI::Image |
|
|
1453 | tex => (new_from_image CFClient::Texture LWP::Simple::get (URI->new ($attr->{src}, $base)->abs ($base))); |
|
|
1454 | $s[-1]{text} .= "\x{fffc}"; |
|
|
1455 | }; |
|
|
1456 | } |
|
|
1457 | }, "tagname, attr"], |
|
|
1458 | end_h => [sub { |
|
|
1459 | my ($tag) = @_; |
|
|
1460 | if ($passthrough{$tag}) { |
|
|
1461 | $s[-1]{text} .= "</$tag>"; |
|
|
1462 | } elsif ($tag =~ /^h\d$/) { |
|
|
1463 | $s[-1]{text} .= "</span>"; |
|
|
1464 | push @s, { }; |
|
|
1465 | } elsif ($tag eq "a") { |
|
|
1466 | my $S = pop @s; |
|
|
1467 | $s[-1]{text} .= "\x{fffc}"; |
|
|
1468 | push @{$s[-1]{obj}}, new CFClient::UI::Label |
|
|
1469 | fg => [0.8, 0.8, 1], |
|
|
1470 | markup => "<u>$S->{text}</u>", |
|
|
1471 | fontsize => 0.8, |
|
|
1472 | can_events => 1, |
|
|
1473 | can_focus => 1, |
|
|
1474 | on_button_up => sub { |
|
|
1475 | load_html_page ($viewer, URI->new ($S->{url}, $base)->abs ($base)); |
|
|
1476 | }, |
|
|
1477 | ; |
|
|
1478 | } |
|
|
1479 | }, "tagname"], |
|
|
1480 | ); |
|
|
1481 | |
|
|
1482 | $parser->parse ($page); |
|
|
1483 | $parser->eof; |
|
|
1484 | |
|
|
1485 | $viewer->add_paragraph ([1, 1, 1, 1], [$_->{text}, @{ $_->{obj} || [] }], $_->{indent}) |
|
|
1486 | for @s; |
|
|
1487 | |
|
|
1488 | $viewer->set_offset (0); |
|
|
1489 | } |
|
|
1490 | |
1428 | sub help_window { |
1491 | sub help_window { |
1429 | my $win = new CFClient::UI::FancyFrame |
1492 | my $win = new CFClient::UI::FancyFrame |
1430 | x => 'center', |
1493 | x => 'center', |
1431 | y => 'center', |
1494 | y => 'center', |
1432 | z => 2, |
1495 | z => 2, |
1433 | name => 'doc_browser', |
1496 | name => 'doc_browser', |
1434 | force_w => int $WIDTH * 7/8, |
1497 | force_w => int $WIDTH * 7/8, |
1435 | force_h => int $HEIGHT * 7/8, |
1498 | force_h => int $HEIGHT * 7/8, |
1436 | title => "Documentation"; |
1499 | title => "Help Browser", |
|
|
1500 | has_close_button => 1; |
1437 | |
1501 | |
1438 | $win->add (my $vbox = new CFClient::UI::VBox); |
1502 | $win->add (my $vbox = new CFClient::UI::VBox); |
1439 | |
1503 | |
1440 | $vbox->add (my $buttons = new CFClient::UI::HBox); |
1504 | $vbox->add (my $buttons = new CFClient::UI::HBox); |
1441 | $vbox->add (my $viewer = new CFClient::UI::TextScroller |
1505 | $vbox->add (my $viewer = new CFClient::UI::TextScroller |
… | |
… | |
1449 | [manual => "Main Manual"], |
1513 | [manual => "Main Manual"], |
1450 | [skill_help => "Skill Reference"], |
1514 | [skill_help => "Skill Reference"], |
1451 | [command_help => "Command Reference"], |
1515 | [command_help => "Command Reference"], |
1452 | [dmcommand_help => "DM Commands"], |
1516 | [dmcommand_help => "DM Commands"], |
1453 | [COPYING => "License Terms"], |
1517 | [COPYING => "License Terms"], |
|
|
1518 | [test => "test (do not select)"], #d#TODO |
1454 | ], |
1519 | ], |
1455 | on_changed => sub { |
1520 | on_changed => sub { |
1456 | my ($self, $pod) = @_; |
1521 | my ($self, $pod) = @_; |
|
|
1522 | |
|
|
1523 | if ($pod eq "test") {#d#TODO |
|
|
1524 | eval { |
|
|
1525 | load_html_page $viewer, "http://crossfire.real-time.com/guides/walkthrough/newbie-tower.html"; |
|
|
1526 | }; |
|
|
1527 | warn "$@" if $@; |
|
|
1528 | return; |
|
|
1529 | } |
1457 | |
1530 | |
1458 | my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", |
1531 | my $pom = CFClient::load_pod CFClient::find_rcfile "pod/$pod.pod", |
1459 | doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; |
1532 | doc_viewer => 1, sub { CFClient::pod_to_pango_list $_[0] }; |
1460 | |
1533 | |
1461 | $viewer->clear; |
1534 | $viewer->clear; |
… | |
… | |
1605 | . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor " |
1678 | . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor " |
1606 | . "with nothing set and the recording started. After doing the actions you " |
1679 | . "with nothing set and the recording started. After doing the actions you " |
1607 | . "want to record press <b>Insert</b> and you will be asked to press a key-combo. " |
1680 | . "want to record press <b>Insert</b> and you will be asked to press a key-combo. " |
1608 | . "After pressing the combo the binding will be saved automatically and the " |
1681 | . "After pressing the combo the binding will be saved automatically and the " |
1609 | . "binding editor closes"); |
1682 | . "binding editor closes"); |
1610 | $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup, |
|
|
1611 | "Displays all spells you have and lets you edit keyboard shortcuts for them."); |
|
|
1612 | $SETUP_NOTEBOOK->add (Debug => debug_setup, |
1683 | $SETUP_NOTEBOOK->add (Debug => debug_setup, |
1613 | "Some debuggin' options. Do not ask."); |
1684 | "Some debuggin' options. Do not ask."); |
1614 | |
1685 | |
1615 | $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top |
1686 | $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top |
1616 | |
1687 | |
… | |
… | |
1620 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window, |
1691 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window, |
1621 | tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server."); |
1692 | tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server."); |
1622 | |
1693 | |
1623 | make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D |
1694 | make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D |
1624 | |
1695 | |
1625 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Stats Window", other => $STATS_WINDOW = stats_window, |
|
|
1626 | tooltip => "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times."); |
|
|
1627 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Inventory", other => inventory_window, |
1696 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Playerbook", other => player_window, |
1628 | tooltip => "Toggles the inventory window, where you can manage your loot (or treasures :). " |
1697 | tooltip => "Toggles the player view, where you can manage Inventory, Spells, Skills and see your Stats."); |
1629 | . "You can also hit the <b>Tab</b>-key to show/hide the Inventory."); |
|
|
1630 | |
1698 | |
1631 | $BUTTONBAR->add (new CFClient::UI::Button |
1699 | $BUTTONBAR->add (new CFClient::UI::Button |
1632 | text => "Save Config", |
1700 | text => "Save Config", |
1633 | tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", |
1701 | tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", |
1634 | on_activate => sub { |
1702 | on_activate => sub { |
… | |
… | |
1637 | status "Configuration Saved"; |
1705 | status "Configuration Saved"; |
1638 | 0 |
1706 | 0 |
1639 | }, |
1707 | }, |
1640 | ); |
1708 | ); |
1641 | |
1709 | |
1642 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window, |
1710 | $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window, |
1643 | tooltip => "View Documentation"); |
1711 | tooltip => "View Documentation"); |
1644 | |
1712 | |
1645 | $BUTTONBAR->add (new CFClient::UI::Button |
1713 | $BUTTONBAR->add (new CFClient::UI::Button |
1646 | text => "Quit", |
1714 | text => "Quit", |
1647 | tooltip => "Terminates the program", |
1715 | tooltip => "Terminates the program", |
… | |
… | |
1853 | # printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d# |
1921 | # printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d# |
1854 | }, |
1922 | }, |
1855 | CFClient::SDL_KEYDOWN => sub { |
1923 | CFClient::SDL_KEYDOWN => sub { |
1856 | if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { |
1924 | if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { |
1857 | # alt-enter |
1925 | # alt-enter |
|
|
1926 | $FULLSCREEN_ENABLE->toggle; |
1858 | video_shutdown; |
1927 | video_shutdown; |
1859 | $CFG->{fullscreen} = !$CFG->{fullscreen}; |
|
|
1860 | video_init; |
1928 | video_init; |
1861 | } else { |
1929 | } else { |
1862 | CFClient::UI::feed_sdl_key_down_event ($_[0]); |
1930 | CFClient::UI::feed_sdl_key_down_event ($_[0]); |
1863 | } |
1931 | } |
1864 | }, |
1932 | }, |
… | |
… | |
1880 | $SIG{INT} = $SIG{TERM} = sub { exit }; |
1948 | $SIG{INT} = $SIG{TERM} = sub { exit }; |
1881 | |
1949 | |
1882 | { |
1950 | { |
1883 | local $SIG{__DIE__} = sub { |
1951 | local $SIG{__DIE__} = sub { |
1884 | return unless defined $^S && !$^S; |
1952 | return unless defined $^S && !$^S; |
1885 | Carp::confess $_[1];#d#TODO: remove when stable |
1953 | Carp::confess $_[0];#d#TODO: remove when stable |
1886 | CFClient::fatal $_[0]; |
1954 | CFClient::fatal $_[0]; |
1887 | }; |
1955 | }; |
1888 | |
1956 | |
1889 | CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; |
1957 | CFClient::read_cfg "$Crossfire::VARDIR/cfplusrc"; |
1890 | CFClient::UI::set_layout ($::CFG->{layout}); |
1958 | CFClient::UI::set_layout ($::CFG->{layout}); |