mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 09:12:35 +00:00
Interface is now data driven!
This commit is contained in:
76
lib/game.rb
Normal file
76
lib/game.rb
Normal file
@@ -0,0 +1,76 @@
|
||||
class W3DHub
|
||||
class Game
|
||||
include CyberarmEngine::Common
|
||||
|
||||
MenuItem = Struct.new(:image, :label, :block)
|
||||
PlayItem = Struct.new(:label, :block)
|
||||
|
||||
@@games = []
|
||||
@@subclasses = []
|
||||
|
||||
attr_reader :slot, :name, :icon, :news_feed, :background_color, :menu_items, :play_items
|
||||
|
||||
def self.inherited(klass)
|
||||
super
|
||||
|
||||
@@subclasses << klass
|
||||
end
|
||||
|
||||
def self.load_games
|
||||
@@subclasses.each do |klass|
|
||||
i = klass.new
|
||||
i.setup
|
||||
|
||||
@@games << i
|
||||
end
|
||||
|
||||
@@games.sort! { |g| g.slot }
|
||||
end
|
||||
|
||||
def self.games
|
||||
@@games
|
||||
end
|
||||
|
||||
def initialize
|
||||
@slot = -1
|
||||
|
||||
@name = "???"
|
||||
@icon = EMPTY_IMAGE
|
||||
@news_feed = "???"
|
||||
@background_color = 0xff_ffffff
|
||||
|
||||
@menu_items = []
|
||||
@play_items = []
|
||||
end
|
||||
|
||||
def set_slot(index)
|
||||
@slot = index
|
||||
end
|
||||
|
||||
def set_name(name)
|
||||
@name = name
|
||||
end
|
||||
|
||||
def set_icon(path_or_image)
|
||||
@icon = path_or_image.is_a?(Gosu::Image) ? path_or_image : path_or_image.nil? ? EMPTY_IMAGE : get_image(path_or_image)
|
||||
end
|
||||
|
||||
def set_news_feed(uri)
|
||||
@news_feed = uri
|
||||
end
|
||||
|
||||
def set_background_color(color)
|
||||
@background_color = color
|
||||
end
|
||||
|
||||
def menu_item(path_or_image, label, &block)
|
||||
image = path_or_image.is_a?(Gosu::Image) ? path_or_image : path_or_image.nil? ? EMPTY_IMAGE : get_image(path_or_image)
|
||||
|
||||
@menu_items << MenuItem.new(image, label, block)
|
||||
end
|
||||
|
||||
def play_item(label, &block)
|
||||
@play_items << PlayItem.new(label, block)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user