mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-11-03 16:44:05 +00:00
70 lines
2.0 KiB
Ruby
70 lines
2.0 KiB
Ruby
module W3DHubLauncher
|
|
class Window < CyberarmEngine::Window
|
|
def setup
|
|
self.show_cursor = true
|
|
self.caption = format("%s | v%s (%s)", NAME, VERSION, VERSION_NAME) # "Cyberarm's W3D Hub Linux Launcher | v2.0.0 alpha"
|
|
|
|
@main_thread_queue = []
|
|
|
|
CyberarmEngine::EventBus.subscribe("game_server_pings", self) do |payload|
|
|
MemCache[:game_server_pings] = payload
|
|
end
|
|
|
|
CyberarmEngine::EventBus.subscribe("game_server_list", self) do |payload|
|
|
MemCache[:servers] = payload.map { |server| Worker::Api::GameServer.new(server) }
|
|
end
|
|
|
|
CyberarmEngine::EventBus.subscribe("game_server_added", self) do |payload|
|
|
existing_game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] }
|
|
game_server = Worker::Api::GameServer.new(payload)
|
|
|
|
if existing_game_server
|
|
MemCache[:servers][MemCache[:servers].index(existing_game_server)] = game_server
|
|
else
|
|
MemCache[:servers] << game_server
|
|
end
|
|
end
|
|
|
|
CyberarmEngine::EventBus.subscribe("game_server_updated", self) do |payload|
|
|
existing_game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] }
|
|
game_server = Worker::Api::GameServer.new(payload)
|
|
|
|
if existing_game_server
|
|
MemCache[:servers][MemCache[:servers].index(existing_game_server)] = game_server
|
|
else
|
|
MemCache[:servers] << game_server
|
|
end
|
|
end
|
|
|
|
CyberarmEngine::EventBus.subscribe("game_server_removed", self) do |payload|
|
|
game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] }
|
|
|
|
MemCache[:servers].delete(game_server) if game_server
|
|
end
|
|
|
|
push_state(States::Boot)
|
|
# push_state(States::Interface)
|
|
end
|
|
|
|
def needs_redraw?
|
|
states.any?(&:needs_repaint?)
|
|
end
|
|
|
|
def update
|
|
while(block = @main_thread_queue.shift)
|
|
block.call
|
|
end
|
|
|
|
WORKER.service
|
|
|
|
super
|
|
|
|
sleep 0.001
|
|
end
|
|
|
|
def add_to_queue(block)
|
|
@main_thread_queue << block
|
|
end
|
|
end
|
|
end
|