small racing game im working on
Diffstat (limited to 'classes/ai_car.gd')
| -rw-r--r-- | classes/ai_car.gd | 98 |
1 files changed, 49 insertions, 49 deletions
diff --git a/classes/ai_car.gd b/classes/ai_car.gd index 5c93fc9..d7e0361 100644 --- a/classes/ai_car.gd +++ b/classes/ai_car.gd @@ -1,52 +1,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) +# 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) |