Sync: Renamed Engine to Window to be less confusing, elements are now supposed to throw a changed event if their value is changed

This commit is contained in:
2020-05-04 11:17:11 -05:00
parent 4055f645f3
commit da5d740c6e
11 changed files with 78 additions and 87 deletions

View File

@@ -11,10 +11,8 @@ require_relative "cyberarm_engine/version"
require_relative "cyberarm_engine/common"
require_relative "cyberarm_engine/gosu_ext/circle"
require_relative "cyberarm_engine/game_object"
require_relative "cyberarm_engine/engine"
require_relative "cyberarm_engine/window"
require_relative "cyberarm_engine/bounding_box"
require_relative "cyberarm_engine/vector"

View File

@@ -78,15 +78,15 @@ module CyberarmEngine
end
def get_image(path, retro: false, tileable: false)
get_asset(path, Engine::IMAGES, Gosu::Image, retro, tileable)
get_asset(path, Window::IMAGES, Gosu::Image, retro, tileable)
end
def get_sample(path)
get_asset(path, Engine::SAMPLES, Gosu::Sample)
get_asset(path, Window::SAMPLES, Gosu::Sample)
end
def get_song(path)
get_asset(path, Engine::SONGS, Gosu::Song)
get_asset(path, Window::SONGS, Gosu::Song)
end
def window

View File

@@ -1,9 +0,0 @@
module Gosu
# Sourced from https://gist.github.com/ippa/662583
def self.draw_circle(cx,cy,r, z = 9999,color = Gosu::Color::GREEN, step = 10)
0.step(360, step) do |a1|
a2 = a1 + step
draw_line(cx + Gosu.offset_x(a1, r), cy + Gosu.offset_y(a1, r), color, cx + Gosu.offset_x(a2, r), cy + Gosu.offset_y(a2, r), color, z)
end
end
end

View File

@@ -111,6 +111,8 @@ module CyberarmEngine
event(:leave)
event(:blur)
event(:changed)
end
def enabled?

View File

@@ -8,7 +8,25 @@ module CyberarmEngine
@toggle_button = ToggleButton.new(options)
@label = Label.new(text, options)
define_label_singletons
@label.subscribe(:holding_left_mouse_button) do |sender, x, y|
@toggle_button.left_mouse_button(sender, x, y)
end
@label.subscribe(:released_left_mouse_button) do |sender, x, y|
@toggle_button.released_left_mouse_button(sender, x, y)
end
@label.subscribe(:clicked_left_mouse_button) do |sender, x, y|
@toggle_button.clicked_left_mouse_button(sender, x, y)
end
@label.subscribe(:enter) do |sender|
@toggle_button.enter(sender)
end
@label.subscribe(:leave) do |sender|
@toggle_button.leave(sender)
end
add(@toggle_button)
add(@label)
@@ -26,34 +44,6 @@ module CyberarmEngine
def value=(bool)
@toggle_button.vlaue = bool
end
def define_label_singletons
@label.define_singleton_method(:_toggle_button) do |button|
@_toggle_button = button
end
@label._toggle_button(@toggle_button)
@label.define_singleton_method(:holding_left_mouse_button) do |sender, x, y|
@_toggle_button.left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:released_left_mouse_button) do |sender, x, y|
@_toggle_button.released_left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:clicked_left_mouse_button) do |sender, x, y|
@_toggle_button.clicked_left_mouse_button(sender, x, y)
end
@label.define_singleton_method(:enter) do |sender|
@_toggle_button.enter(sender)
end
@label.define_singleton_method(:leave) do |sender|
@_toggle_button.leave(sender)
end
end
end
end
end

View File

@@ -44,6 +44,8 @@ module CyberarmEngine
recalculate
root.gui_state.request_recalculate if old_width != width || old_height != height
publish(:changed, self.value)
end
end
end

View File

@@ -43,6 +43,7 @@ module CyberarmEngine
@fraction = decimal.clamp(0.0, 1.0)
update_background
publish(:changed, @fraction)
return @fraction
end
end

View File

@@ -8,31 +8,29 @@ module CyberarmEngine
event(:begin_drag)
event(:drag_update)
event(:end_drag)
subscribe :begin_drag do |sender, x, y, button|
@drag_start_pos = Vector.new(x, y)
:handled
end
subscribe :drag_update do |sender, x, y, button|
@parent.handle_dragged_to(x, y)
:handled
end
subscribe :end_drag do
@drag_start_pos = nil
:handled
end
end
def draggable?(button)
button == :left
end
def begin_drag(sender, x, y, button)
@drag_start_pos = Vector.new(x, y)
:handled
end
def drag_update(sender, x, y, button)
# ratio = (@parent.x - (x - @drag_start_pos.x) / (@parent.width - width) * -1).clamp(0.0, 1.0)
# @x = @parent.x + width + ((@parent.width * ratio) - width * 2)
@parent.handle_dragged_to(x, y)
:handled
end
def end_drag(sender, x, y, button)
@drag_start_pos = nil
:handled
end
end
attr_reader :range, :step_size
@@ -43,7 +41,7 @@ module CyberarmEngine
@step_size = @options[:step] ? @options[:step] : 0.1
@value = @options[:value] ? @options[:value] : 0.5
@handle = Handle.new("", parent: self, width: 8) { close }
@handle = Handle.new("", parent: self, width: 8, height: 1.0) { close }
self.add(@handle)
end
@@ -55,8 +53,11 @@ module CyberarmEngine
@height = _height
@handle.x = @x + @style.border_thickness_left + @style.padding_left
@handle.y = @y + @style.border_thickness_top + @style.padding_left
@handle.y = @y + @style.border_thickness_top + @style.padding_top
@handle.recalculate
@handle.update_background
pp @handle.height
update_background
end
@@ -76,9 +77,13 @@ module CyberarmEngine
def holding_left_mouse_button(sender, x, y)
handle_dragged_to(x, y)
:handled
end
def handle_dragged_to(x, y)
puts
pp x, y, @handle.width, content_width
@ratio = ((x - @handle.width) - @x) / content_width
# p [@ratio, @value]
@@ -94,7 +99,10 @@ module CyberarmEngine
@value = n
@handle.x = @x + @style.padding_left + @style.border_thickness_left +
(content_width * (@value - @range.min) / (@range.max - @range.min).to_f)
@handle.recalculate
publish(:changed, @value)
end
end
end

View File

@@ -5,8 +5,8 @@ module CyberarmEngine
def initialize(options, block = nil)
super(options[:checkmark], options, block)
@toggled = options[:toggled] || false
if @toggled
@value = options[:checked] || false
if @value
@text.text = @options[:checkmark]
else
@text.text = ""
@@ -15,29 +15,14 @@ module CyberarmEngine
return self
end
def toggled=(boolean)
@toggled = !boolean
toggle
end
def clicked_left_mouse_button(sender, x, y)
toggle
self.value = !@value
@block.call(self) if @block
return :handled
end
def toggle
if @toggled
@toggled = false
@text.text = ""
else
@toggled = true
@text.text = @options[:checkmark]
end
end
def recalculate
super
@@ -51,7 +36,21 @@ module CyberarmEngine
end
def value
@toggled
@value
end
def value=(boolean)
@value = boolean
if boolean
@text.text = @options[:checkmark]
else
@text.text = ""
end
recalculate
publish(:changed, @value)
end
end
end

View File

@@ -1,5 +1,5 @@
module CyberarmEngine
class Engine < Gosu::Window
class Window < Gosu::Window
IMAGES = {}
SAMPLES= {}
SONGS = {}