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.22 by root, Fri Apr 7 20:13:13 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 $_->draw for values %Crossfire::Client::Widget::ACTIVE_WIDGETS;
88 $_->draw
89 }
90 94
91 SDL::GLSwapBuffers; 95 SDL::GLSwapBuffers;
92} 96}
93 97
94%SDL_CB = ( 98%SDL_CB = (
95 SDL_QUIT() => sub { 99 SDL_QUIT() => sub {
96 warn "sdl quit\n";#d# 100 main_quit Gtk2;
97 exit;
98 }, 101 },
99 SDL_VIDEORESIZE() => sub { 102 SDL_VIDEORESIZE() => sub {
100 }, 103 },
101 SDL_VIDEOEXPOSE() => sub { 104 SDL_VIDEOEXPOSE() => sub {
102 refresh; 105 refresh;
103 }, 106 },
104 SDL_KEYDOWN() => sub { 107 SDL_KEYDOWN() => sub {
108 if ($SDL_EV->key_mod & KMOD_ALT && $SDL_EV->key_sym == SDLK_RETURN) {
109 # alt-enter
110 $CFG->{fullscreen} = !$CFG->{fullscreen};
111 init_screen;
112 } else {
105 Client::Widget::feed_sdl_key_down_event ($SDL_EV); 113 Crossfire::Client::Widget::feed_sdl_key_down_event ($SDL_EV);
114 }
106 }, 115 },
107 SDL_KEYUP() => sub { 116 SDL_KEYUP() => sub {
108 Client::Widget::feed_sdl_key_up_event ($SDL_EV); 117 Crossfire::Client::Widget::feed_sdl_key_up_event ($SDL_EV);
109 }, 118 },
110 SDL_MOUSEMOTION() => sub { 119 SDL_MOUSEMOTION() => sub {
111 warn "sdl motion\n";#d# 120 warn "sdl motion\n";#d#
112 }, 121 },
113 SDL_MOUSEBUTTONDOWN() => sub { 122 SDL_MOUSEBUTTONDOWN() => sub {
114 Client::Widget::feed_sdl_button_down_event ($SDL_EV); 123 Crossfire::Client::Widget::feed_sdl_button_down_event ($SDL_EV);
115 }, 124 },
116 SDL_MOUSEBUTTONUP() => sub { 125 SDL_MOUSEBUTTONUP() => sub {
117 Client::Widget::feed_sdl_button_up_event ($SDL_EV); 126 Crossfire::Client::Widget::feed_sdl_button_up_event ($SDL_EV);
118 }, 127 },
119 SDL_ACTIVEEVENT() => sub { 128 SDL_ACTIVEEVENT() => sub {
120 warn "active\n";#d# 129 warn "active\n";#d#
121 }, 130 },
122); 131);
139 my ($self) = @_; 148 my ($self) = @_;
140 149
141 refresh; 150 refresh;
142} 151}
143 152
153sub conn::face_find {
154 my ($self, $face) = @_;
155
156 $FACECACHE->{"$face->{chksum},$face->{name}"}
157}
158
144sub conn::face_update { 159sub conn::face_update {
145 my ($self, $num, $face) = @_; 160 my ($self, $face) = @_;
146 161
162 $FACECACHE->{"$face->{chksum},$face->{name}"} = $face->{image};
163
164 $face->{texture} = new_from_image Crossfire::Client::Texture delete $face->{image};
147} 165}
148 166
149############################################################################# 167#############################################################################
150 168
169SDL::Init(SDL_INIT_EVERYTHING());
170
151my $mapwidget = Client::MapWidget->new; 171my $mapwidget = Crossfire::Client::Widget::MapWidget->new;
172
173#find_rcfile "uifont.ttf";
152 174
153$mapwidget->activate; 175$mapwidget->activate;
154$mapwidget->focus_in; 176$mapwidget->focus_in;
155 177
156Client::Util::read_cfg "$Crossfire::VARDIR/pclientrc"; 178Crossfire::Client::read_cfg "$Crossfire::VARDIR/pclientrc";
179
180$FACECACHE = eval { Crossfire::load_ref "$Crossfire::VARDIR/pclient.faces" } || {};
157 181
158$CFG ||= { 182$CFG ||= {
159 width => 640, 183 width => 640,
160 height => 480, 184 height => 480,
161 fullscreen => 0, 185 fullscreen => 0,
162 host => "crossfire.schmorp.de", 186 host => "crossfire.schmorp.de",
163 port => 13327, 187 port => 13327,
164}; 188};
165 189
166Client::Util::run_config_dialog 190Crossfire::Client::Util::run_config_dialog
167 login => sub { start_game }, 191 login => sub { start_game },
168 logout => sub { stop_game }; 192 logout => sub { stop_game };
169 193
170main Gtk2; 194main Gtk2;
195
196Crossfire::save_ref $FACECACHE, "$Crossfire::VARDIR/pclient.faces";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines