Module Rubygame::Sprites::LimitGroup
In: lib/rubygame/sprite.rb

LimitGroup is a mix-in module that extends Group to limit the number of sprites it can contain. If the limit has been reached, each new sprite will “push out” the oldest sprite, on a First-In-First-Out basis.

The limit can be set either when the LimitGroup is created, or at any time during execution. However, if you reduce the limit, excess sprites will not be removed until the next time a sprite is added. (You can work around this by pushing the last sprite in the group again; the duplicate will be removed.)

Please note that, because Group#push is defined in terms of Group#<<, both LimitGroup#<< and LimitGroup#push work properly, even though only LimitGroup#<< is defined.

Methods

<<   extend_object   new  

Attributes

limit  [RW] 

Public Class methods

Defines and sets @limit = 1 when an existing object is extended.

[Source]

# File lib/rubygame/sprite.rb, line 446
                        def LimitGroup.extend_object(obj)
                                super
                                obj.limit = 1
                        end

Initialize the LimitGroup and define @limit (as 1, by default).

[Source]

# File lib/rubygame/sprite.rb, line 452
                        def initialize(limit=1)
                                @limit = limit
                        end

Public Instance methods

Add sprite to the LimitGroup, removing the oldest member if necessary to keep under the limit. If sprite is already in the LimitGroup, it will be moved to the top of the queue.

[Source]

# File lib/rubygame/sprite.rb, line 459
                        def <<(sprite)
                                if not include? sprite
                                        super(sprite)
                                        while length > @limit
                                                self.slice!(0)
                                        end
                                else # move sprite to the back of the queue
                                        self.delete(sprite)
                                        super(sprite)
                                end
                        end

[Validate]