Games-Construder
view release on metacpan or search on metacpan
lib/Games/Construder/Server/UI.pm view on Meta::CPAN
ui_player_score
ui_player_bio_warning
ui_player_tagger
/;
=head1 NAME
Games::Construder::Server::UI - Server-side Userinterface for Player interaction
=over 4
=cut
sub new {
my $this = shift;
my $class = ref ($this) || $this;
my $self = { @_ };
bless $self, $class;
weaken $self->{pl};
$self->init;
return $self
}
sub init {
}
sub layout {
my ($self, @args) = @_;
die "subclass responsibility\n";
}
sub commands { # subclasses should overwrite this
my ($self) = @_;
# key => cmd name
()
}
sub new_ui {
my ($self, @args) = @_;
$self->{pl}->new_ui (@args);
}
sub show_ui {
my ($self, $name, @arg) = @_;
$self->{pl}->{uis}->{$name}->show (@arg);
}
sub hide_ui {
my ($self, $name) = @_;
$self->{pl}->{uis}->{$name}->hide;
}
sub delete_ui {
my ($self, @args) = @_;
$self->{pl}->delete_ui (@args);
}
sub update {
my ($self, @args) = @_;
$self->show (@args) if $self->{shown};
}
sub show {
my ($self, @args) = @_;
my $lyout = $self->layout (@args);
$lyout->{commands}->{default_keys} = { $self->commands };
if ($self->{cmd_need_select_boxes}) {
$lyout->{commands}->{need_selected_boxes} = 1;
}
$self->{pl}->display_ui ($self->{ui_name} => $lyout);
}
sub handle_command { # subclasses should overwrite this
}
sub react {
my ($self, $cmd, $arg, $pos) = @_;
return unless $self->{shown};
$self->handle_command ($cmd, $arg, $pos);
}
sub hide {
my ($self) = @_;
$self->{pl}->display_ui ($self->{ui_name});
}
sub DESTROY {
my ($self) = @_;
$self->{pl}->display_ui ($self->{ui_name});
}
package Games::Construder::Server::UI::Score;
use Games::Construder::UI;
use base qw/Games::Construder::Server::UI/;
sub layout {
my ($self, $hl) = @_;
if ($hl) {
my $wself = $self;
weaken $wself;
$self->{upd_score_hl_tmout} = AE::timer 1.5, 0, sub {
$wself->show;
delete $wself->{upd_score_hl_tmout};
};
}
my $score = $self->{pl}->{data}->{score};
ui_hud_window ([center => "up"],
[box => {
border => { color => $hl ? "#ff0000" : "#777700" },
padding => ($hl ? 10 : 2),
dir => "vert",
},
($self->{pl}->{data}->{cheating}
( run in 1.805 second using v1.01-cache-2.11-cpan-39bf76dae61 )