Deliantra-Client
view release on metacpan or search on metacpan
DC/MapWidget.pm view on Meta::CPAN
} elsif ($ev->{button} == 2) {
$self->grab_focus;
return unless $::CONN;
my ($ox, $oy) = ($ev->{x}, $ev->{y});
my ($bw, $bh) = ($::CFG->{map_shift_x}, $::CFG->{map_shift_y});
$self->{motion} = sub {
my ($ev, $x, $y) = @_;
($x, $y) = ($ev->{x}, $ev->{y});
$::CFG->{map_shift_x} = $bw + $x - $ox;
$::CFG->{map_shift_y} = $bh + $y - $oy;
$self->update;
};
} elsif ($ev->{button} == 3) {
my @items = (
["Help Browserâ¦\tF1", sub { $::HELP_WINDOW->toggle_visibility }],
["Statistics\tF2", sub { ::toggle_player_page ($::STATS_PAGE) }],
["Skills\tF3", sub { ::toggle_player_page ($::SKILL_PAGE) }],
["Spellsâ¦\tF4", sub { ::toggle_player_page ($::SPELL_PAGE) }],
["Inventoryâ¦\tF5", sub { ::toggle_player_page ($::INVENTORY_PAGE) }],
["Setup⦠\tF9", sub { $::SETUP_DIALOG->toggle_visibility }],
# ["Server Messagesâ¦", sub { $::MESSAGE_WINDOW->toggle_visibility }],
);
if ($::CONN && $::CONN->{editor_support}) {
# push @items, [
# "Edit this map <span size='xx-small'>(" . (DC::asxml $::CONN->{map_info}[0]) . ")</span>",
# \&editor_invoke,
# ];
for my $type (@{ $::CONN->{editor_support}{servertypes} }) {
$::CONN->{editor_support}{servertype} ne $type
or next;
my $server = $::CONN->{editor_support}{"${type}server"}
or next;
push @items, [
"Login on $type server <span size='xx-small'>(" . (DC::asxml $server) . ")</span>",
sub { server_login $server },
];
}
}
push @items,
["Quit",
sub {
if ($::CONN) {
&::open_quit_dialog;
} else {
exit;
}
}
],
;
(new DC::UI::Menu
items => \@items,
)->popup ($ev);
}
1
}
sub invoke_button_up {
my ($self, $ev, $x, $y) = @_;
delete $self->{motion};
1
}
sub invoke_mouse_motion {
my ($self, $ev, $x, $y) = @_;
if ($self->{motion}) {
$self->{motion}->($ev, $x, $y);
} else {
return 0;
}
1
}
sub size_request {
my ($self) = @_;
(
$self->{tilesize} * DC::ceil $::WIDTH / $self->{tilesize},
$self->{tilesize} * DC::ceil $::HEIGHT / $self->{tilesize},
)
}
sub update {
my ($self) = @_;
$self->{need_update} = 1;
$self->SUPER::update;
}
my %DIR = (
( "," . DC::SDLK_KP5 ), [0, "stay fire"],
( "," . DC::SDLK_KP8 ), [1, "north"],
( "," . DC::SDLK_KP9 ), [2, "northeast"],
( "," . DC::SDLK_KP6 ), [3, "east"],
( "," . DC::SDLK_KP3 ), [4, "southeast"],
( "," . DC::SDLK_KP2 ), [5, "south"],
( "," . DC::SDLK_KP1 ), [6, "southwest"],
( "," . DC::SDLK_KP4 ), [7, "west"],
( "," . DC::SDLK_KP7 ), [8, "northwest"],
( "," . DC::SDLK_PAGEUP ), [2, "northeast"],
( "," . DC::SDLK_PAGEDOWN ), [4, "southeast"],
( "," . DC::SDLK_END ), [6, "southwest"],
( "," . DC::SDLK_HOME ), [8, "northwest"],
( "," . DC::SDLK_UP ), [1, "north"],
DC/MapWidget.pm view on Meta::CPAN
glEnable GL_BLEND;
glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA;
glEnable GL_TEXTURE_2D;
glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE;
$self->{texture}->draw_quad (0, 0);
glDisable GL_TEXTURE_2D;
glTranslate 0.375, 0.375;
glColor 1, 1, 0, 1;
glBegin GL_LINE_LOOP;
glVertex $self->{x0} , $self->{y0} ;
glVertex $self->{x0} , $self->{y0} + $self->{sh};
glVertex $self->{x0} + $self->{sw}, $self->{y0} + $self->{sh};
glVertex $self->{x0} + $self->{sw}, $self->{y0} ;
glEnd;
glDisable GL_BLEND;
}
package DC::MapWidget::Command;
use common::sense;
use DC::OpenGL;
our @ISA = DC::UI::Frame::;
sub new {
my $class = shift;
my $self = $class->SUPER::new (
bg => [0, 0, 0, 0.8],
@_,
);
$self->add ($self->{vbox} = new DC::UI::VBox);
$self->{label} = [
map
DC::UI::Label->new (
align => 0,
can_hover => 1,
can_events => 1,
tooltip_width => 0.33,
fontsize => $_,
), (0.8) x 16
];
$self->{entry} = new DC::UI::Entry
on_changed => sub {
$self->update_labels;
0
},
on_button_down => sub {
my ($entry, $ev, $x, $y) = @_;
if ($ev->{button} == 3) {
(new DC::UI::Menu
items => [
["bind <i>" . (DC::asxml $self->{select}) . "</i> to a key"
=> sub { DC::Macro::quick_macro [$self->{select}], sub { $entry->grab_focus } }]
],
)->popup ($ev);
return 1;
}
0
},
on_key_down => sub {
my ($entry, $ev) = @_;
my $self = $entry->{parent}{parent};
if ($ev->{sym} == 13) {
if (exists $self->{select}) {
$self->{last_command} = $self->{select};
$::CONN->user_send ($self->{select});
unshift @{$self->{history}}, $self->{entry}->get_text;
$self->{hist_ptr} = 0;
$self->hide;
}
} elsif ($ev->{sym} == 27) {
$self->{hist_ptr} = 0;
$self->hide;
} elsif ($ev->{sym} == DC::SDLK_DOWN) {
if ($self->{hist_ptr} > 1) {
$self->{hist_ptr}--;
$self->{entry}->set_text ($self->{history}->[$self->{hist_ptr} - 1]);
} elsif ($self->{hist_ptr} > 0) {
$self->{hist_ptr}--;
$self->{entry}->set_text ($self->{hist_saveback});
} else {
++$self->{select_offset}
if $self->{select_offset} < $#{ $self->{last_match} || [] };
}
$self->update_labels;
} elsif ($ev->{sym} == DC::SDLK_UP) {
if ($self->{select_offset}) {
--$self->{select_offset}
} else {
unless ($self->{hist_ptr}) {
$self->{hist_saveback} = $self->{entry}->get_text;
}
if ($self->{hist_ptr} <= $#{$self->{history}}) {
$self->{hist_ptr}++;
}
$self->{entry}->set_text ($self->{history}->[$self->{hist_ptr} - 1])
if exists $self->{history}->[$self->{hist_ptr} - 1];
}
$self->update_labels;
} else {
return 0;
}
1
}
;
( run in 1.139 second using v1.01-cache-2.11-cpan-39bf76dae61 )