small racing game im working on
Diffstat (limited to 'classes/trackdata.gd')
| -rw-r--r-- | classes/trackdata.gd | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/classes/trackdata.gd b/classes/trackdata.gd new file mode 100644 index 0000000..d516097 --- /dev/null +++ b/classes/trackdata.gd @@ -0,0 +1,41 @@ +class_name TrackSaveableData +extends RefCounted + +const SaveLoad := preload("res://addons/@bendn/remap/private/SaveLoadUtils.gd") + +var time: float +var checkpoints: PackedFloat32Array +var positional := { + origins = PackedVector3Array(), + rotations = PackedVector3Array() +} + +func data() -> Dictionary: + return ({time = time, checkpoints = checkpoints, positional = positional}) + +func _init(num_checkpoints: int) -> void: + checkpoints.resize(num_checkpoints) + checkpoints.fill(-1) + +func collect(cp: int, now: float) -> void: + if cp == -1: # fin + time = now + else: + checkpoints[cp] = now + +func snapshot(obj: Node3D) -> void: + positional.origins.append(obj.global_position) + positional.rotations.append(obj.global_rotation) + +static func from_d(d: Dictionary) -> TrackSaveableData: + var obj := TrackSaveableData.new(0) + obj.checkpoints = d.get("checkpoints", []) + obj.time = d.get("time", -1) + obj.positional = d.get("positional", {origins = null, rotations = null}) + return obj + +static func _load(path: String) -> TrackSaveableData: + var res := SaveLoad.load_file(path) + if res.is_empty(): + return null + return TrackSaveableData.from_d(res) |