ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/bin/gce
Revision: 1.20
Committed: Tue Apr 4 11:29:54 2006 UTC (18 years, 2 months ago) by elmex
Branch: MAIN
Changes since 1.19: +1 -1 lines
Log Message:
Removed pick and made the attribut editor 'the current pick'.
Added context menu to map view with an follow item in it.

File Contents

# Content
1 #!/opt/bin/perl
2
3 our $VERSION = '1.1';
4
5 BEGIN {
6 if (%PAR::LibCache) {
7 @INC = grep ref, @INC; # weed out all paths except pars loader refs
8
9 while (my ($filename, $zip) = each %PAR::LibCache) {
10 for ($zip->memberNames) {
11 next unless /^\/root\/(.*)/;
12 $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1")
13 unless -e "$ENV{PAR_TEMP}/$1";
14 }
15 }
16
17 $ENV{CROSSFIRE_LIBDIR} ||= $ENV{PAR_TEMP};
18
19 if ($^O eq "MSWin32") {
20 $ENV{GTK_RC_FILES} = "$ENV{PAR_TEMP}/share/themes/MS-Windows/gtk-2.0/gtkrc";
21 }
22 }
23 }
24
25 use Gtk2 -init;
26
27 use Data::Dumper;
28 use File::Spec;
29
30 use Crossfire;
31
32 use GCE::MainWindow;
33
34 our $CFG;
35 our $MAINWIN;
36
37 our $DOCUMENTATION = join ("\n", do { local $/; <DATA> });
38
39 sub read_cfg {
40 my ($file) = @_;
41
42 open CFG, $file
43 or return;
44
45 $CFG = eval join '', <CFG>;
46
47 close CFG;
48 }
49
50 sub write_cfg {
51 my ($file) = @_;
52
53 open CFG, ">$file"
54 or return;
55
56 {
57 local $Data::Dumper::Purity = 1;
58 $CFG->{VERSION} = $VERSION;
59 print CFG Data::Dumper->Dump ([$CFG], [qw/CFG/]);
60 }
61
62 close CFG;
63 }
64
65 # following 2 functions are taken from CV :)
66 sub find_rcfile($) {
67 my $path;
68
69 for (@INC) {
70
71 $path = "$_/GCE/$_[0]";
72 return $path if -r $path;
73 }
74
75 die "FATAL: can't find required file $_[0]\n";
76 }
77
78 sub require_image($) {
79 new_from_file Gtk2::Gdk::Pixbuf find_rcfile "images/$_[0]";
80 }
81
82 sub get_pos_and_size {
83 my ($window) = @_;
84
85 my ($x, $y) = $window->get_position;
86 my ($w, $h) = $window->get_size;
87
88 return [$x, $y, $w, $h];
89 }
90
91 sub set_pos_and_size {
92 my ($window, $p_and_s, $default_w, $default_h, $default_x, $default_y) = @_;
93
94 $window->set_default_size ($p_and_s->[2] || $default_w, $p_and_s->[3] || $default_h);
95
96 # FIXME: This sucks, moving it after showing it can't be a good thing.
97 $window->show_all;
98 $window->move ($p_and_s->[0] || $default_x, $p_and_s->[1] || $default_y);
99 }
100
101 read_cfg "$Crossfire::VARDIR/gceconfig";
102
103 $CFG->{LIBDIR} ||= $ENV{CROSSFIRE_LIBDIR};
104 $CFG->{MAPDIR} ||= File::Spec->catfile ($CFG->{LIBDIR}, 'maps');
105
106 # must be done after changing the libdir path:
107 Crossfire::set_libdir ($CFG->{LIBDIR});
108 Crossfire::load_archetypes;
109 Crossfire::load_tilecache;
110
111 my $w = GCE::MainWindow->new;
112
113 $w->load_layout;
114
115 $w->show_all;
116
117 Gtk2->main;
118
119 __DATA__
120
121 =head1 NAME
122
123 gce - gtk (perl) crossfire editor
124
125 =head1 SYNOPSIS
126
127 gce [<map-filename>...]
128
129 =head1 FEATURES
130
131 gce is a map editor for crossfire.
132
133 Its main features are:
134
135 - higher map editing comfort
136 - intelligent placement tool
137 - intelligent connection tool
138 - intelligent erase tool
139 - faster and smaller than the java editor
140 - map normalizing (removal of old deprecated attributes)
141 - exit following
142 - world map navigation
143 - easier installation (on windows)
144 - auto joining of walls (see Placement tool -> auto setting)
145
146 =head1 DESCRIPTION
147
148 =head2 THE TOOLBOX WINDOW
149
150 The toolbox window is the main window of gce. It provides the display of
151 the currently selected object and the tools. The buttons select of the
152 editing tool:
153
154 =over 4
155
156 =item * Pick
157
158 This tool is the simplest of all. It lets the user select the topmost
159 object of a map cell in the map window and updates the stack view for the
160 current space.
161
162 If the pick attr flag is set only the attribute editor and the stack
163 view are updated. This is useful when you want to put an object in the
164 attribute editor and want to place an object from the map, you picked
165 before, in an inventory of a different object (you just picked). This is a
166 very special thing. It will propably go away.
167
168 Shortcut-key in map editor: i
169
170 =item * Place
171
172 This is the intelligent placement tool. It has many modes:
173
174 =over 4
175
176 =item auto
177
178 This mode implements DWIM (do-what-I-mean) by trying to do the the right
179 thing(tm) with the selected object:
180
181 If you place a floor arch, it will try to replace the existing floor or
182 set the floor below all items. If you place a monster or other arch, it
183 will place it on top. If you place a wall, it will put the wall above the
184 floor and propably replace other walls.
185
186 Autojoin also works only in this mode. To draw an wall with autojoining pick
187 the wall arch which name looks like: <wallname>_0. It's the single point wall
188 tile which has no connections.
189 When you place this arch now, it will autoconnect the walls you are drawing.
190
191 =item top
192
193 Places the arch on the top of the stack of the map cell.
194
195 =item above floor
196
197 Places the arch just right above the floor (or the bottom of the stack).
198
199 =item below floor
200
201 Places the arch just right below the floor (or the bottom of the stack).
202
203 =item bottom
204
205 Places the arch on the bottom of the stack.
206
207 =back
208
209 Shortcut-key in map editor: p
210
211 =item * Erase
212
213 This is the tool that lets you erase an arch.
214
215 It has following modes:
216
217 =over 4
218
219 =item top
220
221 Erases the topmost object on the stack.
222
223 =item walls
224
225 Erases all walls in the stack (and only walls).
226
227 =item above floor
228
229 Erases the first object above the floor.
230
231 =item floor
232
233 Erases all floor from the stack (and only the floor).
234
235 =item below floor
236
237 Erases the first object below the floor.
238
239 =item bottom
240
241 Erases the first object on the bottom of the stack.
242
243 =item pick match
244
245 This erases all objects from the stack that match the currently selected
246 object.
247
248 =item protect walls (checkbox)
249
250 This protects walls from being erased (except when erasing walls).
251
252 =item protect monsters (checkbox)
253
254 This protects monsters from being erased.
255
256 =back
257
258 Shortcut-key in map editor: e
259
260 =item * Select
261
262 This is the selection tool. It can be used to select rectangular areas and
263 operate on that area in various ways:
264
265 =over 4
266
267 =item copy
268
269 This just copies all objects from the selected area into an internal
270 buffer for later paste operations.
271
272 Shortcut-key in map editor: c
273
274 =item paste
275
276 This function pastes the internal buffer into the map, beginning in the
277 top left corner of the selected area. The size of the selection has no
278 relevance to the result: IT always places the whole internal buffer onto
279 the map.
280
281 Shortcut-key in map editor: p
282
283 =item invoke
284
285 This function is a very powerful one. It can apply another tool (such as
286 the place tool) on all spaces of the selected area.
287
288 It can, for example, be used to fill a map with floor tiles or erase
289 everything.
290
291 Shortcut-key in map editor: n
292
293 =back
294
295 Shortcut-key in map editor: s
296
297 =item * Eval
298
299 This is a very special tool which isn't finished yet. It lets you specify
300 a perl snippet that can manipulate the stack.
301
302 Shortcut-key in map editor: l
303
304 =item * Connect Exit
305
306 This tool connects two exits or teleporters.
307
308 You can either connect two exits to each other, or just point an exit to
309 a certain location on a map.
310
311 Shortcut-key in map editor: x
312
313 =item * Follow Exit
314
315 With this tool you can follow exits and teleporters by opening the target
316 map in a new window (or presents an existing window).
317
318 Shortcut-key in map editor: f
319
320 =back
321
322 =head2 THE STACK VIEW
323
324 This window displays the stack of a map space/coordinate.
325
326 You can swap two objects on the stack and delete a object from the stack
327 by dragging one object over another.
328
329 By clicking on an item on the stack you can make it the currently selected
330 object.
331
332 =head2 THE MAP EDITOR
333
334 This window just displays the map and lets you use the tools. The shortcuts are
335 documented above in the tool descriptions.
336
337 You can pan the map using the middle mouse button and use the tool with
338 the left mouse button.
339
340 There are two modifiers: Holding down the Meta/Alt-key temporarily
341 switches to the pick tool. Holding down the Ctrl-key temporarily switched
342 to the erase tool. Both will use their current settings. To change them,
343 you need to select the tools using the toolbox first.
344
345 =head2 THE ATTRIBUTE EDITOR
346
347 The attribute editor display the archetype name followed by the object
348 name and the type of the object in parentheses.
349
350 Since there are often many attributes for a given object, they are sorted
351 into different categories/tabs.
352
353 The lore and msg tabs let you edit the text attributes of the object.
354
355 The inventory tab lets you add stuff to the inventory by dragging them
356 from the selected object in the toolbox to the top most button with the
357 image in the inventory (the inventory editor is subject to change and
358 improvement).
359
360 Both field labels and value widgets have tool tips enabled. Tool tips on
361 the labels explain the attribute in more detail. The tool tips on the
362 value widgets show the default value from the archetype.
363
364
365 =head2 THE PICK WINDOW
366
367 Pick windows are used to quickly pick archetypes from specific categories.
368
369 Left click creates an object from the archetype and makes it the currently
370 selected object for the tools and the attribute editor.
371
372 You can change the attributes of the currently selected object in the
373 attribute editor.
374
375 You can open multiple pick windows.
376
377 =head1 AUTHOR
378
379 All of the editor GUI:
380
381 Robin Redeker <elmex@ta-sa.org>
382 http://www.ta-sa.org/
383
384 The Crossfire map handling module and map widget:
385
386 Marc Lehmann <schmorp@schmorp.de>
387 http://home.schmorp.de/
388
389 =cut