Skip to content

Instantly share code, notes, and snippets.

@boruok
Last active November 26, 2021 06:41
Show Gist options
  • Save boruok/0371ef98e3507715df15e73068371f0e to your computer and use it in GitHub Desktop.
Save boruok/0371ef98e3507715df15e73068371f0e to your computer and use it in GitHub Desktop.
script for polygon button
extends Control
signal button_down
signal button_up
signal pressed
signal on_input(event)
export var debug : bool
var _pressed : bool
var _disabled : bool
var polygon : PoolVector2Array
func set_pressed(value: bool) -> void:
_pressed = value
func is_pressed() -> bool:
return _pressed
func set_disabled(value: bool) -> void:
_disabled = value
set_process(!value)
set_process_input(!value)
func is_disabled() -> bool:
return _disabled
func _process(delta: float) -> void:
if _pressed: emit_signal("pressed")
func _draw() -> void:
if debug:
draw_circle(Vector2(0, 0), 2, Color.red)
draw_polygon(polygon, PoolColorArray([Color.red]))
func _input(event: InputEvent) -> void:
if event is InputEventMouse:
var position = get_viewport().canvas_transform.affine_inverse().xform(event.position)
if Geometry.is_point_in_polygon(position - rect_global_position, polygon):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT:
if event.pressed:
_pressed = true
emit_signal("button_down")
else:
if _pressed:
_pressed = false
emit_signal("button_up")
emit_signal("on_input", event)
get_tree().set_input_as_handled()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment