fix weapon draw bug

This commit is contained in:
2023-01-03 23:16:05 +01:00
parent b5286a5f54
commit b2b82271f7
4 changed files with 22 additions and 24 deletions

View File

@@ -1,5 +1,4 @@
extends Node3D extends Node3D
class_name Game
@onready var label : Label = $CanvasLayer/Label @onready var label : Label = $CanvasLayer/Label
@onready var player : CharacterBody3D = $PlayerQ3 @onready var player : CharacterBody3D = $PlayerQ3

View File

@@ -9,11 +9,6 @@
config_version=5 config_version=5
_global_script_classes=[{ _global_script_classes=[{
"base": "Node3D",
"class": &"Game",
"language": &"GDScript",
"path": "res://Game.gd"
}, {
"base": "Node", "base": "Node",
"class": &"Hitable", "class": &"Hitable",
"language": &"GDScript", "language": &"GDScript",
@@ -30,7 +25,6 @@ _global_script_classes=[{
"path": "res://scripts/player/Weapon.gd" "path": "res://scripts/player/Weapon.gd"
}] }]
_global_script_class_icons={ _global_script_class_icons={
"Game": "",
"Hitable": "", "Hitable": "",
"TBPlugin": "", "TBPlugin": "",
"Weapon": "" "Weapon": ""

View File

@@ -29,28 +29,34 @@ var SHOOTING_SPEED: float
var can_shoot : bool var can_shoot : bool
var clip : int var clip : int
var state = DEFAULT var state = DEFAULT
var tween : Tween
func stop_tween():
if(tween.is_running()):
tween.stop()
func init(): func init():
visible = true state = DEFAULT
SHOOTING_SPEED = 60.0 / RPM SHOOTING_SPEED = 60.0 / RPM
var tween = create_tween() if(tween != null && tween.is_running()):
tween.stop()
MODEL.position = DRAW_POS MODEL.position = DRAW_POS
MODEL.rotation = DRAW_ROT MODEL.rotation = DRAW_ROT
can_shoot = true can_shoot = true
tween.tween_callback(InitialPos).set_delay(DRAW_TIME) InitialPos(DRAW_TIME, DRAW_TIME)
func InitialPos(): func InitialPos(draw_time, ready_time):
var tween = create_tween() tween = create_tween()
tween.set_trans(Tween.TRANS_QUAD) tween.set_trans(Tween.TRANS_QUAD)
tween.set_parallel(true) tween.set_parallel(true)
tween.tween_property(MODEL, "position", Vector3.ZERO, RECOIL_COOLDOWN / 2) tween.tween_property(MODEL, "position", Vector3.ZERO, draw_time)
tween.tween_property(MODEL, "rotation", Vector3.ZERO, RECOIL_COOLDOWN / 2) tween.tween_property(MODEL, "rotation", Vector3.ZERO, draw_time)
tween.tween_callback(func(): state = INITIAL).set_delay(SHOOTING_SPEED / 2) tween.tween_callback(func(): state = INITIAL).set_delay(ready_time)
@@ -62,7 +68,7 @@ func Shoot():
clip -= 1 clip -= 1
state = SHOOT; state = SHOOT;
var tween = create_tween() tween = create_tween()
tween.set_trans(Tween.TRANS_ELASTIC) tween.set_trans(Tween.TRANS_ELASTIC)
tween.set_ease(Tween.EASE_OUT) tween.set_ease(Tween.EASE_OUT)
tween.set_parallel(true) tween.set_parallel(true)
@@ -70,7 +76,7 @@ func Shoot():
var rand_rot_y = randf_range(-ANGULAR_MOMENTUM.y,ANGULAR_MOMENTUM.y) var rand_rot_y = randf_range(-ANGULAR_MOMENTUM.y,ANGULAR_MOMENTUM.y)
var rand_rot_z = randf_range(-ANGULAR_MOMENTUM.z,ANGULAR_MOMENTUM.z) var rand_rot_z = randf_range(-ANGULAR_MOMENTUM.z,ANGULAR_MOMENTUM.z)
tween.tween_property(MODEL, "rotation", Vector3(deg_to_rad(ANGULAR_MOMENTUM.x),deg_to_rad(rand_rot_y),deg_to_rad(rand_rot_z)),RECOIL_COOLDOWN /2) tween.tween_property(MODEL, "rotation", Vector3(deg_to_rad(ANGULAR_MOMENTUM.x),deg_to_rad(rand_rot_y),deg_to_rad(rand_rot_z)),RECOIL_COOLDOWN /2)
tween.tween_callback(InitialPos).set_delay(SHOOTING_SPEED / 2) tween.tween_callback(func(): InitialPos(RECOIL_COOLDOWN / 2, SHOOTING_SPEED / 2)).set_delay(SHOOTING_SPEED / 2)
return true return true
return false return false
@@ -85,7 +91,7 @@ func Release():
func Reload(): func Reload():
if(clip < MAX_CLIP && state == INITIAL): if(clip < MAX_CLIP && state == INITIAL):
state = RELOAD state = RELOAD
var tween = create_tween() tween = create_tween()
tween.set_trans(Tween.TRANS_CIRC) tween.set_trans(Tween.TRANS_CIRC)
tween.set_ease(Tween.EASE_IN) tween.set_ease(Tween.EASE_IN)
tween.set_parallel(true) tween.set_parallel(true)

View File

@@ -1,9 +1,7 @@
extends Node3D extends Node3D
const CONFIG_PATH = "weapons.cfg" const CONFIG_PATH = "weapons.cfg"
const REVOLVER = 0 signal shoot
const UZI = 1
const CHAINSAW = 2
var state = 0 var state = 0
@onready var player_root = get_node("../../../../PlayerQ3") as CharacterBody3D @onready var player_root = get_node("../../../../PlayerQ3") as CharacterBody3D
@@ -26,8 +24,7 @@ func init():
return return
Init_Config(config) Init_Config(config)
weapons[current_weapon].init() ChangeWeapon(0)
raycast.target_position.z = -weapons[current_weapon].RAY_LEN
func Init_Config(config): func Init_Config(config):
for weapon in config.get_sections(): for weapon in config.get_sections():
@@ -96,12 +93,14 @@ func _unhandled_input(_event):
func ChangeWeapon(i): func ChangeWeapon(i):
weapons[current_weapon].hide() weapons[current_weapon].hide()
current_weapon = i current_weapon = i
weapons[current_weapon].show()
weapons[current_weapon].init() weapons[current_weapon].init()
raycast.target_position.z = -weapons[current_weapon].RAY_LEN raycast.target_position.z = -weapons[current_weapon].RAY_LEN
var time = 0 var time = 0
func _process(delta): func _process(delta):
if Input.is_action_pressed("shoot") && weapons[current_weapon].Shoot(): if Input.is_action_pressed("shoot") && weapons[current_weapon].Shoot():
shoot.emit(0.20, 0.15)
if(weapons[current_weapon].HITSCAN): if(weapons[current_weapon].HITSCAN):
HitScan() HitScan()
else: else: