Add basic buggy controls
parent
e5138be1c2
commit
0f8561636d
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,7 @@
|
||||||
[gd_resource type="Environment" load_steps=2 format=2]
|
[gd_resource type="Environment" load_steps=2 format=2]
|
||||||
|
|
||||||
[sub_resource type="ProceduralSky" id=1]
|
[sub_resource type="ProceduralSky" id=1]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
background_mode = 2
|
background_mode = 2
|
||||||
background_sky = SubResource( 1 )
|
background_sky = SubResource( 1 )
|
||||||
|
|
|
@ -2,33 +2,35 @@
|
||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="StreamTexture"
|
type="StreamTexture"
|
||||||
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
|
path.s3tc="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.stex"
|
||||||
|
path.etc2="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.stex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"imported_formats": [ "s3tc", "etc2" ],
|
||||||
|
"vram_texture": true
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://icon.png"
|
source_file="res://icon.png"
|
||||||
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
|
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.stex", "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.stex" ]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
compress/mode=0
|
compress/mode=2
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
compress/hdr_mode=0
|
compress/hdr_mode=0
|
||||||
compress/bptc_ldr=0
|
compress/bptc_ldr=0
|
||||||
compress/normal_map=0
|
compress/normal_map=0
|
||||||
flags/repeat=0
|
flags/repeat=true
|
||||||
flags/filter=true
|
flags/filter=true
|
||||||
flags/mipmaps=false
|
flags/mipmaps=true
|
||||||
flags/anisotropic=false
|
flags/anisotropic=false
|
||||||
flags/srgb=2
|
flags/srgb=1
|
||||||
process/fix_alpha_border=true
|
process/fix_alpha_border=true
|
||||||
process/premult_alpha=false
|
process/premult_alpha=false
|
||||||
process/HDR_as_SRGB=false
|
process/HDR_as_SRGB=false
|
||||||
process/invert_color=false
|
process/invert_color=false
|
||||||
stream=false
|
stream=false
|
||||||
size_limit=0
|
size_limit=0
|
||||||
detect_3d=true
|
detect_3d=false
|
||||||
svg/scale=1.0
|
svg/scale=1.0
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
extends Camera
|
||||||
|
|
||||||
|
export (NodePath) var follow_target_path = null
|
||||||
|
export var target_distance: float = 3.0
|
||||||
|
export var target_height: float = 2.0
|
||||||
|
|
||||||
|
var follow_target: Node = null
|
||||||
|
var last_lookat: Vector3
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
follow_target = get_node(follow_target_path)
|
||||||
|
last_lookat = follow_target.global_transform.origin
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
var delta_v = global_transform.origin - follow_target.global_transform.origin
|
||||||
|
var target_pos = global_transform.origin
|
||||||
|
|
||||||
|
delta_v.y = 0.0
|
||||||
|
|
||||||
|
if (delta_v.length() > target_distance):
|
||||||
|
delta_v = delta_v.normalized() * target_distance
|
||||||
|
delta_v.y = target_height
|
||||||
|
target_pos = follow_target.global_transform.origin + delta_v
|
||||||
|
else:
|
||||||
|
target_pos.y = follow_target.global_transform.origin.y + target_height
|
||||||
|
|
||||||
|
global_transform.origin = global_transform.origin.linear_interpolate(target_pos, delta * 20.0)
|
||||||
|
|
||||||
|
last_lookat = last_lookat.linear_interpolate(follow_target.global_transform.origin, delta * 20.0)
|
||||||
|
|
||||||
|
look_at(last_lookat, Vector3(0.0, 1.0, 0.0))
|
|
@ -0,0 +1,37 @@
|
||||||
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://vehicles/buggy.tscn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://player/camera.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://icon.png" type="Texture" id=3]
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="SpatialMaterial" id=3]
|
||||||
|
albedo_texture = ExtResource( 3 )
|
||||||
|
|
||||||
|
[sub_resource type="ConcavePolygonShape" id=2]
|
||||||
|
data = PoolVector3Array( 1, 0, 1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0, -1, 1, 0, -1 )
|
||||||
|
|
||||||
|
[node name="Spatial" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="StaticBody" type="StaticBody" parent="."]
|
||||||
|
transform = Transform( 99.9785, 0, 0, 0, 99.9785, 0, 0, 0, 99.9785, 0, 0, 0 )
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="StaticBody"]
|
||||||
|
transform = Transform( 6.13726, 0, 0, 0, 6.13726, 0, 0, 0, 6.13726, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
material/0 = SubResource( 3 )
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
|
||||||
|
transform = Transform( 6.13726, 0, 0, 0, 6.13726, 0, 0, 0, 6.13726, 0, 0, 0 )
|
||||||
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="buggy" parent="." instance=ExtResource( 1 )]
|
||||||
|
transform = Transform( 1.00456, 0, 0, 0, 1.00456, 0, 0, 0, 1.00456, -0.0204048, 0.0478153, -0.0235357 )
|
||||||
|
|
||||||
|
[node name="camera" type="Camera" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.88022, 23.0639 )
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
follow_target_path = NodePath("../buggy")
|
||||||
|
target_distance = 12.0
|
||||||
|
target_height = 6.0
|
|
@ -0,0 +1,39 @@
|
||||||
|
extends VehicleBody
|
||||||
|
|
||||||
|
const STEER_SPEED = 1.5
|
||||||
|
const STEER_LIMIT = 0.4
|
||||||
|
|
||||||
|
var steer_target = 0
|
||||||
|
|
||||||
|
export var engine_force_value = 40
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
var fwd_mps = transform.basis.xform_inv(linear_velocity).x
|
||||||
|
|
||||||
|
steer_target = Input.get_action_strength("ui_left") - Input.get_action_strength("ui_right")
|
||||||
|
steer_target *= STEER_LIMIT
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_up"):
|
||||||
|
# Increase engine force at low speeds to make the initial acceleration faster.
|
||||||
|
var speed = linear_velocity.length()
|
||||||
|
if speed < 5 and speed != 0:
|
||||||
|
engine_force = clamp(engine_force_value * 5 / speed, 0, 100)
|
||||||
|
else:
|
||||||
|
engine_force = engine_force_value
|
||||||
|
else:
|
||||||
|
engine_force = 0
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_down"):
|
||||||
|
# Increase engine force at low speeds to make the initial acceleration faster.
|
||||||
|
if fwd_mps >= -1:
|
||||||
|
var speed = linear_velocity.length()
|
||||||
|
if speed < 5 and speed != 0:
|
||||||
|
engine_force = -clamp(engine_force_value * 5 / speed, 0, 100)
|
||||||
|
else:
|
||||||
|
engine_force = -engine_force_value
|
||||||
|
else:
|
||||||
|
brake = 1
|
||||||
|
else:
|
||||||
|
brake = 0.0
|
||||||
|
|
||||||
|
steering = move_toward(steering, steer_target, STEER_SPEED * delta)
|
|
@ -0,0 +1,55 @@
|
||||||
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://assets/basic_buggy.glb" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://vehicles/buggy.gd" type="Script" id=3]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape" id=1]
|
||||||
|
extents = Vector3( 2.46457, 1, 1.77811 )
|
||||||
|
|
||||||
|
[node name="buggy" instance=ExtResource( 1 )]
|
||||||
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
|
[node name="chassis" parent="." index="0"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
|
||||||
|
[node name="left_front" parent="." index="2"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.33227, 0.952938, -2.92949 )
|
||||||
|
use_as_traction = true
|
||||||
|
use_as_steering = true
|
||||||
|
wheel_roll_influence = 0.2
|
||||||
|
wheel_rest_length = 0.5
|
||||||
|
suspension_travel = 0.5
|
||||||
|
suspension_stiffness = 3.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="right_front" parent="." index="3"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.33227, 0.952938, -2.92949 )
|
||||||
|
use_as_traction = true
|
||||||
|
use_as_steering = true
|
||||||
|
wheel_roll_influence = 0.2
|
||||||
|
wheel_rest_length = 0.5
|
||||||
|
suspension_travel = 0.5
|
||||||
|
suspension_stiffness = 3.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="rear_left" parent="." index="4"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.33227, 0.952938, 2.92949 )
|
||||||
|
use_as_traction = true
|
||||||
|
wheel_roll_influence = 0.2
|
||||||
|
wheel_rest_length = 0.5
|
||||||
|
suspension_travel = 0.5
|
||||||
|
suspension_stiffness = 3.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="rear_right" parent="." index="5"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.33227, 0.952938, 2.92949 )
|
||||||
|
use_as_traction = true
|
||||||
|
wheel_roll_influence = 0.2
|
||||||
|
wheel_rest_length = 0.5
|
||||||
|
suspension_travel = 0.5
|
||||||
|
suspension_stiffness = 3.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="." index="6"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.36968, 0 )
|
||||||
|
shape = SubResource( 1 )
|
Loading…
Reference in New Issue