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
extends Car
class_name AICar

# const num_rays := 32
# const look_ahead := 40.0
# const hidden_nodes := 17
# const output_nodes := 3

# var rays: Array[RayCast3D]
# var nn: NeuralNetwork


# func _ready():
# 	super()
# 	randomize()
# 	engine_force *= randf_range(0.8, 1)
# 	add_rays()
# 	# +1 for speed
# 	nn = NeuralNetwork.new(num_rays + 1, hidden_nodes, output_nodes)


# func add_rays():
# 	var n: float = 2 * PI / num_rays
# 	var ray_holder := $CarMesh/ContextRays
# 	for i in num_rays:
# 		var r := RayCast3D.new()
# 		ray_holder.add_child(r)
# 		r.target_position = Vector3.FORWARD * look_ahead
# 		r.rotation.y = (-n * i)
# 		rays.append(r)


# func get_distances() -> Array[float]:
# 	var distances: Array[float] = []
# 	for i in num_rays:
# 		var distance: float = 1.0
# 		if rays[i].is_colliding():
# 			var raycast_length: float = rays[i].target_position.y
# 			var collision: Vector3 = rays[i].get_collision_point()
# 			distance = rays[i].global_transform.origin.distance_to(collision) / raycast_length
# 		distances.append(distance)
# 	return distances

# func _physics_process(delta: float) -> void:
# 	var distances := get_distances()
# 	distances.append(kph())
# 	var outputs := nn.predict(distances) # [steer_l, throt, steer_r]
# 	print(outputs)
# 	# var steer_target = (outputs[0] - outputs[2]) * max_steering_range
# 	# throttle = acceleration * outputs[1]
# 	steer(steer_target)
# 	super(delta)