#=============================================================================== # A sprite whose sole purpose is to display an animation. This sprite can be # displayed anywhere on the map and is disposed automatically when its animation # is finished. Used for grass rustling and so forth. #=============================================================================== class AnimationSprite < RPG::Sprite def initialize(animID, map, tileX, tileY, viewport = nil, tinting = false, height = 3) super(viewport) @tileX = tileX @tileY = tileY self.bitmap = Bitmap.new(1, 1) self.bitmap.clear @map = map setCoords pbDayNightTint(self) if tinting self.animation($data_animations[animID], true, height) end def setCoords self.x = (((@tileX * Game_Map::REAL_RES_X) - @map.display_x) / Game_Map::X_SUBPIXELS).ceil self.x += Game_Map::TILE_WIDTH / 2 self.y = (((@tileY * Game_Map::REAL_RES_Y) - @map.display_y) / Game_Map::Y_SUBPIXELS).ceil self.y += Game_Map::TILE_HEIGHT end def dispose self.bitmap.dispose super end def update if !self.disposed? setCoords super self.dispose if !self.effect? end end end #=============================================================================== # #=============================================================================== class Spriteset_Map attr_reader :usersprites alias _animationSprite_initialize initialize unless private_method_defined?(:_animationSprite_initialize) alias _animationSprite_update update unless method_defined?(:_animationSprite_update) alias _animationSprite_dispose dispose unless method_defined?(:_animationSprite_dispose) def initialize(map = nil) @usersprites = [] _animationSprite_initialize(map) end def addUserAnimation(animID, x, y, tinting = false, height = 3) sprite = AnimationSprite.new(animID, self.map, x, y, @@viewport1, tinting, height) addUserSprite(sprite) return sprite end def addUserSprite(new_sprite) @usersprites.each_with_index do |sprite, i| next if sprite && !sprite.disposed? @usersprites[i] = new_sprite return end @usersprites.push(new_sprite) end def dispose _animationSprite_dispose @usersprites.each { |sprite| sprite.dispose } @usersprites.clear end def update @@viewport3.tone.set(0, 0, 0, 0) _animationSprite_update @usersprites.each { |sprite| sprite.update if !sprite.disposed? } end end