class_name CarVars
extends Resource
# 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)
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]])
## 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(CarVars.vec2arr(from.wheels[i].position))
return arr