Sha256: 335cfabdf1dc8539782e94fdeb0b9d52c2e6bccba5a30c2cbee7a40495d7dca9

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

module Engine
  class Component
    def self.method_added(name)
      @methods ||= Set.new
      return if name == :initialize || name == :destroyed?
      @methods.add(name)
    end

    attr_reader :game_object

    def renderer?
      false
    end

    def ui_renderer?
      false
    end

    def set_game_object(game_object)
      @game_object = game_object
    end

    def start
    end

    def update(delta_time) end

    def destroyed?
      @destroyed || false
    end

    def destroy!
      Component.destroyed_components << self unless @destroyed
      destroy unless @destroyed
      @destroyed = true
    end

    def _erase!
      game_object.components.delete(self)
      class_name = self.class.name.split('::').last
      self.class.instance_variable_get(:@methods).each do |method|
        singleton_class.send(:undef_method, method)
        singleton_class.send(:define_method, method) do |*args, **kwargs|
          raise "This #{class_name} has been destroyed but you are still trying to access #{method}"
        end
      end
    end

    def self.erase_destroyed_components
      destroyed_components.each do |object|
        object._erase!
      end
      @destroyed_components = []
    end

    def destroy
    end

    def self.destroyed_components
      @destroyed_components ||= []
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby_rpg-0.0.4 lib/engine/component.rb
ruby_rpg-0.0.3 lib/engine/component.rb