ld39-dead_in_the_water/game/cards/card_base.gd

91 lines
2.4 KiB
GDScript

extends Node2D
# class member variables go here, for example:
# var a = 2
# var b = "textvar"
export(bool) var confirm_state = 0
var debug = true
var previous_location;
var playing = 0
var play_timer = 0.0
var play_done_callback
var game
func _ready():
# Called every time the node is added to the scene.
# Initialization here
set_process_input(true)
set_process(true)
if self.debug:
get_node('debug').set_text('%s' % self)
get_node('debug').show()
func _process(dt):
if self.playing:
self.play_timer -= dt
if self.play_timer <= 0:
self.play_timer = 0.0
self.playing = 0
if self.game:
if self.play_done_callback:
self.game.call(self.play_done_callback, self)
self.game = null
func _input(event):
if not self.is_visible():
return
if event.type == InputEvent.KEY && event.scancode == KEY_ESCAPE && confirm_state == 1:
self.end_confirm_state(false)
if event.type == InputEvent.KEY && (event.scancode == KEY_RETURN || event.scancode == KEY_ENTER) && confirm_state == 1:
self.end_confirm_state(true)
func enter_confirm_state():
if confirm_state == 1:
return
var game = get_node('/root/game')
if game:
var hand = game.get('hand')
game.get_node('ui/help').set_text('Press "Enter" to play the card; Press "Escape" to cancel')
for i in hand:
if i.confirm_state == 1:
i.end_confirm_state(false);
confirm_state = 1
self.previous_location = self.get_global_pos()
var r = get_viewport().get_visible_rect()
var c = Vector2(r.pos.x + (r.size.x / 2), r.pos.y + (r.size.y / 2))
self.set_global_pos(c)
self.set_scale(Vector2(3, 3))
self.set_z(self.get_z()+1)
#get_node('Controls').show()
func end_confirm_state(play_card):
if confirm_state == 0:
return
confirm_state = 0
self.set_scale(Vector2(1, 1))
print(self.previous_location)
self.set_global_pos(self.previous_location)
self.set_z(self.get_z()-1)
get_node('Controls').hide()
var game = get_node('/root/game')
if game:
game.get_node('ui/help').set_text('')
if play_card:
game.play_card(self)
func _on_click_base_input_event( viewport, event, shape_idx ):
if not self.is_visible():
return
if event.type == InputEvent.MOUSE_BUTTON && event.button_index == BUTTON_LEFT && event.pressed:
if confirm_state != 1:
self.enter_confirm_state()
return self
else:
pass
func proc_effects(game, callback = null):
if callback:
self.play_done_callback = callback
self.game = game
self.playing = 1
print('Playing card %s' % self)