mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
79 lines
2.1 KiB
Ruby
79 lines
2.1 KiB
Ruby
#object representing a sprite which saves its position in the tileset
|
|
class PIFSprite
|
|
attr_accessor :type
|
|
attr_accessor :head_id
|
|
attr_accessor :body_id
|
|
attr_accessor :alt_letter
|
|
|
|
#types:
|
|
# :AUTOGEN, :CUSTOM, :BASE
|
|
def initialize(type, head_id, body_id, alt_letter="")
|
|
@type = type
|
|
@head_id = head_id
|
|
@body_id = body_id
|
|
@alt_letter = alt_letter
|
|
end
|
|
|
|
|
|
#little hack for old methods that expect a filename for a sprite
|
|
def to_filename()
|
|
case @type
|
|
when :CUSTOM
|
|
return "#{@head_id}.#{@body_id}#{@alt_letter}.png"
|
|
when :AUTOGEN
|
|
return "#{@head_id}.#{@body_id}.png"
|
|
when :BASE
|
|
return "#{@head_id}#{@alt_letter}.png"
|
|
end
|
|
end
|
|
|
|
def setup_from_spritename(spritename,type)
|
|
@type = type
|
|
cleaned_name = spritename.gsub(".png","")
|
|
if cleaned_name =~ /(\d+)\.(\d+)([a-zA-Z]*)/
|
|
head_id = $1
|
|
body_id = $2
|
|
alt_letter = $3
|
|
end
|
|
@head_id = head_id
|
|
@body_id = body_id
|
|
@alt_letter = alt_letter
|
|
end
|
|
|
|
def self.from_spritename(spritename,type)
|
|
obj = allocate
|
|
obj.send(:setup_from_spritename, spritename,type)
|
|
obj
|
|
end
|
|
|
|
|
|
end
|
|
|
|
def new_pif_sprite_from_dex_num(type, dexNum,alt_letter)
|
|
body_id = getBodyID(dexNum)
|
|
head_id = getHeadID(dexNum,body_id)
|
|
return PIFSprite.new(type,head_id,body_id,alt_letter)
|
|
end
|
|
|
|
|
|
|
|
def pif_sprite_from_spritename(spritename, autogen = false)
|
|
spritename = spritename.split(".png")[0] #remove the extension
|
|
if spritename =~ /^(\d+)\.(\d+)([a-zA-Z]*)$/ # Two numbers with optional letters
|
|
type = :CUSTOM
|
|
head_id = $1.to_i # Head (e.g., "1" in "1.2.png")
|
|
body_id = $2.to_i # Body (e.g., "2" in "1.2.png")
|
|
alt_letter = $3 # Optional trailing letter (e.g., "a" in "1.2a.png")
|
|
|
|
elsif spritename =~ /^(\d+)([a-zA-Z]*)$/ # One number with optional letters
|
|
type = :BASE
|
|
head_id = $1.to_i # Head (e.g., "1" in "1.png")
|
|
alt_letter = $2 # Optional trailing letter (e.g., "a" in "1a.png")
|
|
else
|
|
echoln "Invalid sprite format: #{spritename}"
|
|
return nil
|
|
end
|
|
type = :AUTOGEN if autogen
|
|
return PIFSprite.new(type,head_id,body_id,alt_letter)
|
|
end
|