ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/pclient
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/pclient (file contents):
Revision 1.17 by root, Fri Apr 7 18:20:13 2006 UTC vs.
Revision 1.21 by root, Fri Apr 7 20:08:57 2006 UTC

13 13
14use Crossfire; 14use Crossfire;
15use Crossfire::Client; 15use Crossfire::Client;
16use Crossfire::Protocol; 16use Crossfire::Protocol;
17 17
18use Client::Util; 18use Crossfire::Client::Util;
19use Client::Widget; 19use Crossfire::Client::Widget;
20
21our $FACECACHE;
20 22
21our $VERSION = '0.1'; 23our $VERSION = '0.1';
22 24
23our $CFG; 25our $CFG;
24our $CONN; 26our $CONN;
25 27
26our $SDL_TIMER; 28our $SDL_TIMER;
27our $SDL_APP; 29our $SDL_APP;
28our $SDL_EV = new SDL::Event; 30our $SDL_EV = new SDL::Event;
29our %SDL_CB; 31our %SDL_CB;
30our @GL_INIT; 32
33our @GL_INIT; # hooks called on every gl init
31 34
32sub init_screen { 35sub init_screen {
33 $SDL_APP = new SDL::App 36 $SDL_APP = new SDL::App
34 -flags => SDL_ANYFORMAT | SDL_HWSURFACE, 37 -flags => SDL_ANYFORMAT | SDL_HWSURFACE,
35 -title => "Crossfire+ Client", 38 -title => "Crossfire+ Client",
41 -blue_size => 8, 44 -blue_size => 8,
42 -double_buffer => 1, 45 -double_buffer => 1,
43 -fullscreen => $CFG->{fullscreen}, 46 -fullscreen => $CFG->{fullscreen},
44 -resizeable => 0; 47 -resizeable => 0;
45 48
49 glClearColor 0, 0, 0, 0;
50
46 glEnable GL_TEXTURE_2D; 51 glEnable GL_TEXTURE_2D;
47 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE; 52 glTexEnv GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE;
48 glShadeModel GL_FLAT; 53 glShadeModel GL_FLAT;
49 glDisable GL_DEPTH_TEST; 54 glDisable GL_DEPTH_TEST;
50 glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; 55 glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA;
51 glEnable GL_BLEND; 56 glEnable GL_BLEND;
52 57
53 glMatrixMode GL_PROJECTION; 58 glMatrixMode GL_PROJECTION;
54 glLoadIdentity; 59 glLoadIdentity;
55 glOrtho 0, $CFG->{width} / 32, $CFG->{height} / 32, 0, -1 , 1; 60 glOrtho 0, $CFG->{width} / 32, $CFG->{height} / 32, 0, -100 , 100;
61
62 glMatrixMode GL_MODELVIEW;
56 63
57 $_->() for @GL_INIT; 64 $_->() for @GL_INIT;
58} 65}
59 66
60sub start_game { 67sub start_game {
79 undef $SDL_APP; 86 undef $SDL_APP;
80 SDL::Quit; 87 SDL::Quit;
81} 88}
82 89
83sub refresh { 90sub refresh {
84 glClearColor 0, 0, 0, 0;
85 glClear GL_COLOR_BUFFER_BIT; 91 glClear GL_COLOR_BUFFER_BIT;
86 92
87 for (values %Client::Widget::ACTIVE_WIDGETS) { 93 for (values %Client::Widget::ACTIVE_WIDGETS) {
88 $_->draw 94 $_->draw
89 } 95 }
91 SDL::GLSwapBuffers; 97 SDL::GLSwapBuffers;
92} 98}
93 99
94%SDL_CB = ( 100%SDL_CB = (
95 SDL_QUIT() => sub { 101 SDL_QUIT() => sub {
96 warn "sdl quit\n";#d# 102 main_quit Gtk2;
97 exit;
98 }, 103 },
99 SDL_VIDEORESIZE() => sub { 104 SDL_VIDEORESIZE() => sub {
100 }, 105 },
101 SDL_VIDEOEXPOSE() => sub { 106 SDL_VIDEOEXPOSE() => sub {
102 refresh; 107 refresh;
103 }, 108 },
104 SDL_KEYDOWN() => sub { 109 SDL_KEYDOWN() => sub {
110 if ($SDL_EV->key_mod & KMOD_ALT && $SDL_EV->key_sym == SDLK_RETURN) {
111 # alt-enter
112 $CFG->{fullscreen} = !$CFG->{fullscreen};
113 init_screen;
114 } else {
105 Client::Widget::feed_sdl_key_down_event ($SDL_EV); 115 Client::Widget::feed_sdl_key_down_event ($SDL_EV);
116 }
106 }, 117 },
107 SDL_KEYUP() => sub { 118 SDL_KEYUP() => sub {
108 Client::Widget::feed_sdl_key_up_event ($SDL_EV); 119 Client::Widget::feed_sdl_key_up_event ($SDL_EV);
109 }, 120 },
110 SDL_MOUSEMOTION() => sub { 121 SDL_MOUSEMOTION() => sub {
139 my ($self) = @_; 150 my ($self) = @_;
140 151
141 refresh; 152 refresh;
142} 153}
143 154
155sub conn::face_find {
156 my ($self, $face) = @_;
157
158 $FACECACHE->{"$face->{chksum},$face->{name}"}
159}
160
144sub conn::face_update { 161sub conn::face_update {
145 my ($self, $num, $face) = @_; 162 my ($self, $face) = @_;
146 163
164 $FACECACHE->{"$face->{chksum},$face->{name}"} = $face->{image};
165
166 $face->{texture} = new_from_image Crossfire::Client::Texture delete $face->{image};
147} 167}
148 168
149############################################################################# 169#############################################################################
150 170
171SDL::Init(SDL_INIT_EVERYTHING());
172
151my $mapwidget = Client::MapWidget->new; 173my $mapwidget = Crossfire::Client::Widget::MapWidget->new;
174
175#find_rcfile "uifont.ttf";
152 176
153$mapwidget->activate; 177$mapwidget->activate;
154$mapwidget->focus_in; 178$mapwidget->focus_in;
155 179
156Client::Util::read_cfg "$Crossfire::VARDIR/pclientrc"; 180read_cfg "$Crossfire::VARDIR/pclientrc";
181
182$FACECACHE = eval { Crossfire::load_ref "$Crossfire::VARDIR/pclient.faces" } || {};
157 183
158$CFG ||= { 184$CFG ||= {
159 width => 640, 185 width => 640,
160 height => 480, 186 height => 480,
161 fullscreen => 0, 187 fullscreen => 0,
162 host => "crossfire.schmorp.de", 188 host => "crossfire.schmorp.de",
163 port => 13327, 189 port => 13327,
164}; 190};
165 191
166Client::Util::run_config_dialog 192Crossfire::Client::Util::run_config_dialog
167 login => sub { start_game }, 193 login => sub { start_game },
168 logout => sub { stop_game }; 194 logout => sub { stop_game };
169 195
170main Gtk2; 196main Gtk2;
197
198Crossfire::save_ref $FACECACHE, "$Crossfire::VARDIR/pclient.faces";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines