Quaternius weapons, input fixes, sound & path fixes
- Added 6 Quaternius weapon models (Pistol, Revolver, Rifle, Shotgun, P90, SniperRifle) - Created weapon resource files with balanced stats - Wired Pistol + Rifle into player.tscn replacing Kenney blasters - Fixed WASD input (matched input map action names) - Fixed Escape key toggles mouse capture - Added Audio autoload singleton - Fixed broken sound asset paths across all scripts - Fixed all scene ext_resource text paths (nested under assets/kenney-fps/) - Fixed all .import source_file paths - Deleted stale .import files (will be regenerated by editor on open)
This commit is contained in:
@@ -26,6 +26,7 @@ var _pending_grenades: Array[Dictionary] = [] # Buffered throws, consumed in _a
|
||||
|
||||
# Weapon models (loaded at runtime)
|
||||
var _knife_model: Node3D
|
||||
var _pistol_model: Node3D
|
||||
var _gun_model: Node3D
|
||||
var _grenade_model: Node3D
|
||||
var _current_visible_slot: int = -1
|
||||
@@ -40,17 +41,61 @@ func _ready():
|
||||
_load_weapon_models()
|
||||
|
||||
func _load_weapon_models():
|
||||
# Knife model
|
||||
var knife_scene := load("res://examples/multiplayer-fps/models/knife.fbx") as PackedScene
|
||||
if knife_scene:
|
||||
_knife_model = knife_scene.instantiate()
|
||||
_knife_model.scale = Vector3(0.003, 0.003, 0.003)
|
||||
_knife_model.position = Vector3(0.15, -0.22, -0.35)
|
||||
_knife_model.rotation_degrees = Vector3(-90, 180, 0)
|
||||
add_child(_knife_model)
|
||||
# Weapon models from Quaternius FPS Pack — GLB format, reliable import
|
||||
|
||||
# Slot 0 (melee) + Slot 1 (pistol): Use Quaternius Pistol model
|
||||
var pistol_scene := load("res://assets/quaternius/models/Pistol.glb") as PackedScene
|
||||
if pistol_scene:
|
||||
# Slot 0: small pistol as melee visual
|
||||
var knife = pistol_scene.instantiate()
|
||||
knife.scale = Vector3(0.35, 0.35, 0.35)
|
||||
knife.position = Vector3(0.08, -0.18, -0.28)
|
||||
knife.rotation_degrees = Vector3(-90, 180, 0)
|
||||
add_child(knife)
|
||||
_knife_model = knife
|
||||
_knife_model.hide()
|
||||
|
||||
# Slot 1: same pistol model, slightly different position
|
||||
var pistol = pistol_scene.instantiate()
|
||||
pistol.scale = Vector3(0.35, 0.35, 0.35)
|
||||
pistol.position = Vector3(0.08, -0.18, -0.28)
|
||||
pistol.rotation_degrees = Vector3(-90, 180, 0)
|
||||
add_child(pistol)
|
||||
_pistol_model = pistol
|
||||
_pistol_model.hide()
|
||||
else:
|
||||
print("[WM] Pistol model not available — using placeholder")
|
||||
for slot in [0, 1]:
|
||||
var box := MeshInstance3D.new()
|
||||
box.mesh = BoxMesh.new()
|
||||
box.mesh.size = Vector3(0.3, 0.05, 0.02)
|
||||
box.position = Vector3(0.15, -0.22, -0.35)
|
||||
box.rotation_degrees = Vector3(-90, 0, 0)
|
||||
add_child(box)
|
||||
if slot == 0:
|
||||
_knife_model = box
|
||||
else:
|
||||
_pistol_model = box
|
||||
box.hide()
|
||||
|
||||
# Grenade model
|
||||
# Slot 2 (primary rifle): Use Quaternius Rifle model
|
||||
var rifle_scene := load("res://assets/quaternius/models/Rifle.glb") as PackedScene
|
||||
if not rifle_scene:
|
||||
rifle_scene = load("res://assets/quaternius/models/P90.glb") as PackedScene
|
||||
if rifle_scene:
|
||||
var rifle = rifle_scene.instantiate()
|
||||
rifle.scale = Vector3(0.35, 0.35, 0.35)
|
||||
rifle.position = Vector3(0.06, -0.16, -0.25)
|
||||
rifle.rotation_degrees = Vector3(-90, 180, 0)
|
||||
add_child(rifle)
|
||||
if _gun_model:
|
||||
_gun_model.hide()
|
||||
_gun_model = rifle
|
||||
_gun_model.hide()
|
||||
else:
|
||||
print("[WM] Rifle model not available — using placeholder TinyGun")
|
||||
|
||||
# Grenade model (keep existing)
|
||||
var grenade_scene := load("res://examples/multiplayer-fps/models/grenade.glb") as PackedScene
|
||||
if grenade_scene:
|
||||
_grenade_model = grenade_scene.instantiate()
|
||||
@@ -59,21 +104,7 @@ func _load_weapon_models():
|
||||
add_child(_grenade_model)
|
||||
_grenade_model.hide()
|
||||
|
||||
# Gun model — replace placeholder box with Kenney blaster
|
||||
var gun_scene := load("res://assets/kenney/models/blaster.glb") as PackedScene
|
||||
if gun_scene:
|
||||
var blaster = gun_scene.instantiate()
|
||||
blaster.scale = Vector3(0.003, 0.003, 0.003)
|
||||
blaster.position = Vector3(0.09, -0.18, -0.3)
|
||||
blaster.rotation_degrees = Vector3(-90, 180, 0)
|
||||
add_child(blaster)
|
||||
# Hide the old box mesh, use blaster instead
|
||||
if _gun_model:
|
||||
_gun_model.hide()
|
||||
_gun_model = blaster
|
||||
_gun_model.hide()
|
||||
|
||||
# Knife sound
|
||||
# Knife slash sound
|
||||
var slash_stream := load("res://examples/multiplayer-fps/sounds/knife/knife_slash1.wav")
|
||||
if slash_stream:
|
||||
_knife_sound = AudioStreamPlayer3D.new()
|
||||
@@ -87,14 +118,18 @@ func _process(_delta: float):
|
||||
_current_visible_slot = active_slot
|
||||
if _knife_model:
|
||||
_knife_model.visible = (active_slot == 0)
|
||||
if _pistol_model:
|
||||
_pistol_model.visible = (active_slot == 1)
|
||||
if _gun_model:
|
||||
_gun_model.visible = (active_slot == 1 or active_slot == 2)
|
||||
_gun_model.visible = (active_slot == 2)
|
||||
if _grenade_model:
|
||||
_grenade_model.visible = (active_slot == 3)
|
||||
|
||||
func hide_weapons():
|
||||
if _knife_model:
|
||||
_knife_model.hide()
|
||||
if _pistol_model:
|
||||
_pistol_model.hide()
|
||||
if _gun_model:
|
||||
_gun_model.hide()
|
||||
if _grenade_model:
|
||||
@@ -104,6 +139,12 @@ func hide_weapons():
|
||||
func show_weapons():
|
||||
_current_visible_slot = -1 # Force refresh on next _process
|
||||
|
||||
# Debug helpers for window title
|
||||
func has_knife_model() -> bool:
|
||||
return _knife_model != null
|
||||
func has_gun_model() -> bool:
|
||||
return _gun_model != null
|
||||
|
||||
func get_active_weapon() -> WeaponData:
|
||||
var wid := inventory[active_slot]
|
||||
if wid == 0:
|
||||
|
||||
Reference in New Issue
Block a user