146 lines
3.7 KiB
Ruby
Executable File
146 lines
3.7 KiB
Ruby
Executable File
#
|
|
# mapidefile.rb
|
|
# Game Map IDE File Loader Class
|
|
#
|
|
# Author:: David Muir <david.muir@rockstarnorth.com>
|
|
# Date:: 28 February 2008
|
|
#
|
|
|
|
require 'pipeline/game/idefile'
|
|
require 'pipeline/game/mapidedefs'
|
|
require 'pipeline/os/path'
|
|
require 'tempfile'
|
|
|
|
module Pipeline
|
|
module Game
|
|
|
|
#
|
|
# == Description
|
|
#
|
|
# Game Map IDE file loader class.
|
|
#
|
|
class MapIDEFile < IDEFileBase
|
|
|
|
attr_reader :object_definitions # Array of IDEObjDef objects
|
|
attr_reader :time_object_definitions # Array of IDETimeObjDef objects
|
|
attr_reader :anim_definitions # Array of IDEAnimObjDef objects
|
|
attr_reader :time_anim_definitions # Array of IDETimeAnimObjDef objects
|
|
attr_reader :milo_object_definitions # Array of IDEMiloObjDef objects
|
|
attr_reader :fx2d_definitions # Array of MapIDE2DFXDef objects
|
|
attr_reader :parent_txd_definitions # Array of IDEParentTxdDef objects
|
|
|
|
def initialize( path )
|
|
|
|
super( path, OS::Path.replace_ext( path, 'img' ) )
|
|
@object_definitions = Array.new
|
|
@time_object_definitions = Array.new
|
|
@anim_definitions = Array.new
|
|
@time_anim_definitions = Array.new
|
|
@milo_object_definitions = Array.new
|
|
@fx2d_definitions = Array.new
|
|
@parent_txd_definitions = Array.new
|
|
state = STATE_NONE
|
|
|
|
File.open( path ) do |file|
|
|
|
|
begin
|
|
file.each do |linex|
|
|
|
|
line = linex.strip
|
|
# Skip empty lines
|
|
next if 0 == line.size
|
|
|
|
# Skip comment lines
|
|
next if '#' == line[0]
|
|
|
|
# See if we need to move to next state
|
|
changed_state = false
|
|
TAGS.each do |tag, id|
|
|
state = id if tag == line
|
|
changed_state = true if tag == line
|
|
end
|
|
next if changed_state
|
|
|
|
case state
|
|
when STATE_OBJ
|
|
@object_definitions << MapIDEObjDef.parse( line, self )
|
|
|
|
when STATE_TOBJ
|
|
@time_object_definitions << MapIDETimeObjDef.parse( line, self )
|
|
|
|
when STATE_TREE
|
|
when STATE_PATH
|
|
when STATE_ANIM
|
|
@anim_definitions << MapIDEAnimObjDef.parse( line, self )
|
|
|
|
when STATE_TANM
|
|
@time_anim_definitions << MapIDETimeAnimObjDef.parse( line, self )
|
|
|
|
when STATE_MILO
|
|
@milo_object_definitions << MapIDEMiloObjDef.parse( line, self )
|
|
|
|
when STATE_2DFX
|
|
@fx2d_definitions << MapIDE2DFXDef.parse( line, self )
|
|
|
|
when STATE_AMAT
|
|
when STATE_TXDP
|
|
@parent_txd_definitions << IDEParentTxdDef.parse( line, self )
|
|
|
|
end
|
|
end
|
|
ensure
|
|
file.close()
|
|
end
|
|
end
|
|
end
|
|
|
|
#
|
|
# == Description
|
|
#
|
|
# Return the total number of definitions that have been parsed in this
|
|
# IDE file.
|
|
#
|
|
def total_definitions
|
|
|
|
( @object_definitions.size +
|
|
@time_object_definitions.size +
|
|
@milo_object_definitions.size +
|
|
@parent_txd_definitions.size )
|
|
end
|
|
|
|
#---------------------------------------------------------------------
|
|
# Private
|
|
#---------------------------------------------------------------------
|
|
|
|
private
|
|
|
|
STATE_NONE = -1
|
|
STATE_OBJ = 0
|
|
STATE_TOBJ = 1
|
|
STATE_TREE = 2
|
|
STATE_PATH = 3
|
|
STATE_ANIM = 4
|
|
STATE_TANM = 5
|
|
STATE_MILO = 6
|
|
STATE_2DFX = 7
|
|
STATE_AMAT = 8
|
|
STATE_TXDP = 9
|
|
|
|
TAGS = { 'objs' => STATE_OBJ, # Objects
|
|
'tobj' => STATE_TOBJ, # Time objects
|
|
'tree' => STATE_TREE, # Trees
|
|
'path' => STATE_PATH,
|
|
'anim' => STATE_ANIM,
|
|
'tanm' => STATE_TANM,
|
|
'mlo' => STATE_MILO, # MILOs
|
|
'2dfx' => STATE_2DFX, # 2D effects
|
|
'amat' => STATE_AMAT, # Audio materials
|
|
'txdp' => STATE_TXDP,
|
|
'end' => STATE_NONE } # Tag end token
|
|
end
|
|
|
|
end # Game module
|
|
end # Pipeline module
|
|
|
|
# End of mapidefile.rb
|