Start Hitscan & add Crosshair shader
This commit is contained in:
@@ -8,8 +8,6 @@ const RELOAD = 3
|
||||
|
||||
const DRAW_TIME = 0.35
|
||||
|
||||
#TODO: Load gun config from file
|
||||
|
||||
var MAX_CLIP : int
|
||||
var DAMAGE : float
|
||||
var MOMENTUM : Vector2
|
||||
@@ -20,10 +18,12 @@ var DRAW_POS : Vector3
|
||||
var DRAW_ROT : Vector3
|
||||
var MODEL : Node3D
|
||||
var FIREMODE : int
|
||||
var HITSCAN : bool
|
||||
var RAY_LEN : float = 1000
|
||||
|
||||
var SHOOTING_SPEED: float
|
||||
var can_shoot : bool
|
||||
var clip = 444444
|
||||
var clip : int
|
||||
var state = DEFAULT
|
||||
|
||||
func init():
|
||||
@@ -51,7 +51,7 @@ func InitialPos():
|
||||
|
||||
|
||||
func Shoot():
|
||||
if clip > 0 && state == INITIAL && can_shoot:
|
||||
if CanShoot():
|
||||
if !FIREMODE:
|
||||
can_shoot = false
|
||||
clip -= 1
|
||||
@@ -68,6 +68,9 @@ func Shoot():
|
||||
return true
|
||||
return false
|
||||
|
||||
func CanShoot():
|
||||
return clip > 0 && state == INITIAL && can_shoot
|
||||
|
||||
func Release():
|
||||
if !FIREMODE:
|
||||
can_shoot = true
|
||||
@@ -75,7 +78,7 @@ func Release():
|
||||
|
||||
func Reload():
|
||||
if(clip < MAX_CLIP && state == INITIAL):
|
||||
state = RELOAD
|
||||
|
||||
#state = RELOAD
|
||||
clip = MAX_CLIP
|
||||
return true
|
||||
return false
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user