small racing game im working on
Diffstat (limited to 'classes/resources/car_vars.gd')
-rw-r--r--classes/resources/car_vars.gd93
1 files changed, 55 insertions, 38 deletions
diff --git a/classes/resources/car_vars.gd b/classes/resources/car_vars.gd
index 5d30dcb..fb788ba 100644
--- a/classes/resources/car_vars.gd
+++ b/classes/resources/car_vars.gd
@@ -1,43 +1,60 @@
class_name CarVars
extends Resource
-var throttle: float
-var brake: float
-var steering: float
-var engine_force: float
-var engine_rpm: float
-var wheel_rpm: float
-var wheel_skidinfo: Array
-var wheel_contact: Array
-var wheel_position: Array
-var current_gear: int
-var position: Vector3
-var rotation: Vector3
-var kph: float
+# index value usage
+# 0 1 throttle
+# 1 0 brake
+# 2 0.1 steering
+# 3 0, engine force
+# 4 800 engine rpm
+# 5 0 wheel rpm
+# 6 0 kilometers per hour
+# 7 1 gear
+# 8 498 position x
+# .. ... ...
+# 11 0 rotation x
+# .. ... ...
+# 14 1 skid on wheel 0
+# .. ... ...
+# 18 1 contact on wheel
+# ..
+# 22 -1.20 position x of wheel 0
+# ..
+# 33 -1.51 postiion z of wheel 4
+enum {THROTTLE,BRAKE,STEERING,ENGINE_FORCE,ENGINE_RPM,WHEEL_RPM,KPH,CURRENT_GEAR} # arr[n]
+const POSITION = 8 # arr2vec(pos)
+const ROTATION = 11 # arr2vec(rot)
+const SKID_START = 14 # arr[wheel index + skid start] = wheel skid
+const CONTACT_START = 18 # arr[wi + cs] = ws
+const WHEEL_POSITION_START = 22 # arr2vec(arr, (wi * 3) + ps)
-func _init(from: Car) -> void:
- throttle = from.throttle
- brake = from.brake
- steering = from.steering
- engine_force = from.engine_force
- engine_rpm = from.engine_rpm
- position = from.global_position
- rotation = from.global_rotation
- wheel_rpm = from.wheel_rpm
- current_gear = from.current_gear
- for i in from.wheels.size():
- var wheel := from.wheels[i]
- wheel_skidinfo.append(wheel.get_skidinfo())
- wheel_contact.append(wheel.is_in_contact())
- wheel_position.append(wheel.position)
- kph = from.kph()
+static func _arr2vec(arr: PackedFloat32Array) -> Vector3:
+ return Vector3(arr[0],arr[1],arr[2])
+
+static func arr2vec(arr: PackedFloat32Array, position: int) -> Vector3:
+ return _arr2vec(arr.slice(position, position + 3))
+
+static func vec2arr(vec: Vector3) -> PackedFloat32Array:
+ return PackedFloat32Array([vec[0],vec[1],vec[2]])
-func to_dict(): # RIP memory
- return {
- throttle = throttle, brake = brake, steering = steering,
- engine_force = engine_force, engine_rpm = engine_rpm,
- position = position, rotation = rotation, kph = kph,
- wheel_skidinfo = wheel_skidinfo, wheel_contact = wheel_contact,
- wheel_position = wheel_position, current_gear = current_gear,
- wheel_rpm = wheel_rpm
- }
+## 106B with ZSTD compression (144B without)
+static func create(from: Car) -> PackedFloat32Array:
+ var arr := PackedFloat32Array([
+ snappedf(from.throttle, .1),
+ snappedf(from.brake, .1),
+ snappedf(from.steering, .1),
+ snappedf(from.engine_force, .5),
+ snappedf(from.engine_rpm, .5),
+ snappedf(from.wheel_rpm, .1),
+ snappedf(from.kph(), .5),
+ from.current_gear,
+ ])
+ arr.append_array(vec2arr(from.global_position))
+ arr.append_array(vec2arr(from.global_rotation))
+ for i in from.wheels.size():
+ arr.append(snappedf(from.wheels[i].get_skidinfo(), .1))
+ for i in from.wheels.size():
+ arr.append(int(from.wheels[i].is_in_contact()))
+ for i in from.wheels.size():
+ arr.append_array(vec2arr(from.wheels[i].position))
+ return arr