small racing game im working on
Diffstat (limited to 'classes/resources/track_obj.gd')
| -rw-r--r-- | classes/resources/track_obj.gd | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/classes/resources/track_obj.gd b/classes/resources/track_obj.gd new file mode 100644 index 0000000..eed57a7 --- /dev/null +++ b/classes/resources/track_obj.gd @@ -0,0 +1,79 @@ +extends Resource +class_name TrackObject + +var base_scene: int = -1 +var live_node: Block +var material: int +var walls: int +var transform: Transform3D +var link: WeakLink + +func _init(p_base: int, p_live: Node, p_link: WeakLink) -> void: + link = p_link + base_scene = p_base + set_live(p_live) + +func exprt() -> Dictionary: + save() + return { + m = material, + b = base_scene, + t = transform, + w = walls, + } + +static func from_d(d: Dictionary) -> TrackObject: + var o := TrackObject.new(d.b, null, null) + o.material = d.get("m", 0) + o.transform = d.t + o.walls = d.w + return o + +func save() -> void: + if is_instance_valid(live_node): + transform = live_node.transform + walls = live_node.has_walls() + material = live_node.mat + +func delete_live() -> void: + save() + live_node = null + +## [param p_live] may or may not be in the tree +func set_live(p_live: Block): + live_node = p_live + # we dont need these: this information should be transfered to the live node. + # but i pass around my tracks too much, and build them, that this will be a problem. + # material = null + # transform = Transform3D() + +## @constant +func create(is_editor := false) -> Node3D: + var node: Block = BlockMap.map[base_scene].instantiate() + node.editor = is_editor + node.global_transform = transform + node.ready.connect(node.make_walls.bind(walls)) + if material != 0: + node.ready.connect(node.set_mat.bind(material)) + return node + +## a more efficient [code]TrackObject.from_d(obj.exprt())[/code]. +func dup() -> TrackObject: + var tobj := TrackObject.new(base_scene, null, link) + save() + tobj.transform = transform + tobj.walls = walls + tobj.material = material + return tobj + +func name() -> String: + if link: + return link.resource_name + if is_instance_valid(live_node): + return live_node.name + if base_scene != -1: + return BlockMap.map[base_scene].resource_path.get_file().get_basename() + return "unnamed" + +func _to_string() -> String: + return "TrackObject<%s>" % name() |