finally built the crosshair of my dreams

This commit is contained in:
derek
2025-03-18 15:27:31 -05:00
parent 891ae8a7f2
commit 95a2c9da95
11 changed files with 212 additions and 160 deletions

View File

@@ -5,8 +5,8 @@ extends Control
## VIEWPORT
var viewportWidth
var viewportHeight
var viewportCenter
var current_stam_bar
var stam_bar_visible : bool = false
var interact_visible : bool = false
var health_bar_start_pos
@@ -16,8 +16,6 @@ var crosshair_target
@onready var level_control = get_tree().current_scene
@onready var player = level_control.player
@onready var stamina_bar: TextureProgressBar = $StaticItems/StaminaBar
@onready var stamina_bar_2: ProgressBar = $StaticItems/StaminaBar2
@onready var health_bar: ProgressBar = $WobbleItems/HealthBar
@onready var ammo_counter: HBoxContainer = $WobbleItems/GunInfo/VBoxContainer/AmmoCounter
@onready var gun_name: Label = $"WobbleItems/GunInfo/VBoxContainer/Gun Name"
@@ -25,34 +23,27 @@ var crosshair_target
@onready var ammo_reserve: Label = $WobbleItems/GunInfo/VBoxContainer/AmmoCounter/AmmoReserve
@onready var gun_info: MarginContainer = $WobbleItems/GunInfo
@onready var money: Label = $WobbleItems/Money
@onready var crosshair: TextureRect = $StaticItems/Crosshair
@onready var crosshair_center: TextureRect = $StaticItems/CrosshairCenter
@onready var pickup_item_indicator = preload("res://assets/pickup_item_indicator.tscn")
@onready var wobble_items: Control = $WobbleItems
const FULL_WHITE = Color(1, 1, 1, 1)
const TRANSPARENT = Color(1, 1, 1, 0)
const RED_COLOR = Color(1, 0, 0)
const ORANGE_COLOR = Color(0.822, 0.318, 0.086)
const GREEN_COLOR = Color(0, 0.608, 0.172)
const STAM_BAR_MAX_OPACITY = 1.0
const CROSSHAIR_SIZE = Vector2(40,40)
var pickup_notifs = []
var can_spawn = true
var dir_clamped = Vector2.ZERO
#HUD WOBBLE
var offset_dir = Vector2.ZERO
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
# Get Viewport size
viewportWidth = get_viewport().size.x
viewportHeight = get_viewport().size.y
viewportCenter = Vector2(viewportWidth/2,viewportHeight/2)
SignalBus.player_hit.connect(player_hit)
SignalBus.shot_fired.connect(crosshair_size_change)
money_count = GameGlobals.money
@@ -62,77 +53,50 @@ func _ready() -> void:
crosshair_target = CROSSHAIR_SIZE
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:
# Crosshair
var velocity_adjust = clamp(player.velocity.length() * .1,1,3)
crosshair_target = lerp(crosshair_target,CROSSHAIR_SIZE,delta * 5)
crosshair.size = lerp(crosshair.size, crosshair_target * velocity_adjust,delta * 20)
crosshair.position = Vector2(viewportWidth/2,viewportHeight/2) + (crosshair.size/-2)
crosshair_center.position = Vector2(viewportWidth/2,viewportHeight/2) + (crosshair_center.scale * crosshair_center.size/-2)
stamina_bar.scale = (crosshair.size/CROSSHAIR_SIZE) * Vector2(.185,.185)
stamina_bar.position = Vector2(viewportWidth/2,viewportHeight/2) + (stamina_bar.scale * stamina_bar.size/-2)
#hide crosshair and ammo when no gun
if player.gun == null:
crosshair.visible = false
gun_info.visible = false
else:
crosshair.visible = true
gun_info.visible = true
#HEALTH
health_bar.value = GameGlobals.health
if GameGlobals.health <= 2:
change_color(health_bar,RED_COLOR,10,delta)
change_color(health_bar,ColorSwatch.RED_COLOR,10,delta)
health_bar.position = health_bar_start_pos + shake_element(15)
elif GameGlobals.health < ((level_control.gamemode.start_health / 2) + 1):
change_color(health_bar,ORANGE_COLOR,10,delta)
change_color(health_bar,ColorSwatch.ORANGE_COLOR,10,delta)
else:
change_color(health_bar,FULL_WHITE,10,delta)
change_color(health_bar,ColorSwatch.FULL_WHITE,10,delta)
#MONEY
if money_count < int(GameGlobals.money):
money_count += 1
change_color(money,GREEN_COLOR,10,delta)
change_color(money,ColorSwatch.GREEN_COLOR,10,delta)
elif money_count > int(GameGlobals.money):
change_color(money,RED_COLOR,10,delta)
change_color(money,ColorSwatch.RED_COLOR,10,delta)
money_count -= 1
else:
change_color(money,FULL_WHITE,10,delta)
change_color(money,ColorSwatch.FULL_WHITE,10,delta)
money.text = "$" + str(money_count)
if player.remaining_stamina/level_control.gamemode.max_stamina >= .99:
stam_bar_visible = false
else:
stam_bar_visible = true
current_stam_bar.value = player.remaining_stamina
if player.gun != null and player.gun.weapon_info.weapon_type == 0:
if GameGlobals.gun_ammo.has(player.gun.weapon_info.gun_name) and GameGlobals.gun_ammo[player.gun.weapon_info.gun_name] != null:
ammo_counter.visible = true
ammo_current.text = str(GameGlobals.gun_ammo[player.gun.weapon_info.gun_name]).pad_zeros(2)
lerp_color(ammo_current,RED_COLOR,FULL_WHITE,GameGlobals.gun_ammo[player.gun.weapon_info.gun_name],player.gun.weapon_info.max_ammo,.5)
lerp_color(ammo_current,ColorSwatch.RED_COLOR,ColorSwatch.FULL_WHITE,GameGlobals.gun_ammo[player.gun.weapon_info.gun_name],player.gun.weapon_info.max_ammo,.5)
else:
ammo_counter.visible = false
if GameGlobals.ammo_reserve.has(str(player.gun.weapon_info.bullet.ammo_type)):
ammo_reserve.text = str(GameGlobals.ammo_reserve[str(player.gun.weapon_info.bullet.ammo_type)]).pad_zeros(3)
lerp_color(ammo_reserve,RED_COLOR,FULL_WHITE,GameGlobals.ammo_reserve[str(player.gun.weapon_info.bullet.ammo_type)],player.gun.weapon_info.max_ammo*2,.5)
lerp_color(ammo_reserve,ColorSwatch.RED_COLOR,ColorSwatch.FULL_WHITE,GameGlobals.ammo_reserve[str(player.gun.weapon_info.bullet.ammo_type)],player.gun.weapon_info.max_ammo*2,.5)
else:
ammo_reserve.text = "-"
else:
fade_in_out(ammo_current,1,false,10,delta)
fade_in_out(ammo_reserve,1,false,10,delta)
fade_in_out(crosshair,1,false,10,delta)
if player.gun != null:
gun_name.text = player.gun.weapon_info.gun_name
gun_name.visible = true
@@ -140,12 +104,6 @@ func _process(delta: float) -> void:
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:
@@ -156,32 +114,11 @@ func _process(delta: float) -> void:
else:
interact_visible = false
if interact_visible == true:
change_color(crosshair,GREEN_COLOR,10,delta)
else:
change_color(crosshair,FULL_WHITE,10,delta)
if player.ads:
if player.gun != null:
if player.gun.weapon_info.ads:
fade_in_out(crosshair,1,false,5,delta)
fade_in_out(current_stam_bar,.001,true,5,delta)
else:
fade_in_out(crosshair,1,true,5,delta)
else:
fade_in_out(crosshair,1,true,5,delta)
## FADE ELEMENTS IN AND OUT
fade_in_out(current_stam_bar,STAM_BAR_MAX_OPACITY,stam_bar_visible,5,delta)
## SPAWN NOTIFICATIONS
spawn_notifs()
wobble_items.position = hud_wobble(delta)
func crosshair_size_change():
crosshair_target += Vector2(20,20)
wobble_items.position = hud_wobble(delta/Engine.time_scale)
func shake_element(amount):
@@ -224,12 +161,12 @@ func spawn_notifs():
can_spawn = true
func player_hit():
crosshair_size_change()
pass
func hud_wobble(delta):
var viewport_height_adj = (get_viewport().size.y/1080)
var HUD_WOBBLE_MAX : float = 4 * viewport_height_adj
var HUD_WOBBLE_MAX : float = 40 * viewport_height_adj
var MOUSE_AMT = 1 * viewport_height_adj
var VELOCITY_AMT = 100 * viewport_height_adj
var HUD_MOVE_SPEED = 1 * viewport_height_adj
@@ -241,9 +178,9 @@ func hud_wobble(delta):
var dir_velocity = Vector2(-velocity_dir_transformed.x * velocity_lengh_clamped,velocity_dir_transformed.y * velocity_lengh_clamped)
#add movement
dir_clamped += clamp(dir_mouse + dir_velocity,Vector2(-HUD_WOBBLE_MAX,-HUD_WOBBLE_MAX),Vector2(HUD_WOBBLE_MAX,HUD_WOBBLE_MAX))
offset_dir += dir_mouse + dir_velocity
#return to zero over time
dir_clamped = lerp(dir_clamped,Vector2.ZERO,delta * HUD_RETURN_SPEED)
offset_dir = lerp(offset_dir,Vector2.ZERO,delta * HUD_RETURN_SPEED)
#apply offset
return dir_clamped
return offset_dir