32 lines
1.3 KiB
GDScript
32 lines
1.3 KiB
GDScript
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)
|