Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SmartSprites < Hash
- # new class constructor
- alias initialize_ss initialize
- def initialize(viewport=nil)
- # defines a global level viewport
- @viewport = viewport
- @disposed = false
- initialize_ss
- end
- # creates a new sprite in the hash
- def new(*args)
- @disposed = false
- keys = args[0].is_a?(Array) ? args[0] : [args[0]]
- # selects viewport to apply to sprites
- v = @viewport
- for i in 1...args.length
- v = args[i] if args[i].is_a?(Viewport)
- end
- # initializes the sprites
- for key in keys
- self[key] = Sprite.new(v)
- end
- # sets other modifiers
- self.set(*args)
- end
- # sets a value for specified keys
- def set(*args)
- keys = args[0].is_a?(Array) ? args[0] : [args[0]]
- # iterates through multiple keys to add values
- for key in keys
- # jump if key is not present
- next if !self.keys.include?(key)
- # iterates through possible modifiers
- skip = false
- for i in 1...args.length
- # skips modifier if already applied
- if skip
- skip = false
- next
- end
- # fetches modifier
- mod = args[i]
- if mod.is_a?(Symbol) # adjusts sprite values for specified modifiers
- next if !self[key].respond_to?(mod)
- next if args[i+1].nil? || (i+1) >= args.length
- self[key].__send__("#{mod.to_s}=", args[i+1])
- skip = true
- elsif mod.is_a?(Color) # adjusts color value
- self[key].color = mod
- elsif mod.is_a?(Tone) # adjusts tone value
- self[key].tone = mod
- elsif mod.is_a?(Viewport) # changes viewport
- self[key].viewport = mod
- elsif mod.is_a?(Rect) # adjusts src_rect
- self[key].src_rect.set(mod.x,mod.y,mod.width,mod.height)
- elsif mod.is_a?(String) # sets bitmap
- self[key].bitmap = pbBitmap(mod)
- end
- end
- end
- end
- # updates all functions in hash
- def update
- for key in self.keys
- self[key].update if !self[key].disposed? && self[key].respond_to?(:update)
- end
- end
- # function to dispose a single or all sprites
- def dispose(key=nil)
- # if no key is specified, disposes all sprites
- if key.nil?
- for k in self.keys
- self[k].dispose if self[k].respond_to?(:dispose)
- end
- self.clear
- @disposed = true
- return
- end
- # disposes a single sprite if key is specified
- self[key].dispose if self[key].respond_to?(:dispose)
- self.delete(key)
- end
- # checks if hash has been disposed
- def disposed?; return @disposed; end
- # toggles all specified sprites visible
- def show(*args)
- # applies to all sprites if no key is specified
- if args.length < 1
- for key in self.keys
- self[key].visible = true
- end
- return
- end
- # sets visibility for specified keys
- for key in args
- self[key].visible = true
- end
- end
- # toggles all specified sprites invisible
- def hide(*args)
- # applies to all sprites if no key is specified
- if args.length < 1
- for key in self.keys
- self[key].visible = false
- end
- return
- end
- # sets visibility for specified keys
- for key in args
- self[key].visible = false
- end
- end
- # quick method to adjust the x, y and z values of all sprites
- def xyz(*args)
- for key in self.keys
- self[key].x = args[0] if !args[0].nil?
- self[key].y = args[1] if !args[1].nil?
- self[key].z = args[2] if !args[2].nil?
- end
- end
- # end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement