mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2025-12-16 21:22:33 +00:00
129 lines
3.2 KiB
Ruby
129 lines
3.2 KiB
Ruby
module CyberarmEngine
|
|
module Common
|
|
def push_state(klass, options = {})
|
|
window.push_state(klass, options)
|
|
end
|
|
|
|
def current_state
|
|
window.current_state
|
|
end
|
|
|
|
def previous_state(state = nil)
|
|
raise "Only available for CyberarmEngine::GameState and subclasses" unless is_a?(CyberarmEngine::GameState) || state.is_a?(CyberarmEngine::GameState)
|
|
|
|
i = window.states.index(state || self)
|
|
window.states[i - 1] unless (i - 1).negative?
|
|
end
|
|
|
|
def pop_state
|
|
window.pop_state
|
|
end
|
|
|
|
def shift_state
|
|
window.shift_state
|
|
end
|
|
|
|
def show_cursor
|
|
window.show_cursor
|
|
end
|
|
|
|
def show_cursor=(boolean)
|
|
window.show_cursor = boolean
|
|
end
|
|
|
|
def find_element_by_tag(container, tag, list = [])
|
|
return unless container
|
|
|
|
container.children.each do |child|
|
|
list << child if child.style.tag == tag
|
|
|
|
find_element_by_tag(child, tag, list) if child.is_a?(CyberarmEngine::Element::Container)
|
|
end
|
|
|
|
list.first
|
|
end
|
|
|
|
def draw_rect(x, y, width, height, color, z = 0, mode = :default)
|
|
Gosu.draw_rect(x, y, width, height, color, z, mode)
|
|
end
|
|
|
|
def fill(color, z = 0)
|
|
draw_rect(0, 0, window.width, window.height, color, z)
|
|
end
|
|
|
|
def lighten(color, amount = 25)
|
|
if color.respond_to?(:alpha)
|
|
Gosu::Color.rgba(color.red + amount, color.green + amount, color.blue + amount, color.alpha)
|
|
else
|
|
Gosu::Color.rgb(color.red + amount, color.green + amount, color.blue + amount)
|
|
end
|
|
end
|
|
|
|
def darken(color, amount = 25)
|
|
if color.respond_to?(:alpha)
|
|
Gosu::Color.rgba(color.red - amount, color.green - amount, color.blue - amount, color.alpha)
|
|
else
|
|
Gosu::Color.rgb(color.red - amount, color.green - amount, color.blue - amount)
|
|
end
|
|
end
|
|
|
|
def opacity(color, ratio = 1.0)
|
|
alpha = 255 * ratio
|
|
|
|
Gosu::Color.rgba(color.red, color.green, color.blue, alpha)
|
|
end
|
|
|
|
def get_asset(path, hash, klass, retro = false, tileable = false)
|
|
asset = nil
|
|
hash.detect do |_asset, instance|
|
|
if _asset == path
|
|
asset = instance
|
|
true
|
|
end
|
|
end
|
|
|
|
unless asset
|
|
instance = nil
|
|
instance = if klass == Gosu::Image
|
|
klass.new(path, retro: retro, tileable: tileable)
|
|
else
|
|
klass.new(path)
|
|
end
|
|
|
|
hash[path] = instance
|
|
asset = instance
|
|
end
|
|
|
|
asset
|
|
end
|
|
|
|
def get_image(path, retro: false, tileable: false)
|
|
get_asset(path, Window::IMAGES, Gosu::Image, retro, tileable)
|
|
end
|
|
|
|
def get_sample(path)
|
|
get_asset(path, Window::SAMPLES, Gosu::Sample)
|
|
end
|
|
|
|
def get_song(path)
|
|
get_asset(path, Window::SONGS, Gosu::Song)
|
|
end
|
|
|
|
def window
|
|
CyberarmEngine::Window.instance
|
|
end
|
|
|
|
def control_down?
|
|
Gosu.button_down?(Gosu::KB_LEFT_CONTROL) || Gosu.button_down?(Gosu::KB_RIGHT_CONTROL)
|
|
end
|
|
|
|
def shift_down?
|
|
Gosu.button_down?(Gosu::KB_LEFT_SHIFT) || Gosu.button_down?(Gosu::KB_RIGHT_SHIFT)
|
|
end
|
|
|
|
def alt_down?
|
|
Gosu.button_down?(Gosu::KB_LEFT_ALT) || Gosu.button_down?(Gosu::KB_RIGHT_ALT)
|
|
end
|
|
end
|
|
end
|