ifmapper 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.txt +5 -1
- data/IFMapper.gemspec +1 -1
- data/IFMapper.rbw +6 -0
- data/bin/IFMapper +7 -1
- data/lib/IFMapper/FXMapperSettings.rb +4 -0
- data/lib/IFMapper/FXMapperWindow.rb +18 -3
- data/lib/IFMapper/FXRoomDialogBox.rb +13 -0
- data/lib/IFMapper/PDFMapExporter.rb +3 -3
- data/lib/IFMapper/Room.rb +6 -1
- data/lib/IFMapper/locales/en/Messages.rb +1 -0
- data/lib/IFMapper/locales/es/Messages.rb +1 -0
- data/maps/AllRoads.map +0 -0
- data/maps/Aotearoa.map +0 -0
- data/maps/Revolution.map +0 -0
- data/maps/Spelunker's_Quest.map +0 -0
- metadata +5 -4
data/HISTORY.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
v1.0.8 - Added option to load a map from command-line.
|
2
|
+
- Bug fixed pdf output of letters near exits.
|
3
|
+
- Added support for comments in each location.
|
4
|
+
|
1
5
|
v1.0.7 - Bug fixed cutting and pasting of rooms,
|
2
6
|
which could overlap previous rooms in map and
|
3
7
|
leave rooms without new connections.
|
@@ -10,7 +14,7 @@ v1.0.5 - Improved PDF output in Letter box mode.
|
|
10
14
|
- Fixed IFM writer styles and syntax.
|
11
15
|
|
12
16
|
v1.0.4 - Fixed IFM connections to same room (loop paths)
|
13
|
-
-
|
17
|
+
- Improve PDF output, applied samwise patch.
|
14
18
|
- Fixed Inform7, 6 and TADS output of loop paths.
|
15
19
|
|
16
20
|
v1.0.2 - Added keyboard shortcut + and - for zooming in map
|
data/IFMapper.gemspec
CHANGED
@@ -2,7 +2,7 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |spec|
|
4
4
|
spec.name = "ifmapper"
|
5
|
-
spec.version = '1.0.
|
5
|
+
spec.version = '1.0.8'
|
6
6
|
spec.author = "Gonzalo Garramuno"
|
7
7
|
spec.email = 'ggarra13@gmail.com'
|
8
8
|
spec.homepage = 'http://www.rubyforge.org/projects/ifmapper/'
|
data/IFMapper.rbw
CHANGED
@@ -18,6 +18,12 @@ if __FILE__ == $0
|
|
18
18
|
# Create the application windows
|
19
19
|
application.create
|
20
20
|
|
21
|
+
# Optionally, open a map from command-line
|
22
|
+
file = FXMapperWindow::default_options['Map']
|
23
|
+
if file
|
24
|
+
m.open_file(file)
|
25
|
+
end
|
26
|
+
|
21
27
|
# Run the application
|
22
28
|
begin
|
23
29
|
application.run
|
data/bin/IFMapper
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
# cd to install path, so modules are found locally
|
5
5
|
install_loc = $0.sub(/\/?[^\/]*$/, '')
|
6
|
-
install_loc = install_loc
|
6
|
+
install_loc = '..' if install_loc == '.' or install_loc == ''
|
7
7
|
Dir.chdir(install_loc)
|
8
8
|
$LOAD_PATH << './lib'
|
9
9
|
require 'IFMapper/FXMapperWindow'
|
@@ -18,6 +18,12 @@ if __FILE__ == $0
|
|
18
18
|
# Create the application windows
|
19
19
|
application.create
|
20
20
|
|
21
|
+
# Optionally, open a map from command-line
|
22
|
+
file = FXMapperWindow::default_options['Map']
|
23
|
+
if file
|
24
|
+
m.open_file(file)
|
25
|
+
end
|
26
|
+
|
21
27
|
# Run the application
|
22
28
|
begin
|
23
29
|
application.run
|
@@ -145,6 +145,8 @@ class FXMapperSettings < Hash
|
|
145
145
|
language = ARGV.shift
|
146
146
|
language = language[0,2].downcase
|
147
147
|
self['Language'] = language
|
148
|
+
when /.*\.(?:map|ifm|gmp|t|t3m|inf)$/
|
149
|
+
self['Map'] = param
|
148
150
|
else
|
149
151
|
$stderr.puts "Unknown parameter '#{param}'."
|
150
152
|
exit(1)
|
@@ -187,6 +189,8 @@ class FXMapperSettings < Hash
|
|
187
189
|
'Grid Straight Connections' => true,
|
188
190
|
'Grid Diagonal Connections' => false,
|
189
191
|
|
192
|
+
# Map options
|
193
|
+
'Map' => nil
|
190
194
|
}
|
191
195
|
|
192
196
|
self.replace( defaults.merge(self) )
|
@@ -52,6 +52,10 @@ class FXMapperWindow < FXMainWindow
|
|
52
52
|
@@copy_buffer = nil
|
53
53
|
@@default_options = FXMapperSettings.new
|
54
54
|
|
55
|
+
def self.default_options
|
56
|
+
return @@default_options
|
57
|
+
end
|
58
|
+
|
55
59
|
LANGUAGES = {
|
56
60
|
'English' => 'en',
|
57
61
|
'Español' => 'es',
|
@@ -155,6 +159,10 @@ class FXMapperWindow < FXMainWindow
|
|
155
159
|
file = FXMapFileDialog.new(self, MSG_LOAD_MAP).filename
|
156
160
|
return if file == ''
|
157
161
|
|
162
|
+
open_file( file )
|
163
|
+
end
|
164
|
+
|
165
|
+
def open_file(file)
|
158
166
|
# First, make sure we don't have it loaded already...
|
159
167
|
@maps.each { |m|
|
160
168
|
if m.filename == file
|
@@ -214,6 +222,10 @@ class FXMapperWindow < FXMainWindow
|
|
214
222
|
return
|
215
223
|
end
|
216
224
|
|
225
|
+
copy_map(map, tmp, file)
|
226
|
+
end
|
227
|
+
|
228
|
+
def copy_map(map, tmp, file)
|
217
229
|
map.copy(tmp)
|
218
230
|
map.options.replace( @@default_options.merge(map.options) )
|
219
231
|
map.verify_integrity
|
@@ -977,8 +989,8 @@ class FXMapperWindow < FXMainWindow
|
|
977
989
|
cmd.connect(SEL_COMMAND, method(:cut_selected_cb))
|
978
990
|
cmd = FXMenuCommand.new(editmenu, MENU_PASTE, nil)
|
979
991
|
cmd.connect(SEL_COMMAND, method(:paste_selected_cb))
|
980
|
-
#
|
981
|
-
#
|
992
|
+
#cmd = FXMenuCommand.new(editmenu, MENU_UNDO, nil)
|
993
|
+
#cmd.connect(SEL_COMMAND, method(:undo_cb))
|
982
994
|
|
983
995
|
# Select submenu
|
984
996
|
FXMenuSeparator.new(editmenu)
|
@@ -1559,10 +1571,12 @@ class FXMapperWindow < FXMainWindow
|
|
1559
1571
|
create_mdiclient
|
1560
1572
|
create_menus
|
1561
1573
|
create_toolbar(toolbar)
|
1562
|
-
|
1574
|
+
|
1563
1575
|
|
1564
1576
|
self.connect(SEL_CLOSE, method(:close_cb))
|
1565
1577
|
show
|
1578
|
+
|
1579
|
+
new_map
|
1566
1580
|
end
|
1567
1581
|
|
1568
1582
|
def initialize(app)
|
@@ -1572,6 +1586,7 @@ class FXMapperWindow < FXMainWindow
|
|
1572
1586
|
@mdimenu = nil
|
1573
1587
|
|
1574
1588
|
create_widgets
|
1589
|
+
|
1575
1590
|
|
1576
1591
|
# Trap CTRL-C signals and exit nicely
|
1577
1592
|
trap('SIGINT') {
|
@@ -15,6 +15,7 @@ class FXRoomDialogBox < FXDialogBox
|
|
15
15
|
@room.tasks = @tasks.text
|
16
16
|
@room.darkness = (@darkness.checkState == 1)
|
17
17
|
@room.desc = @desc.text
|
18
|
+
@room.comment = @comment.text
|
18
19
|
|
19
20
|
@map.draw_room(@room)
|
20
21
|
@map.update_roomlist
|
@@ -28,6 +29,7 @@ class FXRoomDialogBox < FXDialogBox
|
|
28
29
|
@objects.text = room.objects
|
29
30
|
@tasks.text = room.tasks
|
30
31
|
@desc.text = room.desc
|
32
|
+
@comment.text = room.comment
|
31
33
|
|
32
34
|
# Select text for quick editing if it uses default location name
|
33
35
|
@name.setCursorPos room.name.size
|
@@ -42,12 +44,14 @@ class FXRoomDialogBox < FXDialogBox
|
|
42
44
|
@objects.disable
|
43
45
|
@tasks.disable
|
44
46
|
@desc.disable
|
47
|
+
@comment.disable
|
45
48
|
else
|
46
49
|
@name.enable
|
47
50
|
@darkness.enable
|
48
51
|
@objects.enable
|
49
52
|
@tasks.enable
|
50
53
|
@desc.enable
|
54
|
+
@comment.enable
|
51
55
|
end
|
52
56
|
|
53
57
|
if @map.options['Location Tasks']
|
@@ -121,6 +125,13 @@ class FXRoomDialogBox < FXDialogBox
|
|
121
125
|
@tasks.visibleRows = 8
|
122
126
|
@tasks.visibleColumns = 40
|
123
127
|
|
128
|
+
@commentFrame = FXVerticalFrame.new(leftFrame, LAYOUT_SIDE_TOP|
|
129
|
+
LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
130
|
+
FXLabel.new(@commentFrame, BOX_COMMENTS, nil, 0, LAYOUT_FILL_X)
|
131
|
+
@comment = FXText.new(@commentFrame, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
132
|
+
@comment.visibleRows = 8
|
133
|
+
@comment.visibleColumns = 40
|
134
|
+
|
124
135
|
######## Add description
|
125
136
|
@descFrame = FXVerticalFrame.new(all, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|
|
126
137
|
LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y)
|
@@ -130,6 +141,7 @@ class FXRoomDialogBox < FXDialogBox
|
|
130
141
|
@desc.visibleColumns = 70
|
131
142
|
@desc.visibleRows = 18
|
132
143
|
|
144
|
+
|
133
145
|
if modal
|
134
146
|
buttons = FXHorizontalFrame.new(mainFrame,
|
135
147
|
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|
|
@@ -149,6 +161,7 @@ class FXRoomDialogBox < FXDialogBox
|
|
149
161
|
@tasks.connect(SEL_CHANGED) { @room.tasks = @tasks.text }
|
150
162
|
@darkness.connect(SEL_COMMAND) { copy_to() }
|
151
163
|
@desc.connect(SEL_CHANGED) { @room.desc = @desc.text }
|
164
|
+
@comment.connect(SEL_CHANGED) { @room.comment = @comment.text }
|
152
165
|
end
|
153
166
|
|
154
167
|
@map = map
|
@@ -62,7 +62,8 @@ class FXConnection
|
|
62
62
|
return FXSpline::bspline(p)
|
63
63
|
end
|
64
64
|
|
65
|
-
# PRE: If it's a loop exit that comes back to the same place, let's move
|
65
|
+
# PRE: If it's a loop exit that comes back to the same place, let's move
|
66
|
+
# it up and right
|
66
67
|
def pdf_draw_complex_as_lines( pdf, opts )
|
67
68
|
p = []
|
68
69
|
maxy = opts['height'] * opts['hh'] + opts['hs_2'] + opts['margin_2']
|
@@ -210,8 +211,7 @@ class FXConnection
|
|
210
211
|
end
|
211
212
|
pdf.stroke_style( s )
|
212
213
|
pdf.stroke_color Color::RGB::Black
|
213
|
-
|
214
|
-
pdf.fill_color Color::RGB::White
|
214
|
+
pdf.fill_color Color::RGB::Black
|
215
215
|
if @pts.size > 0
|
216
216
|
pdf_draw_complex(pdf, opts)
|
217
217
|
else
|
data/lib/IFMapper/Room.rb
CHANGED
@@ -10,6 +10,7 @@ class Room
|
|
10
10
|
attr_accessor :darkness # Isxxxxxxxxxx room in darkness?
|
11
11
|
attr_accessor :x, :y # Room location in grid
|
12
12
|
attr_accessor :desc # Room description
|
13
|
+
attr_accessor :comment # Room comment
|
13
14
|
|
14
15
|
DIR_TO_VECTOR = {
|
15
16
|
0 => [ 0, -1 ],
|
@@ -31,16 +32,20 @@ class Room
|
|
31
32
|
@x = vars.shift
|
32
33
|
@y = vars.shift
|
33
34
|
@desc = nil
|
35
|
+
@comment = nil
|
34
36
|
if not vars.empty? and vars[0].kind_of?(String)
|
35
37
|
@desc = vars.shift
|
36
38
|
@desc.gsub!(/(\w)\s*\n/, '\1 ')
|
37
39
|
@desc.sub!(/\n+$/, '')
|
38
40
|
@desc.strip!
|
39
41
|
end
|
42
|
+
if not vars.empty? and vars[0].kind_of?(String)
|
43
|
+
@comment = vars.shift
|
44
|
+
end
|
40
45
|
end
|
41
46
|
|
42
47
|
def marshal_dump
|
43
|
-
[ @name, @objects, @tasks, @exits, @darkness, @x, @y, @desc ]
|
48
|
+
[ @name, @objects, @tasks, @exits, @darkness, @x, @y, @desc, @comment ]
|
44
49
|
end
|
45
50
|
|
46
51
|
def [](dir)
|
data/maps/AllRoads.map
CHANGED
Binary file
|
data/maps/Aotearoa.map
CHANGED
Binary file
|
data/maps/Revolution.map
CHANGED
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ifmapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 8
|
10
|
+
version: 1.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gonzalo Garramuno
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-02-18 00:00:00 -03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- maps/sherbet.map
|
219
219
|
- maps/simple.map
|
220
220
|
- maps/slouch.map
|
221
|
+
- maps/Spelunker's_Quest.map
|
221
222
|
- maps/splashdown.map
|
222
223
|
- maps/spring.map
|
223
224
|
- maps/squarecircle.map
|