101 lines
3.4 KiB
GDScript
101 lines
3.4 KiB
GDScript
extends Control
|
|
|
|
@export var radial_stamina : bool = false
|
|
|
|
var current_stam_bar
|
|
var stam_bar_visible : bool = false
|
|
var interact_visible : bool = false
|
|
|
|
@onready var level_control = get_tree().current_scene
|
|
@onready var player = level_control.player
|
|
@onready var stamina_bar: TextureProgressBar = $StaminaBar
|
|
@onready var stamina_bar_2: ProgressBar = $StaminaBar2
|
|
@onready var health_bar: ProgressBar = $HealthBar
|
|
@onready var gun_name: Label = $"MarginContainer/VBoxContainer/Gun Name"
|
|
@onready var ammo: Label = $MarginContainer/VBoxContainer/Ammo
|
|
@onready var money: Label = $Money
|
|
@onready var crosshair: TextureRect = $Crosshair
|
|
|
|
const FULL_WHITE = Color(1, 1, 1, 1)
|
|
const TRANSPARENT = Color(1, 1, 1, 0)
|
|
const RED_COLOR = Color(1, 0, 0)
|
|
const GREEN_COLOR = Color(0, 0.608, 0.172)
|
|
|
|
const STAM_BAR_MAX_OPACITY = .7
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
health_bar.max_value = level_control.start_health
|
|
|
|
if radial_stamina:
|
|
current_stam_bar = stamina_bar
|
|
stamina_bar_2.visible = false
|
|
else:
|
|
current_stam_bar = stamina_bar_2
|
|
stamina_bar.visible = false
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
player = level_control.player
|
|
if player != null:
|
|
#HEALTH
|
|
health_bar.value = level_control.health
|
|
if level_control.health <= 2:
|
|
change_color(health_bar,RED_COLOR,10,delta)
|
|
health_bar.position += wiggle_element()
|
|
else:
|
|
change_color(health_bar,FULL_WHITE,10,delta)
|
|
#MONEY
|
|
money.text = "$" + str(level_control.money)
|
|
if player.remaining_stamina/player.MAX_STAMINA >= .99:
|
|
stam_bar_visible = false
|
|
else:
|
|
stam_bar_visible = true
|
|
current_stam_bar.value = player.remaining_stamina
|
|
|
|
ammo.text = str(level_control.ammo_current[level_control.current_gun_index]) +" - " + str(level_control.ammo_reserve[level_control.current_gun_index])
|
|
|
|
if player.gun != null:
|
|
gun_name.text = player.gun.gun_name
|
|
else:
|
|
gun_name.visible = false
|
|
|
|
if player.remaining_stamina < 25:
|
|
change_color(current_stam_bar,RED_COLOR,10,delta)
|
|
change_color(crosshair,RED_COLOR,10,delta)
|
|
else:
|
|
change_color(current_stam_bar,FULL_WHITE,10,delta)
|
|
change_color(crosshair,FULL_WHITE,10,delta)
|
|
|
|
if player.interact_ray.is_colliding():
|
|
if player.interact_ray.get_collider() != null:
|
|
if player.interact_ray.get_collider().is_in_group("interact"):
|
|
interact_visible = true
|
|
else:
|
|
interact_visible = false
|
|
else:
|
|
interact_visible = false
|
|
|
|
if interact_visible == true:
|
|
change_color(crosshair,GREEN_COLOR,10,delta)
|
|
else:
|
|
change_color(crosshair,FULL_WHITE,10,delta)
|
|
|
|
## FADE ELEMENTS IN AND OUT
|
|
fade_in_out(current_stam_bar,STAM_BAR_MAX_OPACITY,stam_bar_visible,delta)
|
|
|
|
func wiggle_element():
|
|
var rand_x = randf_range(-5,5)
|
|
var rand_y = randf_range(-5,5)
|
|
return Vector2(rand_x,rand_y)
|
|
|
|
func change_color(element,color,speed,delta):
|
|
element.modulate = lerp(element.modulate, Color(color.r,color.g,color.b,element.modulate.a), (delta * speed)/Engine.time_scale)
|
|
|
|
func fade_in_out(element,MAX_OPACITY,visible,delta):
|
|
var element_color = element.modulate
|
|
if visible:
|
|
element.modulate = lerp(element_color, Color(element_color.r,element_color.g,element_color.b,MAX_OPACITY),(delta * 10)/Engine.time_scale)
|
|
else:
|
|
element.modulate = lerp(element_color, Color(element_color.r,element_color.g,element_color.b,0),(delta * 10)/Engine.time_scale)
|