small racing game im working on
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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(vec2arr(from.wheels[i].position))
	return arr