Le jeu contient une princesse qui utilise la physique basique de Godot. A remplacer ultérieurement car non réellement satisfaisant. Le but va être de porter dans les prochaines contributions le code de microstudio.
77 lines
2.3 KiB
GDScript
77 lines
2.3 KiB
GDScript
extends CharacterBody2D
|
|
|
|
const WALK_SPEED = 200.0
|
|
const ACCELERATION_SPEED = WALK_SPEED * 6.0
|
|
const JUMP_VELOCITY = -400.0
|
|
## Maximum speed at which the player can fall.
|
|
const TERMINAL_VELOCITY = 400
|
|
|
|
## The player listens for input actions appended with this suffix.[br]
|
|
## Used to separate controls for multiple players in splitscreen.
|
|
@export var action_suffix := ""
|
|
|
|
var gravity: int = ProjectSettings.get("physics/2d/default_gravity")
|
|
@onready var platform_detector := $PlatformDetector as RayCast2D
|
|
@onready var animation := $AnimatedSprite2D as AnimatedSprite2D
|
|
@onready var animation_player := $AnimationPlayer as AnimationPlayer
|
|
@onready var camera := $Camera2D as Camera2D
|
|
var _double_jump_charged := false
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
if is_on_floor():
|
|
_double_jump_charged = true
|
|
if Input.is_action_just_pressed("jump" + action_suffix):
|
|
try_jump()
|
|
elif Input.is_action_just_released("jump" + action_suffix) and velocity.y < 0.0:
|
|
# The player let go of jump early, reduce vertical momentum.
|
|
velocity.y *= 0.6
|
|
# Fall.
|
|
velocity.y = minf(TERMINAL_VELOCITY, velocity.y + gravity * delta)
|
|
|
|
var direction := Input.get_axis("move_left" + action_suffix, "move_right" + action_suffix) * WALK_SPEED
|
|
velocity.x = move_toward(velocity.x, direction, ACCELERATION_SPEED * delta)
|
|
|
|
if not is_zero_approx(velocity.x):
|
|
if velocity.x > 0.0:
|
|
animation.scale.x = 1.0
|
|
else:
|
|
animation.scale.x = -1.0
|
|
|
|
floor_stop_on_slope = not platform_detector.is_colliding()
|
|
move_and_slide() # Character is colliding
|
|
|
|
var anim := get_new_animation(false)
|
|
if anim != animation.animation:
|
|
animation.animation = anim
|
|
animation.play()
|
|
|
|
|
|
|
|
|
|
func get_new_animation(is_shooting := false) -> String:
|
|
var animation_new: String
|
|
if is_on_floor():
|
|
if absf(velocity.x) > 0.1:
|
|
animation_new = "walk"
|
|
else:
|
|
animation_new = "idle"
|
|
else:
|
|
if velocity.y > 0.0:
|
|
animation_new = "falling_straight"
|
|
else:
|
|
animation_new = "jumping"
|
|
return animation_new
|
|
|
|
|
|
func try_jump() -> void:
|
|
if is_on_floor():
|
|
pass
|
|
elif _double_jump_charged:
|
|
_double_jump_charged = false
|
|
velocity.x *= 2.5
|
|
else:
|
|
return
|
|
velocity.y = JUMP_VELOCITY
|
|
|