settings, small fixes
This commit is contained in:
parent
b12c193636
commit
e08e3ebb13
174 changed files with 997 additions and 1040 deletions
104
scripts/player.gd
Normal file
104
scripts/player.gd
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
class_name Player extends Entity
|
||||
|
||||
@export var dash_base_cd: float = 0.7
|
||||
|
||||
@onready var player_sprite :AnimatedSprite2D = $PlayerSprite
|
||||
@onready var mask_sprite : Sprite2D = $PlayerSprite/MaskSprite
|
||||
|
||||
var dash_active := false
|
||||
var dash_cd_timer := 0.0
|
||||
|
||||
var mask_start_time = 10
|
||||
var mask_time_remaining := 15.0
|
||||
|
||||
var closest_mask_drop: MaskDrop
|
||||
var last_mask_drop : MaskDrop
|
||||
const INTERACT_DIST = 60.0
|
||||
|
||||
var dead = false
|
||||
|
||||
func _ready() -> void:
|
||||
health_changed.connect(EventBus.health_changed.emit)
|
||||
health_changed.emit(health)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if dead: return
|
||||
var input_vector := Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
|
||||
if input_vector != Vector2.ZERO:
|
||||
velocity += input_vector * move_speed
|
||||
|
||||
dash_cd_timer -= delta
|
||||
if Input.is_action_just_pressed("dash") and dash_cd_timer <= 0:
|
||||
start_dash(input_vector)
|
||||
|
||||
_handle_mask_durability(delta)
|
||||
|
||||
_check_items()
|
||||
|
||||
super._physics_process(delta)
|
||||
|
||||
func die():
|
||||
if dead: return
|
||||
super.die()
|
||||
dead = true
|
||||
visible = false
|
||||
|
||||
func revive():
|
||||
if not dead: return
|
||||
dead = false
|
||||
visible = true
|
||||
|
||||
|
||||
func start_dash(dir: Vector2):
|
||||
dash_active = true
|
||||
dash_cd_timer = dash_base_cd
|
||||
velocity += dir * move_speed * 40
|
||||
|
||||
var tween = create_tween()
|
||||
tween.tween_property(player_sprite, "scale:x", 0.5, 0.1)
|
||||
tween.tween_property(player_sprite, "scale:x", 1, 0.1)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("attack") and current_mask_data:
|
||||
use_mask(get_global_mouse_position())
|
||||
|
||||
if event.is_action_pressed("interact") and closest_mask_drop:
|
||||
equip_mask(closest_mask_drop)
|
||||
|
||||
func equip_mask(drop_node : MaskDrop):
|
||||
if drop_node.has_method("collect"):
|
||||
drop_node.collect(global_position)
|
||||
|
||||
current_mask_data = drop_node.mask_type
|
||||
mask_time_remaining = mask_start_time
|
||||
|
||||
mask_sprite.texture = current_mask_data.texture
|
||||
EventBus.mask_changed.emit(current_mask_data.mask_name)
|
||||
|
||||
func _handle_mask_durability(delta : float):
|
||||
if get_tree().get_node_count_in_group("enemy") > 0:
|
||||
mask_time_remaining -= delta
|
||||
if mask_time_remaining <= 0:
|
||||
die()
|
||||
EventBus.mask_time_changed.emit(mask_time_remaining / mask_start_time)
|
||||
|
||||
func _check_items():
|
||||
var masks : Array[Node] = get_tree().get_nodes_in_group("mask")
|
||||
closest_mask_drop = null
|
||||
var min_dist := INF
|
||||
|
||||
for mask : MaskDrop in masks:
|
||||
var dist := global_position.distance_to(mask.global_position)
|
||||
if dist < INTERACT_DIST + 10:
|
||||
min_dist = dist
|
||||
closest_mask_drop = mask
|
||||
|
||||
if last_mask_drop and closest_mask_drop != last_mask_drop:
|
||||
last_mask_drop.hide_popup()
|
||||
last_mask_drop = closest_mask_drop
|
||||
if closest_mask_drop:
|
||||
if min_dist < INTERACT_DIST:
|
||||
closest_mask_drop.show_popup()
|
||||
else:
|
||||
closest_mask_drop.hide_popup()
|
||||
Loading…
Add table
Add a link
Reference in a new issue