diff --git a/Game.gd b/Game.gd index 84e7575..4e9a9e3 100644 --- a/Game.gd +++ b/Game.gd @@ -1,5 +1,4 @@ extends Node3D -class_name Game @onready var label : Label = $CanvasLayer/Label @onready var player : CharacterBody3D = $PlayerQ3 diff --git a/project.godot b/project.godot index 8336fd1..6222398 100644 --- a/project.godot +++ b/project.godot @@ -9,11 +9,6 @@ config_version=5 _global_script_classes=[{ -"base": "Node3D", -"class": &"Game", -"language": &"GDScript", -"path": "res://Game.gd" -}, { "base": "Node", "class": &"Hitable", "language": &"GDScript", @@ -30,7 +25,6 @@ _global_script_classes=[{ "path": "res://scripts/player/Weapon.gd" }] _global_script_class_icons={ -"Game": "", "Hitable": "", "TBPlugin": "", "Weapon": "" diff --git a/scripts/player/Weapon.gd b/scripts/player/Weapon.gd index ee3c182..06b85e7 100644 --- a/scripts/player/Weapon.gd +++ b/scripts/player/Weapon.gd @@ -29,28 +29,34 @@ var SHOOTING_SPEED: float var can_shoot : bool var clip : int var state = DEFAULT +var tween : Tween + +func stop_tween(): + if(tween.is_running()): + tween.stop() func init(): - visible = true + state = DEFAULT SHOOTING_SPEED = 60.0 / RPM - var tween = create_tween() + if(tween != null && tween.is_running()): + tween.stop() + MODEL.position = DRAW_POS MODEL.rotation = DRAW_ROT - can_shoot = true - tween.tween_callback(InitialPos).set_delay(DRAW_TIME) + InitialPos(DRAW_TIME, DRAW_TIME) -func InitialPos(): - var tween = create_tween() +func InitialPos(draw_time, ready_time): + tween = create_tween() tween.set_trans(Tween.TRANS_QUAD) tween.set_parallel(true) - tween.tween_property(MODEL, "position", Vector3.ZERO, RECOIL_COOLDOWN / 2) - tween.tween_property(MODEL, "rotation", Vector3.ZERO, RECOIL_COOLDOWN / 2) - tween.tween_callback(func(): state = INITIAL).set_delay(SHOOTING_SPEED / 2) + tween.tween_property(MODEL, "position", Vector3.ZERO, draw_time) + tween.tween_property(MODEL, "rotation", Vector3.ZERO, draw_time) + tween.tween_callback(func(): state = INITIAL).set_delay(ready_time) @@ -62,7 +68,7 @@ func Shoot(): clip -= 1 state = SHOOT; - var tween = create_tween() + tween = create_tween() tween.set_trans(Tween.TRANS_ELASTIC) tween.set_ease(Tween.EASE_OUT) 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_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_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 false @@ -85,7 +91,7 @@ func Release(): func Reload(): if(clip < MAX_CLIP && state == INITIAL): state = RELOAD - var tween = create_tween() + tween = create_tween() tween.set_trans(Tween.TRANS_CIRC) tween.set_ease(Tween.EASE_IN) tween.set_parallel(true) diff --git a/scripts/player/Weapons.gd b/scripts/player/Weapons.gd index 95af79c..54e69e3 100644 --- a/scripts/player/Weapons.gd +++ b/scripts/player/Weapons.gd @@ -1,9 +1,7 @@ extends Node3D const CONFIG_PATH = "weapons.cfg" -const REVOLVER = 0 -const UZI = 1 -const CHAINSAW = 2 +signal shoot var state = 0 @onready var player_root = get_node("../../../../PlayerQ3") as CharacterBody3D @@ -26,8 +24,7 @@ func init(): return Init_Config(config) - weapons[current_weapon].init() - raycast.target_position.z = -weapons[current_weapon].RAY_LEN + ChangeWeapon(0) func Init_Config(config): for weapon in config.get_sections(): @@ -96,12 +93,14 @@ func _unhandled_input(_event): func ChangeWeapon(i): weapons[current_weapon].hide() current_weapon = i + weapons[current_weapon].show() 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(): + shoot.emit(0.20, 0.15) if(weapons[current_weapon].HITSCAN): HitScan() else: