Archived
1
0
Fork 0
This repository has been archived on 2026-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
Danmaku/client/danmaku!/player.gd
2025-03-11 18:57:19 -07:00

63 lines
1.6 KiB
GDScript

class_name Player
extends Node2D
@export var speed = 80
var velocity := Vector2.ZERO
var hurt_collision: DanmakuCircle = DanmakuCircle.new()
var graze_collision: DanmakuCircle = DanmakuCircle.new()
const PLAYER_BODY_WIDTH_MULTIPLIER = 0.18 # This is temporary, it should be defined per-sprite when I get to the skin system
var alive: bool = true
func _ready() -> void:
$BodySprite.scale_sprite(PLAYER_BODY_WIDTH_MULTIPLIER)
func get_input():
if Input.is_action_pressed("Slow Mode"):
speed = 30
else:
speed = 80
velocity = Input.get_vector("Left", "Right", "Up", "Down") * speed
func _physics_process(delta: float):
get_input()
if !alive:
return
# Bounds checking
var attempted_position := position + (velocity * delta)
attempted_position = attempted_position.clamp(Vector2(0, 0), Globals.SERVER_SIZE)
set_position_data(attempted_position, null, null)
func set_position_data(pos: Vector2, hurtcircle_scale_multiplier, grazecircle_scale_multiplier):
position = pos
hurt_collision.set_position(pos.x, pos.y)
graze_collision.set_position(pos.x, pos.y)
if hurtcircle_scale_multiplier:
hurt_collision.set_radius(Globals.SERVER_SIZE.x*hurtcircle_scale_multiplier)
$HurtcircleSprite.scale_sprite(hurtcircle_scale_multiplier*2)
if grazecircle_scale_multiplier:
graze_collision.set_radius(Globals.SERVER_SIZE.x*grazecircle_scale_multiplier)
$GrazecircleSprite.scale_sprite(grazecircle_scale_multiplier*2)
func kill():
if alive == false:
return
alive = false
$AudioStreamPlayer.play()
self.hide()
func resurrect():
if alive == true:
return
alive = true
self.show()