Add experimental road generation (generated by deepseek)
This commit is contained in:
parent
7958bd288f
commit
5bf9ea473c
8 changed files with 97 additions and 1 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
[gd_scene load_steps=8 format=3 uid="uid://d4ljkc7l57udr"]
|
[gd_scene load_steps=9 format=3 uid="uid://d4ljkc7l57udr"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://r1q4xvfbrc7l" path="res://scenes/roadmanager.tscn" id="1_lbhrr"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dtncvl5af4fhr" path="res://objects/road.glb" id="1_uwrxv"]
|
[ext_resource type="PackedScene" uid="uid://dtncvl5af4fhr" path="res://objects/road.glb" id="1_uwrxv"]
|
||||||
[ext_resource type="Script" uid="uid://cs0y5pe8qnj2r" path="res://scripts/player.gd" id="2_lnu2h"]
|
[ext_resource type="Script" uid="uid://cs0y5pe8qnj2r" path="res://scripts/player.gd" id="2_lnu2h"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cewenjpq8wbig" path="res://objects/testcar.glb" id="2_yqjtg"]
|
[ext_resource type="PackedScene" uid="uid://cewenjpq8wbig" path="res://objects/testcar.glb" id="2_yqjtg"]
|
||||||
|
|
@ -23,6 +24,10 @@ size = Vector3(3.60051, 2.21851, 1.87103)
|
||||||
|
|
||||||
[node name="Game" type="Node3D"]
|
[node name="Game" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="Node3D" parent="." instance=ExtResource("1_lbhrr")]
|
||||||
|
|
||||||
|
[node name="RoadManager" parent="." instance=ExtResource("1_lbhrr")]
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_iywne")
|
environment = SubResource("Environment_iywne")
|
||||||
|
|
||||||
|
|
|
||||||
17
scenes/road.tscn
Normal file
17
scenes/road.tscn
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
[gd_scene load_steps=3 format=3 uid="uid://bl4v7fq6p7evj"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dtncvl5af4fhr" path="res://objects/road.glb" id="1_mv8x7"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_1s9f8"]
|
||||||
|
size = Vector3(20, 10, 20)
|
||||||
|
|
||||||
|
[node name="Road" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="RoadObject" parent="." instance=ExtResource("1_mv8x7")]
|
||||||
|
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0)
|
||||||
|
|
||||||
|
[node name="DespawnArea" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="DespawnArea"]
|
||||||
|
shape = SubResource("BoxShape3D_1s9f8")
|
||||||
6
scenes/roadmanager.tscn
Normal file
6
scenes/roadmanager.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://r1q4xvfbrc7l"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://bkbm887f6xqpi" path="res://scripts/road_manager.gd" id="1_r1qkb"]
|
||||||
|
|
||||||
|
[node name="RoadManager" type="Node3D"]
|
||||||
|
script = ExtResource("1_r1qkb")
|
||||||
|
|
@ -8,6 +8,9 @@ extends CharacterBody3D
|
||||||
|
|
||||||
var current_speed: float = 0.0
|
var current_speed: float = 0.0
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
add_to_group("player")
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
# Apply gravity
|
# Apply gravity
|
||||||
if not is_on_floor():
|
if not is_on_floor():
|
||||||
|
|
|
||||||
18
scripts/road.gd
Normal file
18
scripts/road.gd
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
extends Node3D
|
||||||
|
|
||||||
|
@export var despawn_distance := 50.0 # Distance behind player to despawn
|
||||||
|
var player: Node3D
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
# Find the player once when road spawns
|
||||||
|
player = get_tree().get_first_node_in_group("player")
|
||||||
|
|
||||||
|
# Set up despawn area
|
||||||
|
var area = $DespawnArea
|
||||||
|
area.body_exited.connect(_on_body_exited)
|
||||||
|
area.position.z -= 10 # Adjust for scaled position
|
||||||
|
|
||||||
|
func _on_body_exited(body: Node):
|
||||||
|
if body == player:
|
||||||
|
if global_position.x < player.global_position.x - despawn_distance:
|
||||||
|
queue_free()
|
||||||
1
scripts/road.gd.uid
Normal file
1
scripts/road.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b0pm2dfsugptw
|
||||||
45
scripts/road_manager.gd
Normal file
45
scripts/road_manager.gd
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
extends Node3D
|
||||||
|
|
||||||
|
@export var road_scene: PackedScene = preload("res://scenes/road.tscn")
|
||||||
|
@export var initial_roads := 5 # Number of roads to spawn on each side
|
||||||
|
@export var road_spacing := 20.0 # Exact spacing from original scene
|
||||||
|
@export var spawn_distance := 50.0 # Distance ahead to spawn new roads
|
||||||
|
|
||||||
|
var player: Node3D
|
||||||
|
var last_spawn_x := 0.0
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
# Use call_deferred to ensure player exists
|
||||||
|
call_deferred("initialize_player")
|
||||||
|
|
||||||
|
func initialize_player():
|
||||||
|
player = get_tree().get_first_node_in_group("player")
|
||||||
|
if not player:
|
||||||
|
push_error("Player not found in 'player' group!")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Initialize starting roads relative to player position
|
||||||
|
var start_x = floor(player.global_position.x / 20.0) * 20.0
|
||||||
|
for i in range(-initial_roads, initial_roads):
|
||||||
|
spawn_road(start_x + i * 20.0)
|
||||||
|
last_spawn_x = start_x + initial_roads * 20.0
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
if not player:
|
||||||
|
return # Skip if player not found
|
||||||
|
|
||||||
|
# Check road spawning based on player's X position
|
||||||
|
if player.global_position.x > last_spawn_x - spawn_distance:
|
||||||
|
spawn_road(last_spawn_x + 20.0)
|
||||||
|
last_spawn_x += 20.0
|
||||||
|
|
||||||
|
func spawn_road(x_position: float):
|
||||||
|
var new_road = road_scene.instantiate()
|
||||||
|
# Add proper positioning based on original road spacing
|
||||||
|
new_road.global_transform = Transform3D(
|
||||||
|
Vector3(2, 0, 0),
|
||||||
|
Vector3(0, 2, 0),
|
||||||
|
Vector3(0, 0, 2),
|
||||||
|
Vector3(x_position, 0, 0)
|
||||||
|
)
|
||||||
|
add_child(new_road)
|
||||||
1
scripts/road_manager.gd.uid
Normal file
1
scripts/road_manager.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bkbm887f6xqpi
|
||||||
Loading…
Add table
Add a link
Reference in a new issue