Advertisement
LiTTleDRAgo

[RGSS/2/3] Character Sprite Access

Sep 11th, 2013
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.72 KB | None | 0 0
  1. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  2. # Character Sprite Access
  3. # Version: 1.05
  4. # Author : LiTTleDRAgo
  5. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
  6.  
  7. ($imported||={})[:drg_character_sprite_access] = 1.05
  8.  
  9. text = "This script needs Drago - Core Engine ver 1.31 or above"
  10. ($imported[:drg_core_engine] || 0) >= 1.31 || raise(text)
  11.  
  12. #==============================================================================
  13. # ** Game_Character
  14. #------------------------------------------------------------------------------
  15. #  This class deals with characters. It's used as a superclass for the
  16. #  Game_Player and Game_Event classes.
  17. #==============================================================================
  18. class Game_Character
  19.   #--------------------------------------------------------------------------
  20.   # ● Public Instance Variables
  21.   #--------------------------------------------------------------------------
  22.   attr_sec_reader :bitmap,       "SBitmap_Character.new(self)"
  23.   define_method(:bitmap=)        {|*args| bitmap.send(:"=",*args)}
  24.   #--------------------------------------------------------------------------
  25.   # ● Saved_bitmap
  26.   #--------------------------------------------------------------------------
  27.   def saved_bitmap
  28.     $game_temp.event_saved_bitmap[[$game_map.map_id,@id]] ||= Array.new
  29.   end
  30. end
  31.  
  32. #==============================================================================
  33. # ** Game_Temp
  34. #------------------------------------------------------------------------------
  35. #  This class handles temporary data that is not included with save data.
  36. # The instance of this class is referenced by $game_temp.
  37. #==============================================================================
  38. Game_Temp.send(:attr_sec_reader, :event_saved_bitmap, "Hash.new")
  39.  
  40. #==============================================================================
  41. # ** SBitmap_Character
  42. #------------------------------------------------------------------------------
  43. #  
  44. #==============================================================================
  45. class SBitmap_Character
  46.   #--------------------------------------------------------------------------
  47.   # * Object Initialization
  48.   #--------------------------------------------------------------------------
  49.   define_method(:initialize)       { |char| @character = char    }
  50.   define_method(:character_sprite) { @character.character_sprite }
  51.   define_method(:saved_bitmap)     { @character.saved_bitmap     }
  52.   define_method(:get)              { character_sprite.bitmap     }
  53.   #--------------------------------------------------------------------------
  54.   # * method_missing
  55.   #--------------------------------------------------------------------------
  56.   def method_missing(val,*args)
  57.     character_sprite.bitmap && (bitmap = character_sprite.bitmap.clone)
  58.     if bitmap.respond_to?(:"#{val}")
  59.       bitmap.send(:"#{val}",*args)
  60.       reset_bitmap(1)
  61.       save = [bitmap.clone, character_sprite.src_rect.clone]
  62.       saved_bitmap.concat(save) << @character.tile_id
  63.       character_sprite.bitmap = bitmap
  64.     elsif character_sprite.respond_to?(:"#{val}")
  65.       bitmap.respond_to?(:dispose) && bitmap.dispose
  66.       character_sprite.send(:"#{val}",*args)
  67.     else
  68.       text = "Undefined method #{val} at #{@character}.bitmap"
  69.       raise NoMethodError,text,caller(1)
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # * =
  74.   #--------------------------------------------------------------------------
  75.   define_method(:"=") do |*args|
  76.     character_sprite.send(:bitmap=, *args)
  77.     if args.first.is_a?(Bitmap)
  78.       rect = [0, 0, args.first.width, args.first.height]
  79.       @character.tile_id == 0 && @character.instance_variable_set(:@tile_id,1)
  80.       character_sprite.update
  81.       character_sprite.send(:bitmap=, *args)
  82.       character_sprite.src_rect.set(*rect)
  83.       reset_bitmap(1)
  84.       save = [args.first.clone, character_sprite.src_rect.clone]
  85.       saved_bitmap.concat(save) << @character.tile_id
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # * reset_bitmap
  90.   #--------------------------------------------------------------------------
  91.   def reset_bitmap(type=0)
  92.     (s = saved_bitmap.first).respond_to?(:dispose) && (s.disposed? || s.dispose)
  93.     saved_bitmap.clear
  94.     if type == 0
  95.       @character.tile_id == 1 && @character.instance_variable_set(:@tile_id, 0)
  96.       character_sprite.send(:instance_variable_get, :@character_name).clear
  97.     end
  98.   end
  99. end
  100.  
  101. #==============================================================================
  102. # ** Sprite_Character
  103. #------------------------------------------------------------------------------
  104. #  
  105. #==============================================================================
  106. class Sprite_Character
  107.   #--------------------------------------------------------------------------
  108.   # * Alias Method
  109.   #--------------------------------------------------------------------------
  110.   alias_sec_method :drg3xd3_update, :update
  111.   #--------------------------------------------------------------------------
  112.   # * Frame Update
  113.   #--------------------------------------------------------------------------
  114.   def update(*args)
  115.     drg3xd3_update(*args)
  116.     if (@character.saved_bitmap != @saved_bitmap) &&
  117.        (@character.saved_bitmap.first.is_a?(Bitmap)) &&
  118.        (@character.saved_bitmap.first.not.disposed?)
  119.       @saved_bitmap = @character.saved_bitmap
  120.       @character.instance_variable_set(:@tile_id, @saved_bitmap.at(2))
  121.       drg3xd3_update(*args)
  122.       self.bitmap     = @saved_bitmap.first.clone
  123.       self.src_rect   = @saved_bitmap.at(1)
  124.     end
  125.   end
  126. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement