Class: WhiteGold

Inherits:
Object show all
Includes:
Tgui
Defined in:
lib/white_gold/master.rb

Defined Under Namespace

Classes: Job

Constant Summary

Constants included from Tgui

Tgui::UIntRect, Tgui::Vector2f, Tgui::Vector2u, Tgui::WIDGETS_COLLECTION

Instance Attribute Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *a, **na, &b) ⇒ Object



158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/white_gold/master.rb', line 158

def method_missing name, *a, **na, &b
  if @current_page.respond_to? name
    @current_page.send(name, *a, **na, &b)
  elsif @gui.respond_to? name
    @gui.send(name, *a, **na, &b)
  elsif @window.respond_to? name
    @window.send(name, *a, **na, &b)
  else
    no_method_error = "method missing in Page/Gui/Window"
    raise no_method_error
  end
end

Instance Attribute Details

#guiObject (readonly)

Returns the value of attribute gui.



86
87
88
# File 'lib/white_gold/master.rb', line 86

def gui
  @gui
end

#next_page_idObject

Returns the value of attribute next_page_id.



85
86
87
# File 'lib/white_gold/master.rb', line 85

def next_page_id
  @next_page_id
end

Instance Method Details

#[](method_name) ⇒ Object



12
13
14
# File 'lib/white_gold/master.rb', line 12

def [](method_name)
  method(method_name)
end

#fps=(fps) ⇒ Object



16
17
18
# File 'lib/white_gold/master.rb', line 16

def fps=(fps)
  @frame_delay = 1.0 / fps
end

#go(next_page_id) ⇒ Object



92
93
94
# File 'lib/white_gold/master.rb', line 92

def go next_page_id
  @next_page_id = next_page_id
end

#init(init_page = :main_page, fps: nil, theme: nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/white_gold/master.rb', line 20

def init init_page = :main_page, fps: nil, theme: nil
  @window = Window.new
  @gui = Gui.new window
  @preserved_pages = {}
  Theme.default = theme if theme
  self.fps = fps if fps
  @frame_delay = 0.015 if !@frame_delay
  @jobs = []
  @next_page_id = init_page
  load_page init_page
end

#job(delay: nil, repeat: false, &b) ⇒ Object



143
144
145
146
147
# File 'lib/white_gold/master.rb', line 143

def job delay: nil, repeat: false, &b
  job = Job.new delay:, repeat:, &b
  @jobs << job
  job
end

#load_page(page_id) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/white_gold/master.rb', line 55

def load_page page_id
  @current_page_id = page_id
  case page_id
  when Symbol
    page = @preserved_pages[page_id] = Page.new self
    @gui.self_add page, "main_container"
    @current_page = page
    ExternObject.callback_storage = page.widget_callbacks
    ExternObject.global_callback_storage = page.global_callbacks
    ExternObject.data_storage = page.custom_data
    send(page_id)
  when Class
    page = @preserved_pages[page_id] = page_id.new self
    @gui.self_add page, "main_container"
    @current_page = page
    ExternObject.callback_storage = page.widget_callbacks
    ExternObject.global_callback_storage = page.global_callbacks
    ExternObject.data_storage = page.custom_data
    page.build
  when Proc
    page = @preserved_pages[page_id] = Page.new self
    @gui.self_add page, "main_container"
    @current_page = page
    ExternObject.callback_storage = page.widget_callbacks
    ExternObject.global_callback_storage = page.global_callbacks
    ExternObject.data_storage = page.custom_data
    instance_exec &page_id
  end
end

#pageObject



88
89
90
# File 'lib/white_gold/master.rb', line 88

def page
  @current_page
end

#respond_to?(name) ⇒ Boolean

Returns:



154
155
156
# File 'lib/white_gold/master.rb', line 154

def respond_to? name
  super || @current_page.respond_to?(name)
end

#run(init_page = :main_page, fps: nil, theme: nil, init: true) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/white_gold/master.rb', line 32

def run init_page = :main_page, fps: nil, theme: nil, init: true
  self.init init_page, fps: fps, theme: theme if init

  next_frame_time = Time.now
  while @gui.self_active?
    @gui.self_poll_events
    now = Time.now
    if @current_page_id != @next_page_id
      if @current_page_id
        page = @preserved_pages[@current_page_id]
        @gui.self_remove page
        page.disconnect
        @preserved_pages.delete(@current_page_id)
      end
      load_page @next_page_id
    end
    @jobs.filter!(&:audit)
    sleep next_frame_time - now if next_frame_time > now
    @gui.self_draw
    next_frame_time += @frame_delay
  end
end

#timer(delay_ = nil, delay: nil, repeat: false, &b) ⇒ Object



149
150
151
152
# File 'lib/white_gold/master.rb', line 149

def timer delay_ = nil, delay: nil, repeat: false, &b
  job delay: delay || delay_, repeat: do
  end.on_done &b
end