ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI.pm
Revision: 1.2
Committed: Fri Apr 7 17:37:11 2006 UTC (18 years, 2 months ago) by elmex
Branch: MAIN
Changes since 1.1: +57 -1 lines
Log Message:
added mapwidget

File Contents

# User Rev Content
1 elmex 1.1 package Client::Widget;
2     use strict;
3    
4     our $FOCUS; # the widget with current focus
5 elmex 1.2 our %ACTIVE_WIDGETS;
6 elmex 1.1
7     # class methods for events
8     sub feed_sdl_key_down_event { $FOCUS->key_down ($_[0]) if $FOCUS }
9     sub feed_sdl_key_up_event { $FOCUS->key_up ($_[0]) if $FOCUS }
10     sub feed_sdl_button_down_event { $FOCUS->button_down ($_[0]) if $FOCUS }
11     sub feed_sdl_button_up_event { $FOCUS->button_up ($_[0]) if $FOCUS }
12    
13     sub new {
14     my $class = shift;
15     my $self = { @_ };
16     bless $self, $class;
17     return $self;
18     }
19    
20 elmex 1.2 sub activate {
21     $ACTIVE_WIDGETS{$_[0]} = $_[0];
22     }
23     sub deactivate {
24     delete $ACTIVE_WIDGETS{$_[0]};
25     }
26    
27 elmex 1.1 sub focus_in {
28     my ($widget) = @_;
29     $FOCUS = $widget;
30     }
31     sub focus_out {
32     my ($widget) = @_;
33     }
34     sub key_down {
35     my ($widget, $sdlev) = @_;
36     }
37     sub key_up {
38     my ($widget, $sdlev) = @_;
39     }
40     sub button_down {
41     my ($widget, $sdlev) = @_;
42     }
43     sub button_up {
44     my ($widget, $sdlev) = @_;
45     }
46     sub draw {
47     my ($widget) = @_;
48     }
49     sub bbox {
50     my ($widget) = @_;
51     }
52 elmex 1.2
53     package Client::MapWidget;
54     use strict;
55     our @ISA = qw/Client::Widget/;
56    
57     use SDL::OpenGL;
58     use SDL::OpenGL::Constants;
59    
60     sub key_down {
61     print "MAPKEYDOWN\n";
62     }
63    
64     sub key_up {
65     }
66    
67     sub draw {
68     glEnable GL_TEXTURE_2D;
69     glEnable GL_BLEND;
70    
71     my $map = $::CONN->{map};
72    
73     for my $x (0 .. $::CONN->{mapw} - 1) {
74     for my $y (0 .. $::CONN->{maph} - 1) {
75    
76     my $cell = $map->[$x][$y]
77     or next;
78    
79     my $darkness = $cell->[3] * (1 / 255);
80     glColor $darkness, $darkness, $darkness;
81    
82     for my $num (grep $_, $cell->[0], $cell->[1], $cell->[2]) {
83     my $tex = $::CONN->{face}[$num]{texture} || 0;
84    
85     glBindTexture GL_TEXTURE_2D, $tex;
86    
87     glBegin GL_QUADS;
88     glTexCoord 0, 0; glVertex $x, $y;
89     glTexCoord 0, 1; glVertex $x, $y + 1;
90     glTexCoord 1, 1; glVertex $x + 1, $y + 1;
91     glTexCoord 1, 0; glVertex $x + 1, $y;
92     glEnd;
93     }
94     }
95     }
96    
97     glDisable GL_TEXTURE_2D;
98     glDisable GL_BLEND;
99     }
100    
101 elmex 1.1 1;