|
|
|
|
@ -4,6 +4,7 @@ class_name Player |
|
|
|
|
|
|
|
|
|
const SPEED = 100.0 |
|
|
|
|
const JUMP_VELOCITY = 200.0 |
|
|
|
|
const APNEA_DURATION = 10 |
|
|
|
|
|
|
|
|
|
const STATES= [ |
|
|
|
|
"climb", |
|
|
|
|
@ -11,7 +12,8 @@ const STATES= [ |
|
|
|
|
"idle", |
|
|
|
|
"jump", |
|
|
|
|
"spawn", |
|
|
|
|
"walk" |
|
|
|
|
"walk", |
|
|
|
|
"swim" |
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
var use_gravity = { |
|
|
|
|
@ -20,7 +22,8 @@ var use_gravity = { |
|
|
|
|
"idle": true, |
|
|
|
|
"jump": true, |
|
|
|
|
"spawn": true, |
|
|
|
|
"walk": true |
|
|
|
|
"walk": true, |
|
|
|
|
"swim": true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var can_grab_obstacles = { |
|
|
|
|
@ -29,7 +32,8 @@ var can_grab_obstacles = { |
|
|
|
|
"idle": true, |
|
|
|
|
"jump": false, |
|
|
|
|
"spawn": false, |
|
|
|
|
"walk": true |
|
|
|
|
"walk": true, |
|
|
|
|
"swim": true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -37,7 +41,8 @@ var can_grab_obstacles = { |
|
|
|
|
@onready var sprite = get_node('oriented_container/sprite') |
|
|
|
|
|
|
|
|
|
# Get the gravity from the project settings to be synced with RigidBody nodes. |
|
|
|
|
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") |
|
|
|
|
var WORLD_GRAVITY = ProjectSettings.get_setting("physics/2d/default_gravity") |
|
|
|
|
var gravity = WORLD_GRAVITY |
|
|
|
|
|
|
|
|
|
var grabbed_obstacle = null |
|
|
|
|
|
|
|
|
|
@ -184,6 +189,30 @@ func handle_sprite_orientation(): |
|
|
|
|
$oriented_container.rotation = 0 if (velocity.x > 0) else PI |
|
|
|
|
sprite.flip_v = velocity.x < 0 |
|
|
|
|
|
|
|
|
|
func on_enter_swim_state(): |
|
|
|
|
gravity = WORLD_GRAVITY / 2 |
|
|
|
|
|
|
|
|
|
func swim_state(_delta): |
|
|
|
|
var direction_x = Input.get_axis("player_left", "player_right") |
|
|
|
|
var direction_y = Input.get_axis("player_up", "player_down") |
|
|
|
|
velocity = Vector2(direction_x, direction_y).normalized() * SPEED |
|
|
|
|
|
|
|
|
|
var progress_to_black = 1 - clamp($fsm.state_duration / APNEA_DURATION, 0, 1) |
|
|
|
|
sprite.modulate = Color(progress_to_black, progress_to_black, progress_to_black ) |
|
|
|
|
|
|
|
|
|
if $fsm.state_duration >= APNEA_DURATION: |
|
|
|
|
die() |
|
|
|
|
|
|
|
|
|
func on_exit_swim_state(): |
|
|
|
|
gravity = WORLD_GRAVITY |
|
|
|
|
sprite.modulate = Color(1,1,1) |
|
|
|
|
|
|
|
|
|
func swim(): |
|
|
|
|
$fsm.set_next_state("swim") |
|
|
|
|
|
|
|
|
|
func unswim(): |
|
|
|
|
$fsm.set_next_state("idle") |
|
|
|
|
|
|
|
|
|
func die(): |
|
|
|
|
$fsm.set_next_state("die") |
|
|
|
|
|
|
|
|
|
|