Advertisement
LukaSJ0

""Smart"" Sprites

Dec 1st, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.54 KB | None | 0 0
  1. class SmartSprites < Hash
  2.   # new class constructor
  3.   alias initialize_ss initialize
  4.   def initialize(viewport=nil)
  5.     # defines a global level viewport
  6.     @viewport = viewport
  7.     @disposed = false
  8.     initialize_ss
  9.   end
  10.   # creates a new sprite in the hash
  11.   def new(*args)
  12.     @disposed = false
  13.     keys = args[0].is_a?(Array) ? args[0] : [args[0]]
  14.     # selects viewport to apply to sprites
  15.     v = @viewport
  16.     for i in 1...args.length
  17.       v = args[i] if args[i].is_a?(Viewport)
  18.     end
  19.     # initializes the sprites
  20.     for key in keys
  21.       self[key] = Sprite.new(v)
  22.     end
  23.     # sets other modifiers
  24.     self.set(*args)
  25.   end
  26.   # sets a value for specified keys
  27.   def set(*args)
  28.     keys = args[0].is_a?(Array) ? args[0] : [args[0]]
  29.     # iterates through multiple keys to add values
  30.     for key in keys
  31.       # jump if key is not present
  32.       next if !self.keys.include?(key)
  33.       # iterates through possible modifiers
  34.       skip = false
  35.       for i in 1...args.length
  36.         # skips modifier if already applied
  37.         if skip
  38.           skip = false
  39.           next
  40.         end
  41.         # fetches modifier
  42.         mod = args[i]
  43.         if mod.is_a?(Symbol) # adjusts sprite values for specified modifiers
  44.           next if !self[key].respond_to?(mod)
  45.           next if args[i+1].nil? || (i+1) >= args.length
  46.           self[key].__send__("#{mod.to_s}=", args[i+1])
  47.           skip = true
  48.         elsif mod.is_a?(Color) # adjusts color value
  49.           self[key].color = mod
  50.         elsif mod.is_a?(Tone) # adjusts tone value
  51.           self[key].tone = mod
  52.         elsif mod.is_a?(Viewport) # changes viewport
  53.           self[key].viewport = mod
  54.         elsif mod.is_a?(Rect) # adjusts src_rect
  55.           self[key].src_rect.set(mod.x,mod.y,mod.width,mod.height)
  56.         elsif mod.is_a?(String) # sets bitmap
  57.           self[key].bitmap = pbBitmap(mod)
  58.         end
  59.       end
  60.     end
  61.   end
  62.   # updates all functions in hash
  63.   def update
  64.     for key in self.keys
  65.       self[key].update if !self[key].disposed? && self[key].respond_to?(:update)
  66.     end
  67.   end
  68.   # function to dispose a single or all sprites
  69.   def dispose(key=nil)
  70.     # if no key is specified, disposes all sprites
  71.     if key.nil?
  72.       for k in self.keys
  73.         self[k].dispose if self[k].respond_to?(:dispose)
  74.       end
  75.       self.clear
  76.       @disposed = true
  77.       return
  78.     end
  79.     # disposes a single sprite if key is specified
  80.     self[key].dispose if self[key].respond_to?(:dispose)
  81.     self.delete(key)
  82.   end
  83.   # checks if hash has been disposed
  84.   def disposed?; return @disposed; end
  85.   # toggles all specified sprites visible
  86.   def show(*args)
  87.     # applies to all sprites if no key is specified
  88.     if args.length < 1
  89.       for key in self.keys
  90.         self[key].visible = true
  91.       end
  92.       return
  93.     end
  94.     # sets visibility for specified keys
  95.     for key in args
  96.       self[key].visible = true
  97.     end
  98.   end
  99.   # toggles all specified sprites invisible
  100.   def hide(*args)
  101.     # applies to all sprites if no key is specified
  102.     if args.length < 1
  103.       for key in self.keys
  104.         self[key].visible = false
  105.       end
  106.       return
  107.     end
  108.     # sets visibility for specified keys
  109.     for key in args
  110.       self[key].visible = false
  111.     end
  112.   end
  113.   # quick method to adjust the x, y and z values of all sprites
  114.   def xyz(*args)
  115.     for key in self.keys
  116.       self[key].x = args[0] if !args[0].nil?
  117.       self[key].y = args[1] if !args[1].nil?
  118.       self[key].z = args[2] if !args[2].nil?
  119.     end
  120.   end
  121.   # end
  122. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement