small racing game im working on
Diffstat (limited to 'classes/resources/car_vars.gd')
| -rw-r--r-- | classes/resources/car_vars.gd | 93 |
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 |