mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
84 lines
2.4 KiB
Ruby
84 lines
2.4 KiB
Ruby
class Sprite_SurfBase
|
|
attr_reader :visible
|
|
attr_accessor :event
|
|
|
|
def initialize(sprite, event, viewport = nil)
|
|
@rsprite = sprite
|
|
@sprite = nil
|
|
@event = event
|
|
@viewport = viewport
|
|
@disposed = false
|
|
@surfbitmap = AnimatedBitmap.new("Graphics/Characters/base_surf")
|
|
@divebitmap = AnimatedBitmap.new("Graphics/Characters/base_dive")
|
|
RPG::Cache.retain("Graphics/Characters/base_surf")
|
|
RPG::Cache.retain("Graphics/Characters/base_dive")
|
|
@cws = @surfbitmap.width / 4
|
|
@chs = @surfbitmap.height / 4
|
|
@cwd = @divebitmap.width / 4
|
|
@chd = @divebitmap.height / 4
|
|
update
|
|
end
|
|
|
|
def dispose
|
|
return if @disposed
|
|
@sprite.dispose if @sprite
|
|
@sprite = nil
|
|
@surfbitmap.dispose
|
|
@divebitmap.dispose
|
|
@disposed = true
|
|
end
|
|
|
|
def disposed?
|
|
@disposed
|
|
end
|
|
|
|
def visible=(value)
|
|
@visible = value
|
|
@sprite.visible = value if @sprite && !@sprite.disposed?
|
|
end
|
|
|
|
def update
|
|
return if disposed?
|
|
if !$PokemonGlobal.surfing && !$PokemonGlobal.diving
|
|
# Just-in-time disposal of sprite
|
|
if @sprite
|
|
@sprite.dispose
|
|
@sprite = nil
|
|
end
|
|
return
|
|
end
|
|
# Just-in-time creation of sprite
|
|
@sprite = Sprite.new(@viewport) if !@sprite
|
|
if @sprite
|
|
if $PokemonGlobal.surfing
|
|
@sprite.bitmap = @surfbitmap.bitmap
|
|
cw = @cws
|
|
ch = @chs
|
|
elsif $PokemonGlobal.diving
|
|
@sprite.bitmap = @divebitmap.bitmap
|
|
cw = @cwd
|
|
ch = @chd
|
|
end
|
|
sx = @event.pattern_surf * cw
|
|
sy = ((@event.direction - 2) / 2) * ch
|
|
@sprite.src_rect.set(sx, sy, cw, ch)
|
|
if $game_temp.surf_base_coords
|
|
@sprite.x = ((($game_temp.surf_base_coords[0] * Game_Map::REAL_RES_X) - @event.map.display_x + 3) / 4) + (Game_Map::TILE_WIDTH / 2)
|
|
@sprite.y = ((($game_temp.surf_base_coords[1] * Game_Map::REAL_RES_Y) - @event.map.display_y + 3) / 4) + (Game_Map::TILE_HEIGHT / 2) + 16
|
|
else
|
|
@sprite.x = @rsprite.x
|
|
@sprite.y = @rsprite.y
|
|
end
|
|
@sprite.ox = cw / 2
|
|
@sprite.oy = ch - 16 # Assume base needs offsetting
|
|
@sprite.oy -= @event.bob_height
|
|
@sprite.z = @event.screen_z(ch) - 1
|
|
@sprite.zoom_x = @rsprite.zoom_x
|
|
@sprite.zoom_y = @rsprite.zoom_y
|
|
@sprite.tone = @rsprite.tone
|
|
@sprite.color = @rsprite.color
|
|
@sprite.opacity = @rsprite.opacity
|
|
end
|
|
end
|
|
end
|