mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Stopped errors happening when trying to load a graphic without a filename
This commit is contained in:
@@ -251,18 +251,19 @@ end
|
||||
# Gets at least the first byte of a file. Doesn't check RTP, but does check
|
||||
# encrypted archives.
|
||||
def pbGetFileChar(file)
|
||||
file = canonicalize(file)
|
||||
canon_file = canonicalize(file)
|
||||
if !safeExists?("./Game.rgssad")
|
||||
return nil if !safeExists?(file)
|
||||
return nil if !safeExists?(canon_file)
|
||||
return nil if file.last == '/' # Is a directory
|
||||
begin
|
||||
File.open(file,"rb") { |f| return f.read(1) } # read one byte
|
||||
File.open(canon_file, "rb") { |f| return f.read(1) } # read one byte
|
||||
rescue Errno::ENOENT, Errno::EINVAL, Errno::EACCES, Errno::EISDIR
|
||||
return nil
|
||||
end
|
||||
end
|
||||
str = nil
|
||||
begin
|
||||
str = load_data(file, true)
|
||||
str = load_data(canon_file, true)
|
||||
rescue Errno::ENOENT, Errno::EINVAL, Errno::EACCES, Errno::EISDIR, RGSSError, MKXPError
|
||||
str = nil
|
||||
end
|
||||
|
||||
@@ -32,13 +32,18 @@ end
|
||||
|
||||
class AnimatedBitmap
|
||||
def initialize(file, hue = 0)
|
||||
if file==nil
|
||||
raise "Filename is nil (missing graphic)."
|
||||
raise "Filename is nil (missing graphic)." if file.nil?
|
||||
path = file
|
||||
filename = ""
|
||||
if file.last != '/' # Isn't just a directory
|
||||
split_file = file.split(/[\\\/]/)
|
||||
filename = split_file.pop
|
||||
path = split_file.join('/') + '/'
|
||||
end
|
||||
if file.split(/[\\\/]/)[-1][/^\[\d+(?:,\d+)?\]/] # Starts with 1 or 2 numbers in square brackets
|
||||
@bitmap = PngAnimatedBitmap.new(file,hue)
|
||||
if filename[/^\[\d+(?:,\d+)?\]/] # Starts with 1 or 2 numbers in square brackets
|
||||
@bitmap = PngAnimatedBitmap.new(path, filename, hue)
|
||||
else
|
||||
@bitmap = GifBitmap.new(file,hue)
|
||||
@bitmap = GifBitmap.new(path, filename, hue)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -61,21 +66,23 @@ end
|
||||
|
||||
|
||||
class PngAnimatedBitmap
|
||||
attr_accessor :frames
|
||||
|
||||
# Creates an animated bitmap from a PNG file.
|
||||
def initialize(file,hue=0)
|
||||
def initialize(dir, filename, hue = 0)
|
||||
@frames = []
|
||||
@currentFrame = 0
|
||||
@framecount = 0
|
||||
panorama=RPG::Cache.load_bitmap("",file,hue)
|
||||
if file.split(/[\\\/]/)[-1][/^\[(\d+)(?:,(\d+))?\]/] # Starts with 1 or 2 numbers in brackets
|
||||
panorama = RPG::Cache.load_bitmap(dir, filename, hue)
|
||||
if filename[/^\[(\d+)(?:,(\d+))?\]/] # Starts with 1 or 2 numbers in brackets
|
||||
# File has a frame count
|
||||
numFrames = $1.to_i
|
||||
delay = $2.to_i
|
||||
delay = 10 if delay == 0
|
||||
raise "Invalid frame count in #{file}" if numFrames<=0
|
||||
raise "Invalid frame delay in #{file}" if delay<=0
|
||||
raise "Invalid frame count in #{filename}" if numFrames <= 0
|
||||
raise "Invalid frame delay in #{filename}" if delay <= 0
|
||||
if panorama.width % numFrames != 0
|
||||
raise "Bitmap's width (#{panorama.width}) is not divisible by frame count: #{file}"
|
||||
raise "Bitmap's width (#{panorama.width}) is not divisible by frame count: #{filename}"
|
||||
end
|
||||
@frameDelay = delay
|
||||
subWidth = panorama.width / numFrames
|
||||
@@ -95,7 +102,6 @@ class PngAnimatedBitmap
|
||||
end
|
||||
|
||||
def width; self.bitmap.width; end
|
||||
|
||||
def height; self.bitmap.height; end
|
||||
|
||||
def deanimate
|
||||
@@ -108,11 +114,11 @@ class PngAnimatedBitmap
|
||||
end
|
||||
|
||||
def bitmap
|
||||
@frames[@currentFrame]
|
||||
return @frames[@currentFrame]
|
||||
end
|
||||
|
||||
def currentIndex
|
||||
@currentFrame
|
||||
return @currentFrame
|
||||
end
|
||||
|
||||
def frameDelay(_index)
|
||||
@@ -120,7 +126,7 @@ class PngAnimatedBitmap
|
||||
end
|
||||
|
||||
def length
|
||||
@frames.length
|
||||
return @frames.length
|
||||
end
|
||||
|
||||
def each
|
||||
@@ -128,11 +134,11 @@ class PngAnimatedBitmap
|
||||
end
|
||||
|
||||
def totalFrames
|
||||
@frameDelay*@frames.length
|
||||
return @frameDelay * @frames.length
|
||||
end
|
||||
|
||||
def disposed?
|
||||
@disposed
|
||||
return @disposed
|
||||
end
|
||||
|
||||
def update
|
||||
@@ -149,15 +155,11 @@ class PngAnimatedBitmap
|
||||
|
||||
def dispose
|
||||
if !@disposed
|
||||
for i in @frames
|
||||
i.dispose
|
||||
end
|
||||
@frames.each { |f| f.dispose }
|
||||
end
|
||||
@disposed = true
|
||||
end
|
||||
|
||||
attr_accessor :frames # internal
|
||||
|
||||
def copy
|
||||
x = self.clone
|
||||
x.frames = x.frames.clone
|
||||
@@ -172,9 +174,12 @@ end
|
||||
|
||||
#internal class
|
||||
class GifBitmap
|
||||
attr_accessor :gifbitmaps # internal
|
||||
attr_accessor :gifdelays # internal
|
||||
|
||||
# Creates a bitmap from a GIF file with the specified
|
||||
# optional viewport. Can also load non-animated bitmaps.
|
||||
def initialize(file,hue=0)
|
||||
def initialize(dir, filename, hue = 0)
|
||||
@gifbitmaps = []
|
||||
@gifdelays = []
|
||||
@totalframes = 0
|
||||
@@ -184,25 +189,25 @@ class GifBitmap
|
||||
bitmap = nil
|
||||
filestring = nil
|
||||
filestrName = nil
|
||||
file="" if !file
|
||||
file=canonicalize(file)
|
||||
filename = "" if !filename
|
||||
full_path = canonicalize(dir + filename)
|
||||
begin
|
||||
bitmap=RPG::Cache.load_bitmap("",file,hue)
|
||||
bitmap = RPG::Cache.load_bitmap(dir, filename, hue)
|
||||
rescue
|
||||
bitmap = nil
|
||||
end
|
||||
if !bitmap || (bitmap.width == 32 && bitmap.height == 32)
|
||||
if !file || file.length<1 || file[file.length-1]!=0x2F
|
||||
if (filestring=pbGetFileChar(file))
|
||||
filestrName=file
|
||||
elsif (filestring=pbGetFileChar(file+".gif"))
|
||||
filestrName=file+".gif"
|
||||
elsif (filestring=pbGetFileChar(file+".png"))
|
||||
filestrName=file+".png"
|
||||
# elsif (filestring=pbGetFileChar(file+".jpg"))
|
||||
# filestrName=file+".jpg"
|
||||
# elsif (filestring=pbGetFileChar(file+".bmp"))
|
||||
# filestrName=file+".bmp"
|
||||
if !full_path || full_path.length < 1 || full_path[full_path.length - 1] != 0x2F
|
||||
if (filestring = pbGetFileChar(full_path))
|
||||
filestrName = full_path
|
||||
elsif (filestring = pbGetFileChar(full_path + ".gif"))
|
||||
filestrName = full_path + ".gif"
|
||||
elsif (filestring = pbGetFileChar(full_path + ".png"))
|
||||
filestrName = full_path + ".png"
|
||||
# elsif (filestring = pbGetFileChar(full_path + ".jpg"))
|
||||
# filestrName = full_path + ".jpg"
|
||||
# elsif (filestring = pbGetFileChar(full_path + ".bmp"))
|
||||
# filestrName = full_path + ".bmp"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -221,7 +226,7 @@ class GifBitmap
|
||||
@gifbitmaps = [bitmap]
|
||||
@gifdelays = [1]
|
||||
else
|
||||
tmpBase=File.basename(file)+"_tmp_"
|
||||
tmpBase = File.basename(full_path) + "_tmp_"
|
||||
filestring = pbGetFileString(filestrName) if filestring
|
||||
=begin
|
||||
Dir.chdir(ENV["TEMP"]) { # navigate to temp folder since game might be on a CD-ROM
|
||||
@@ -242,7 +247,7 @@ class GifBitmap
|
||||
@gifbitmaps.push(gifbitmap)
|
||||
bmfile.hue_change(hue) if hue != 0
|
||||
if hue == 0 && @gifdelays.length == 1
|
||||
RPG::Cache.setKey(file,gifbitmap)
|
||||
RPG::Cache.setKey(full_path, gifbitmap)
|
||||
end
|
||||
File.delete(bmfile)
|
||||
else
|
||||
@@ -257,7 +262,7 @@ class GifBitmap
|
||||
@gifdelays = [1]
|
||||
end
|
||||
if @gifbitmaps.length == 1
|
||||
RPG::Cache.setKey(file,@gifbitmaps[0])
|
||||
RPG::Cache.setKey(full_path, @gifbitmaps[0])
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -276,11 +281,11 @@ class GifBitmap
|
||||
end
|
||||
|
||||
def bitmap
|
||||
@gifbitmaps[@currentIndex]
|
||||
return @gifbitmaps[@currentIndex]
|
||||
end
|
||||
|
||||
def currentIndex
|
||||
@currentIndex
|
||||
return @currentIndex
|
||||
end
|
||||
|
||||
def frameDelay(index)
|
||||
@@ -288,7 +293,7 @@ class GifBitmap
|
||||
end
|
||||
|
||||
def length
|
||||
@gifbitmaps.length
|
||||
return @gifbitmaps.length
|
||||
end
|
||||
|
||||
def each
|
||||
@@ -296,19 +301,19 @@ class GifBitmap
|
||||
end
|
||||
|
||||
def totalFrames
|
||||
@totalframes/2 # Due to frame count being incremented by 2
|
||||
return @totalframes / 2 # Due to frame count being incremented by 2
|
||||
end
|
||||
|
||||
def disposed?
|
||||
@disposed
|
||||
return @disposed
|
||||
end
|
||||
|
||||
def width
|
||||
@gifbitmaps.length==0 ? 0 : @gifbitmaps[0].width
|
||||
return (@gifbitmaps.length == 0) ? 0 : @gifbitmaps[0].width
|
||||
end
|
||||
|
||||
def height
|
||||
@gifbitmaps.length==0 ? 0 : @gifbitmaps[0].height
|
||||
return (@gifbitmaps.length == 0) ? 0 : @gifbitmaps[0].height
|
||||
end
|
||||
|
||||
# This function must be called in order to animate the GIF image.
|
||||
@@ -316,7 +321,7 @@ class GifBitmap
|
||||
return if disposed?
|
||||
if @gifbitmaps.length > 0
|
||||
@framecount += 2
|
||||
@framecount=@totalframes<=0 ? 0 : @framecount%@totalframes
|
||||
@framecount = (@totalframes <= 0) ? 0 : @framecount % @totalframes
|
||||
frametoshow = 0
|
||||
for i in 0...@gifdelays.length
|
||||
frametoshow = i if @gifdelays[i] <= @framecount
|
||||
@@ -327,16 +332,11 @@ class GifBitmap
|
||||
|
||||
def dispose
|
||||
if !@disposed
|
||||
for i in @gifbitmaps
|
||||
i.dispose
|
||||
end
|
||||
@gifbitmaps.each { |b| b.dispose }
|
||||
end
|
||||
@disposed = true
|
||||
end
|
||||
|
||||
attr_accessor :gifbitmaps # internal
|
||||
attr_accessor :gifdelays # internal
|
||||
|
||||
def copy
|
||||
x = self.clone
|
||||
x.gifbitmaps = x.gifbitmaps.clone
|
||||
|
||||
Reference in New Issue
Block a user