mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
151 lines
7.0 KiB
Ruby
151 lines
7.0 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")
|
|
@surfbitmap = update_surf_bitmap(:SURF)
|
|
@divebitmap = update_surf_bitmap(: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_surf_bitmap(type)
|
|
species = $Trainer.surfing_pokemon
|
|
path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_board" if type == :SURF
|
|
#path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_scuba" if type == :DIVE
|
|
path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_Head" if type == :DIVE
|
|
if species
|
|
shape = species.shape
|
|
basePath = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER
|
|
action = "divemon" if type == :DIVE
|
|
action = "surfmon" if type == :SURF
|
|
path = "#{basePath}#{action}_#{shape.to_s}"
|
|
end
|
|
return AnimatedBitmap.new(path)
|
|
end
|
|
|
|
|
|
# case species.shape
|
|
# when :Head
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_Head" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_Head" if type == :SURF
|
|
# when :Serpentine
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Finned
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :HeadArms
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :HeadBase
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :BipedalTail
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :HeadLegs
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Quadruped
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Winged
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Multiped
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :MultiBody
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Bipedal
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :MultiWinged
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# when :Insectoid
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_HeadBase" if type == :DIVE
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_HeadBase" if type == :SURF
|
|
# else
|
|
# path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_01"
|
|
# 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
|
|
@surfbitmap = update_surf_bitmap(:SURF)
|
|
@sprite.bitmap = @surfbitmap.bitmap
|
|
cw = @cws
|
|
ch = @chs
|
|
elsif $PokemonGlobal.diving
|
|
@divebitmap = update_surf_bitmap(:DIVE)
|
|
@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 $PokemonTemp.surfJump
|
|
@sprite.x = ($PokemonTemp.surfJump[0] * Game_Map::REAL_RES_X - @event.map.display_x + 3) / 4 + (Game_Map::TILE_WIDTH / 2)
|
|
@sprite.y = ($PokemonTemp.surfJump[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
|