Sha256: e477e89ade73b84869e397b8966ddda49dd2efb6ecffddd30738db292674a788

Contents?: true

Size: 923 Bytes

Versions: 5

Compression:

Stored size: 923 Bytes

Contents

module Lotu
  module Systems

    module Collision
      def self.extended(instance)
        instance.systems[:collision] = CollisionSystem.new
      end

      def when_colliding(*args, &blk)
        systems[:collision].when_colliding(*args, &blk)
      end
    end

    class CollisionSystem

      def initialize
        @entities = Hash.new{ |h,k| h[k] = [] }
        @actions = {}
      end

      def add_entity(obj, tag)
        @entities[tag] << obj
      end

      def remove_entity(obj, tag)
        @entities[tag].delete(obj)
      end

      def when_colliding(type1, type2, &blk)
        @actions[[type1, type2]] = blk
      end

      def update
        @actions.each do |tags, blk|
          @entities[tags[0]].each do |ent1|
            @entities[tags[1]].each do |ent2|
              blk.call(ent1, ent2) if ent1.collides_with(ent2)
            end
          end
        end
      end

    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lotu-0.1.7 lib/lotu/systems/collision.rb
lotu-0.1.6 lib/lotu/systems/collision.rb
lotu-0.1.5 lib/lotu/systems/collision.rb
lotu-0.1.4 lib/lotu/systems/collision.rb
lotu-0.1.3 lib/lotu/systems/collision.rb