Sha256: f778e03296e4c1199bedd5454a2be9af8f48a43a2f0d29384873fd20355a7c4a

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

module Baku
  class Entity
    include Baku::EventDispatcher
    
    attr_reader :components, :tags
    
    def initialize(tags = [])
      @tags = tags
      @components = {}
    end

    def add_component(component)
      if @components.has_key?(component.class)
        raise StandardError.
          new("Entity already has component: #{component.class}")
      end

      components[component.class] = component

      update_component_mask
      
      dispatch_event(:component_added, self, component)
    end

    def remove_component(component_class)
      if !@components.has_key?(component_class)
        raise StandardError.
          new("Entity does not have component: #{component_class}")
      end

      @components.delete(component_class)

      update_component_mask
      
      dispatch_event(:component_removed, self, @components[component_class])
    end

    def has_component?(component_class)
      @components.has_key?(component_class)
    end
    
    def get_component(component_class)
      @components[component_class]
    end

    def component_mask
      @component_mask ||= ComponentMask.from_components(@components)
    end

    private

    def update_component_mask
      @component_mask = ComponentMask.from_components(@components)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
baku-0.2.5 lib/baku/entity.rb