Start Hitscan & add Crosshair shader

This commit is contained in:
2022-12-06 14:02:22 +01:00
parent 825d86f271
commit 6bc2b07ab6
7 changed files with 123 additions and 30 deletions

View File

@@ -9,6 +9,7 @@ const BOB = 1
var state = 0
@onready var player_root = get_node("../../../../PlayerQ3") as CharacterBody3D
@onready var raycast = get_node("../Camera3D/AimCast") as RayCast3D
var weapons = []
@@ -27,19 +28,14 @@ var file_data = {
"RECOIL_COOLDOWN": 0.35,
"RPM": 120,
"DRAW_POS": Vector3(0,-0.5,-0.3),
"DRAW_ROT": Vector3(1.3, 0, 0)
"DRAW_ROT": Vector3(1.3, 0, 0),
"HITSCAN": true
}
}
var mouse_mov : Vector3
var sway_threshold = 5
var sway_lerp = 5
@export var sway_left : Vector3
@export var sway_right : Vector3
@export var sway_normal : Vector3
func _ready():
save_data(file_data)
load_data()
@@ -50,12 +46,17 @@ func _ready():
var resource = "res://scenes/weapons/" + file_data[i].MODEL + ".tscn"
var weapon_model_resource = load(resource)
var weapon_model = weapon_model_resource.instantiate()
#Set Weapon nodes
root.add_child(weapon_model)
root.position = file_data[i].HAND_POS
root.rotation = file_data[i].HAND_ROT
root.hide()
add_child(root)
#Set Weapon Data
root.MAX_CLIP = file_data[i].MAX_CLIP
root.clip = root.MAX_CLIP
root.DAMAGE = file_data[i].DAMAGE
root.MOMENTUM = file_data[i].MOMENTUM
root.ANGULAR_MOMENTUM = file_data[i].ANGULAR_MOMENTUM
@@ -64,8 +65,14 @@ func _ready():
root.MODEL = root.get_node(file_data[i].MODEL)
root.DRAW_POS = file_data[i].DRAW_POS
root.DRAW_ROT = file_data[i].DRAW_ROT
root.HITSCAN = file_data[i].HITSCAN
if(not root.HITSCAN):
print("Projectile stats")
weapons.append(root)
weapons[current_weapon].init()
raycast.target_position.z = -weapons[current_weapon].RAY_LEN
func _input(event):
if event is InputEventMouseMotion:
@@ -75,21 +82,31 @@ func _input(event):
func _unhandled_input(_event):
if weapons.size() > 1 && Input.is_action_just_released("wheel_up"):
weapons[current_weapon].hide()
current_weapon = (current_weapon + 1) % weapons.size()
weapons[current_weapon].init()
ChangeWeapon((current_weapon + 1) % weapons.size())
if weapons.size() > 1 && Input.is_action_just_released("wheel_down"):
weapons[current_weapon].hide()
current_weapon = (current_weapon - 1) % weapons.size()
weapons[current_weapon].init()
ChangeWeapon((current_weapon - 1) % weapons.size())
if Input.is_action_just_pressed("reload"):
weapons[current_weapon].Reload()
func ChangeWeapon(i):
weapons[current_weapon].hide()
current_weapon = (i)
weapons[current_weapon].init()
raycast.target_position.z = -weapons[current_weapon].RAY_LEN
var time = 0
func _process(delta):
if Input.is_action_pressed("shoot"):
weapons[current_weapon].Shoot()
if Input.is_action_pressed("shoot") && weapons[current_weapon].Shoot():
if(weapons[current_weapon].HITSCAN):
HitScan()
else:
Projectile()
if Input.is_action_just_released("shoot"):
weapons[current_weapon].Release()
#SWAY
if mouse_mov != null && mouse_mov.length() > 0:
weapons[current_weapon].MODEL.rotation = weapons[current_weapon].MODEL.rotation.lerp(mouse_mov, sway_lerp * delta)
@@ -104,12 +121,15 @@ func _process(delta):
position.y = bobOscillate
bobOscillate = sin(time * 4 * (PI) + PI/4) * 0.015
position.x = bobOscillate
#else:
#position = lerp(position, Vector3.ZERO, )
func HitScan():
if(raycast.is_colliding()):
var target = raycast.get_collider()
print("Hit target ", target.name)
func Projectile():
pass
func save_data(data):
var file = FileAccess.open(CONFIG_PATH, FileAccess.WRITE)