class AuthorEngine::TouchButton

Attributes

height[R]
width[R]
x[RW]
y[RW]

Public Class Methods

new(label:, color:, x: 0, y: 0, width:, height:, for_key: nil, &block) click to toggle source
# File lib/author_engine/game/opal/touch_button.rb, line 5
def initialize(label:, color:, x: 0, y: 0, width:, height:, for_key: nil, &block)
  @label, @color, @x, @y, @width, @height = label, color, x, y, width, height
  @for_key = for_key
  @block = block

  @buttons    = AuthorEngine::Part::OpalInput::BUTTONS
  @key_states = AuthorEngine::Part::OpalInput::KEY_STATES

  @game       = AuthorEngine::GameRunner.instance.game
  @game_width = 128 * @game.authorengine_scale
  @game_x     = `window.innerWidth/2 - #{@game_width/2}`
end

Public Instance Methods

active() click to toggle source
# File lib/author_engine/game/opal/touch_button.rb, line 49
def active
  @key_states[@buttons[@for_key]] = true
end
draw() click to toggle source
# File lib/author_engine/game/opal/touch_button.rb, line 18
def draw
  `#{@game.authorengine_canvas_context}.fillStyle = #{@color}`
  `#{@game.authorengine_canvas_context}.fillRect(#{@x}, #{@y}, #{@width}, #{@height})`

  font = "#{@height}px Connection, Consolas"
  `#{@game.authorengine_canvas_context}.font = #{font}`
  `#{@game.authorengine_canvas_context}.fillStyle = "white"`
  `#{@game.authorengine_canvas_context}.textBaseline = "top"`
  `#{@game.authorengine_canvas_context}.fillText(#{@label}, #{@x}, #{@y}, #{@width})`
end
inactive() click to toggle source
# File lib/author_engine/game/opal/touch_button.rb, line 53
def inactive
  @key_states[@buttons[@for_key]] = false
end
trigger?(touches) click to toggle source
# File lib/author_engine/game/opal/touch_button.rb, line 29
def trigger?(touches)
  triggered = false

  touches.detect do |id, touch|
    if touch.x.between?(@x, @x+@width) && touch.y.between?(@y, @y+@height)
      triggered = true
    end
  end


  if @for_key
    active if triggered
    inactive unless triggered
  else
    @block.call if @block && triggered
  end

  return triggered
end