Files
Blockline/scripts/soviet_weapons.gd
T

32 lines
1.3 KiB
GDScript
Raw Normal View History

2026-09-12 11:01:37 +02:00
class_name SovietWeapons
extends RefCounted
const MODELS := {0:"ak47",1:"ppsh41",4:"makarov",5:"sks",7:"ak47",8:"ppsh41"}
static func build(index: int) -> Node3D:
var id: String = MODELS[index]
var model := (load("res://assets/soviet/%s.tscn" % id) as PackedScene).instantiate() as Node3D
model.name = "WeaponModel"
model.set_meta("weapon_index",index)
model.set_meta("soviet_model",id)
return model
static func variant(model: Node3D, design: Dictionary) -> void:
if int(model.get_meta("weapon_index",0)) != 4: return
var id := "tokarev" if design.get("soviet_variant",0) == 1 else "makarov"
if model.get_meta("soviet_model","") == id: return
var replacement := (load("res://assets/soviet/%s.tscn" % id) as PackedScene).instantiate() as Node3D
for part in ["Frame","Magazine","Bolt"]:
var target := model.get_node(part)
for child in target.get_children():
target.remove_child(child)
child.queue_free()
for child in replacement.get_node(part).get_children():
clear_owner(child)
child.reparent(target,false)
model.get_node("Muzzle").position = replacement.get_node("Muzzle").position
model.set_meta("soviet_model",id)
replacement.free()
static func clear_owner(node: Node) -> void:
node.owner = null
for child in node.get_children(): clear_owner(child)