FlatWhite/player.gd

92 lines
1.9 KiB
GDScript

extends KinematicBody2D
# class member variables go here, for example:
const GRAV = Vector2(0,25);
const JUMP_SPEED = Vector2(0,450);
const LEEWAY = 32
const KB_RECOVERY = 0.1
const POS_RECOVERY = 0.01
var vel = Vector2(0,0);
var dead = false
var score = 0
var short_hop = false
var short_hop_factor = 5
var knockback = 0
onready var default_pos = position.x
export var invuln = false
export var float_enable = false
signal gameover()
signal dead_player()
func _ready():
# Called when the node is added to the scene for the first time.
# Initialization here
vel = -JUMP_SPEED
short_hop = true
$Jumptimer.start()
$jump_sfx.play()
func _physics_process(delta):
# # Called every frame. Delta is time since last frame.
# # Update game logic here.
if not dead:
if not float_enable:
vel += GRAV
#move_and_collide(vel)
#var col = move_and_collide(vel)
if Input.is_action_just_pressed("ui_accept"):
#if vel.y>0:
vel = -JUMP_SPEED
short_hop = true
$Jumptimer.start()
$jump_sfx.play()
if Input.is_action_just_released("ui_accept"):
if short_hop:
vel /= short_hop_factor
short_hop = false
$Jumptimer.stop()
vel = move_and_slide(vel)
# Slowly move back to default position
position.x = ceil(lerp(position.x,default_pos,POS_RECOVERY) - knockback)
knockback = lerp(knockback,0,KB_RECOVERY)
if not invuln:
if position.x< -$Sprite.get_texture().get_size().x-LEEWAY/4 or \
position.y> get_viewport().get_visible_rect().size.y + $Sprite.get_texture().get_size().y+ LEEWAY:
if not dead:
on_dead()
func _on_AnimatedSprite_animation_finished():
pass
func _on_Timer_timeout():
if not dead:
score += 1
$scorelabel.set_text(str(score))
func _on_Jumptimer_timeout():
short_hop = false
func on_dead():
$AnimatedSprite.play()
$dead_sfx.play()
get_tree().queue_delete($scorelabel)
dead = true
emit_signal("dead_player")
func _on_dead_sfx_finished():
emit_signal("gameover")