Bug fixes

- Require for nbtfile was incorrect for Macs.
- Bizarre 'undefined method' exception affected the sorting of the 'deferred' array.
This commit is contained in:
Samuel Lockyer 2013-06-23 22:08:16 +02:00
parent d9c43e4e10
commit 8a0ed5d439

35
s2b.rb
View file

@ -10,7 +10,17 @@
# #
# Lisence: MIT # Lisence: MIT
require "nbtfile" require 'rbconfig'
# Detect whether script is running on a Mac, change 'require' accordingly.
hostOs = RbConfig::CONFIG['host_os']
if /darwin|mac/.match(hostOs)
if ! require "/Library/Ruby/Gems/1.8/gems/nbtfile-0.2.0/lib/nbtfile.rb"
require "nbtfile"
end
else
require "nbtfile"
end
# Needy blocks are items like torches and doors, which require other blocks to # Needy blocks are items like torches and doors, which require other blocks to
# be in place -- otherwise they'll simply fall to the ground as entities. We # be in place -- otherwise they'll simply fall to the ground as entities. We
@ -97,7 +107,12 @@ def schematicToBO2(schematic, zoffset)
data = data.each_slice(schematic["Length"]).to_a data = data.each_slice(schematic["Length"]).to_a
layers = blocks.zip(data).map { |blocks, data| blocks.zip(data).map { |blocks, data| blocks.zip(data) } } layers = blocks.zip(data).map { |blocks, data| blocks.zip(data).map { |blocks, data| blocks.zip(data) } }
deferred = [] deferred = []
# Utility function that converts lines into strings.
def stringifyLine(lineArray)
return stringified = "#{lineArray[0]},#{lineArray[1]},#{lineArray[2]}:#{lineArray[3]}.#{lineArray[4]}"
end
ret.push(*FILE_HEADER) ret.push(*FILE_HEADER)
layers.each_with_index do |rows, z| layers.each_with_index do |rows, z|
z += zoffset z += zoffset
@ -108,11 +123,11 @@ def schematicToBO2(schematic, zoffset)
next next
end end
y -= schematic["Length"] / 2 # Center the object on the Y axis y -= schematic["Length"] / 2 # Center the object on the Y axis
line = "#{y},#{x},#{z}:#{block}.#{data}" line = [y, x, z, block, data]
if NEEDY_BLOCKS.include?(block) if NEEDY_BLOCKS.include?(block)
deferred << line deferred << line
else else
ret << line ret << stringifyLine(line)
end end
end end
end end
@ -120,9 +135,13 @@ def schematicToBO2(schematic, zoffset)
# Write needy blocks to the end of the BOB file, respecting the order of # Write needy blocks to the end of the BOB file, respecting the order of
# NEEDY_BLOCKS, in case some blocks are needier than others. # NEEDY_BLOCKS, in case some blocks are needier than others.
deferred.sort! { |a, b| NEEDY_BLOCKS.index(a) <=> NEEDY_BLOCKS.index(b) } deferred.sort! { |a, b| NEEDY_BLOCKS.index(a[3]) <=> NEEDY_BLOCKS.index(b[3]) }
deferred.reverse.each { |line| ret << line } deferredStringified = []
deferred.each do |lineToStringify|
deferredStringified << stringifyLine(lineToStringify)
end
deferredStringified.reverse.each { |line| ret << line }
return ret return ret
end end
@ -131,4 +150,4 @@ print "== START ==\n"
@filenames.each do |filename| @filenames.each do |filename|
handleFileName(filename) handleFileName(filename)
end end
print "== DONE ==" print "== DONE ==\n"