oh-my-git/card.gd

134 lines
3.2 KiB
GDScript3
Raw Normal View History

2020-10-13 13:04:12 +02:00
extends Node2D
var hovered = false
2020-10-13 13:04:12 +02:00
var dragged = false
var drag_offset
2020-10-14 00:27:37 +02:00
2020-10-13 17:08:37 +02:00
export var arg_number = 0
export var command = "" setget set_command
2020-10-14 00:27:37 +02:00
export var description = "" setget set_description
2020-10-15 15:22:38 +02:00
export var energy = 0 setget set_energy
2020-10-14 00:27:37 +02:00
2020-10-13 17:08:37 +02:00
var _first_argument = null
var _home_position = null
var _home_rotation = null
2020-10-13 17:08:37 +02:00
2020-10-15 15:22:38 +02:00
onready var energy_label = $Sprite/Energy
2020-10-13 13:04:12 +02:00
func _ready():
set_process_unhandled_input(true)
2020-10-15 15:22:38 +02:00
set_energy(energy)
2020-10-13 13:04:12 +02:00
func _process(delta):
2020-10-15 15:22:38 +02:00
if game.energy >= energy:
energy_label.modulate = Color(0.5, 1, 0.5)
else:
energy_label.modulate = Color(1, 1, 1)
modulate = Color(1, 0.5, 0.5)
2020-10-13 13:04:12 +02:00
if dragged:
var mousepos = get_viewport().get_mouse_position()
2020-10-14 14:48:38 +02:00
global_position = mousepos - drag_offset
var target_scale = 1
if hovered and not dragged:
target_scale = 1.5
# if hovered:
# rotation = 0
# else:
# if _home_rotation:
# rotation_degrees = _home_rotation
var speed = 5
scale = lerp(scale, Vector2(target_scale, target_scale), 10*delta)
# if scale.x < target_scale:
# scale += speed*delta*Vector2(1, 1)
# elif scale.x > target_scale:
# scale -= speed*delta*Vector2(1, 1)
2020-10-13 13:04:12 +02:00
func _unhandled_input(event):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT and event.pressed and hovered:
2020-10-13 13:04:12 +02:00
dragged = true
game.dragged_object = self
2020-10-22 16:19:22 +02:00
$PickupSound.play()
2020-10-13 13:04:12 +02:00
drag_offset = get_viewport().get_mouse_position() - global_position
get_tree().set_input_as_handled()
modulate.a = 0.5
2020-10-13 17:08:37 +02:00
elif event.button_index == BUTTON_LEFT and !event.pressed and dragged:
2020-10-13 13:04:12 +02:00
dragged = false
game.dragged_object = null
modulate.a = 1
2020-10-13 17:29:24 +02:00
2020-10-14 14:48:38 +02:00
if get_viewport().get_mouse_position().y < get_viewport().size.y/3*2:
2020-10-13 17:29:24 +02:00
if arg_number == 0 :
try_play($Label.text)
2020-10-13 17:29:24 +02:00
else:
move_back()
else:
2020-10-14 00:04:47 +02:00
move_back()
func _mouse_entered():
hovered = true
z_index = 1
func _mouse_exited():
hovered = false
z_index = 0
2020-10-13 17:08:37 +02:00
func set_command(new_command):
command = new_command
2020-10-14 00:27:37 +02:00
$Label.text = command
func set_description(new_description):
description = new_description
$Description.text = description
2020-10-13 17:08:37 +02:00
2020-10-15 15:22:38 +02:00
func set_energy(new_energy):
energy = new_energy
if energy_label:
energy_label.text = str(energy)
2020-10-13 17:08:37 +02:00
func move_back():
position = _home_position
rotation_degrees = _home_rotation
2020-10-22 16:19:22 +02:00
$ReturnSound.play()
2020-10-13 17:29:24 +02:00
func buuurn():
2020-10-15 16:11:02 +02:00
move_back()
#queue_free()
#$"..".draw_rand_card()
2020-10-15 16:11:02 +02:00
#$"..".arrange_cards()
func dropped_on(other):
2020-10-13 17:08:37 +02:00
var full_command = ""
match arg_number:
2020-10-13 18:13:42 +02:00
1:
var argument = other.id
if ($Label.text.begins_with("git checkout") or $Label.text.begins_with("git rebase")) and other.id.begins_with("refs/heads"):
argument = Array(other.id.split("/")).pop_back()
full_command = $Label.text + " " + argument
try_play(full_command)
2020-10-14 00:57:30 +02:00
# 2:
# if _first_argument:
# full_command = $Label.text + " " + _first_argument + " " + other.id
# $"../Terminal".send_command(full_command)
# buuurn()
# else:
# _first_argument = other.id
func try_play(command):
if game.energy >= energy:
2020-10-22 16:19:22 +02:00
$PlaySound.play()
var particles = preload("res://card_particles.tscn").instance()
particles.position = position
get_parent().add_child(particles)
$"../../..".terminal.send_command(command)
buuurn()
game.energy -= energy
else:
move_back()