IceDragon200

ISS-PositionRegister

Apr 29th, 2011
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.48 KB | None | 0 0
  1. #==============================================================================#
  2. # ISS - Position Register
  3. #==============================================================================#
  4. # Date Created  : 04/28/2011
  5. # Date Modified : 04/29/2011
  6. # Created By    : IceDragon
  7. # For Game      : S.A.R.A
  8. # ID            : 003
  9. # Version       : 1.0
  10. #==============================================================================#
  11. $imported = {} if $imported == nil
  12. $imported["ISS-PositionRegister"] = true
  13. #==============================================================================#
  14. # ISS
  15. #==============================================================================#
  16. module ISS
  17. #==============================================================================#
  18. # Pos
  19. #==============================================================================#  
  20.   class Pos
  21.    
  22.     attr_accessor :x # // X
  23.     attr_accessor :y # // Y
  24.     attr_accessor :z # // Z
  25.    
  26.     def initialize(x, y, z=0) ; @x = x ; @y = y ; @z = z end
  27.     def ==(otherpos)
  28.       return (@x == otherpos.x && @y == otherpos.y && @z == otherpos.z)
  29.     end
  30.    
  31.   end  
  32. #==============================================================================#
  33. # PositionRegister
  34. #==============================================================================#  
  35.   class PositionRegister
  36.    
  37.     attr_accessor :setup_ready
  38.    
  39.     #--------------------------------------------------------------------------#
  40.     # * method :initialize
  41.     #--------------------------------------------------------------------------#    
  42.     def initialize( sizex = 1, sizey = 1, sizez = 1)
  43.       @setup_ready = false
  44.       resize( sizex, sizey, sizez )
  45.     end
  46.    
  47.     #--------------------------------------------------------------------------#
  48.     # * method :setup
  49.     #--------------------------------------------------------------------------#
  50.     def setup( gm ) # // gm is a Game_Map class used for reference
  51.       resize(gm.width+1, gm.height+1, 2)
  52.     end
  53.  
  54.     #--------------------------------------------------------------------------#
  55.     # * method :resize
  56.     #--------------------------------------------------------------------------#    
  57.     def resize( sizex, sizey, sizez )
  58.       @data = Array.new(sizex).map! {   # // X
  59.         Array.new( sizey ).map! {       # // Y
  60.         Array.new( sizez ).map! {       # // Z
  61.         Array.new(1) } } }              # // Characters
  62.     end
  63.    
  64.     #--------------------------------------------------------------------------#
  65.     # * method :get_at
  66.     #--------------------------------------------------------------------------#
  67.     def get_at( pos ) ; return @data[pos.x][pos.y][pos.z] end
  68.  
  69.     #--------------------------------------------------------------------------#
  70.     # * method :set_at
  71.     #--------------------------------------------------------------------------#
  72.     def set_at( pos, obj ) ; @data[pos.x][pos.y][pos.z] << obj end
  73.    
  74.     #--------------------------------------------------------------------------#
  75.     # * method :delete_at
  76.     #--------------------------------------------------------------------------#
  77.     def delete_at( pos, obj )
  78.       @data[pos.x][pos.y][pos.z].delete( obj )
  79.       @data[pos.x][pos.y][pos.z].compact!
  80.     end
  81.    
  82.   end
  83.  
  84. end
  85.  
  86. #==============================================================================#
  87. # Game_Map
  88. #==============================================================================#
  89. class Game_Map
  90.  
  91.   attr_accessor :posRegister
  92.  
  93.   #--------------------------------------------------------------------------#
  94.   # * alias method :initialize
  95.   #--------------------------------------------------------------------------#
  96.   alias iss003_gm_initialize initialize unless $@
  97.   def initialize
  98.     iss003_gm_initialize
  99.     @posRegister = ::ISS::PositionRegister.new(1, 1, 1)
  100.   end
  101.  
  102.   #--------------------------------------------------------------------------#
  103.   # * alias method :setup
  104.   #--------------------------------------------------------------------------#
  105.   alias iss003_gmp_setup setup unless $@
  106.   def setup(map_id)
  107.     @posRegister.setup_ready = false
  108.     iss003_gmp_setup(map_id)
  109.     setup_iss003_map( 0 )
  110.     @posRegister.setup_ready = true
  111.     setup_iss003_map( 1 )
  112.   end
  113.  
  114.   #--------------------------------------------------------------------------#
  115.   # * new method :setup_iss003_map
  116.   #--------------------------------------------------------------------------#
  117.   def setup_iss003_map( part )
  118.     case part
  119.     when 0
  120.       @posRegister.setup( self )
  121.     when 1  
  122.       @events.values.each { |e| e.update_pos( :bypass ) }
  123.     end  
  124.   end
  125.  
  126.   #--------------------------------------------------------------------------
  127.   # * Get array of event at designated coordinates
  128.   #     x : x-coordinate
  129.   #     y : y-coordinate
  130.   #--------------------------------------------------------------------------
  131.   def events_xy(x, y)
  132.     return (@posRegister.get_at(::ISS::Pos.new(x, y)) - [$game_player]).uniq.compact
  133.   end
  134.  
  135. end
  136.  
  137. #==============================================================================#
  138. # Game_Character
  139. #==============================================================================#
  140. class Game_Character
  141.  
  142.   attr_accessor :lastpos
  143.  
  144.   #--------------------------------------------------------------------------#
  145.   # * alias method :initialize
  146.   #--------------------------------------------------------------------------#
  147.   alias iss003_gc_initialize initialize unless $@
  148.   def initialize
  149.     iss003_gc_initialize()
  150.     @lastpos = ::ISS::Pos.new(self.x, self.y, 0)
  151.     @screenrect = Rect.new(0, 0, 544, 416)
  152.   end
  153.  
  154.   #--------------------------------------------------------------------------#
  155.   # * alias method :moveto
  156.   #--------------------------------------------------------------------------#
  157.   alias iss003_gc_moveto moveto unless $@
  158.   def moveto(x, y)
  159.     iss003_gc_moveto(x, y)  
  160.     update_pos( :bypass )
  161.   end  
  162.  
  163.   #--------------------------------------------------------------------------#
  164.   # * alias method :update
  165.   #--------------------------------------------------------------------------#
  166.   alias iss003_gc_update update unless $@  
  167.   def update
  168.     iss003_gc_update()
  169.     update_pos( :normal )
  170.   end
  171.  
  172.   #--------------------------------------------------------------------------#
  173.   # * new method :update_pos
  174.   #--------------------------------------------------------------------------#
  175.   def update_pos( type=:normal )
  176.     return unless $game_map.posRegister.setup_ready
  177.     con = false # // Continue?
  178.     case type
  179.     when :normal ; con = !(@lastpos.x == self.x && @lastpos.y == self.y)
  180.     when :bypass ; con = true
  181.     when :clear  ; con = true
  182.     end  
  183.     if con
  184.       $game_map.posRegister.delete_at( @lastpos, self )
  185.       return if type == :clear
  186.       @lastpos.x = self.x ; @lastpos.y = self.y
  187.       $game_map.posRegister.set_at(@lastpos, self)
  188.     end  
  189.   end
  190.  
  191.   #--------------------------------------------------------------------------#
  192.   # * new method :onScreen?
  193.   #--------------------------------------------------------------------------#  
  194.   def onScreen?
  195.     r = @screenrect
  196.     return ( screen_x >= r.x && screen_x < r.width &&
  197.             screen_y >= r.y && screen_y < r.height )
  198.   end
  199.          
  200. end
  201.  
  202. #=*==========================================================================*=#
  203. # ** END OF FILE
  204. #=*==========================================================================*=#
Advertisement
Add Comment
Please, Sign In to add comment