Class: AdventureRL::EventHandlers::EventHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/AdventureRL/EventHandlers/EventHandler.rb

Overview

An EventHandler can have multiple Event s. You can subscribe an object to a specific Event using its name, through the EventHandler.

Direct Known Subclasses

Buttons

Instance Method Summary collapse

Constructor Details

#initialize(settings = {}) ⇒ EventHandler

Returns a new instance of EventHandler.



7
8
9
# File 'lib/AdventureRL/EventHandlers/EventHandler.rb', line 7

def initialize settings = {}
  @events = []
end

Instance Method Details

#add_event(event) ⇒ Object Also known as: add, <<

Add an Event to this EventHandler.



12
13
14
15
16
17
18
# File 'lib/AdventureRL/EventHandlers/EventHandler.rb', line 12

def add_event event
  Helpers::Error.error(
    "Passed `event' is not an instance of `Event'.",
    "Got `#{event.inspect}:#{event.class.name}'."
  )  unless (event.is_a? Event)
  @events << event
end

#subscribe(object) ⇒ Object

Subscribe an object to all Event s in this EventHandler.



23
24
25
26
27
28
29
30
31
# File 'lib/AdventureRL/EventHandlers/EventHandler.rb', line 23

def subscribe object
  Helpers::Error.error(
    "Object `#{object.inspect}:#{object.class.name}' cannot subscribe",
    "to this EventHandler `#{self.inspect}:#{self.class.name}'."
  )  unless (valid_object? object)
  @events.each do |event|
    event.add_object object
  end
end

#trigger(event_name, *args) ⇒ Object

Trigger the Event with the name event_name. Returns true if the Event was found and false if not. Optionally, additional args arguments can be passed, which will be passed to the trigger methods on the Event s.



44
45
46
47
48
49
50
# File 'lib/AdventureRL/EventHandlers/EventHandler.rb', line 44

def trigger event_name, *args
  event = @events.detect do |evnt|
    evnt.get_name == event_name
  end
  event.trigger *args  if (event)
  return !!event
end

#unsubscribe(object) ⇒ Object

Unsubscribe an object from all Event s in this EventHandler.



34
35
36
37
38
# File 'lib/AdventureRL/EventHandlers/EventHandler.rb', line 34

def unsubscribe object
  @events.each do |event|
    event.remove_object object
  end
end