fix(*): Ensure that movement vaguely works in the new area and looks vaguely at the ball

This commit is contained in:
Josh Creek
2025-07-12 20:34:03 +01:00
parent 927bbd0be7
commit bdd0244873
9 changed files with 143 additions and 33 deletions
+17
View File
@@ -0,0 +1,17 @@
[gd_scene load_steps=3 format=3 uid="uid://27u3tdc5yqnl"]
[ext_resource type="ArrayMesh" uid="uid://ucw1lyo43yi4" path="res://assets/models/gold_ball.res" id="1_ct1s3"]
[sub_resource type="SphereShape3D" id="SphereShape3D_c5p07"]
[node name="Ball" type="RigidBody3D"]
mass = 100.0
inertia = Vector3(100, 100, 100)
metadata/_edit_group_ = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_c5p07")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 2.08165e-12, 2.08165e-12, 2.08165e-12)
mesh = ExtResource("1_ct1s3")
+23
View File
@@ -0,0 +1,23 @@
[gd_scene load_steps=4 format=3 uid="uid://p07epxnh8wwp"]
[ext_resource type="Script" uid="uid://dyq1n7q1bqjps" path="res://scripts/ship.gd" id="1_efag7"]
[sub_resource type="BoxMesh" id="BoxMesh_efag7"]
size = Vector3(1, 1, 4)
[sub_resource type="BoxShape3D" id="BoxShape3D_dsjou"]
size = Vector3(1, 1, 4)
[node name="Ship" type="RigidBody3D"]
mass = 10.0
gravity_scale = 10.0
script = ExtResource("1_efag7")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_efag7")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_dsjou")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.867366, 0.497671, 0, -0.497671, 0.867366, 0, 2.04336, 3.31556)
+1 -1
View File
@@ -1,6 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://dnra1buk328d"]
[ext_resource type="Script" path="res://scripts/Vehicle.gd" id="1_5snef"]
[ext_resource type="Script" uid="uid://byy2mu4mxdlgl" path="res://scripts/Vehicle.gd" id="1_5snef"]
[sub_resource type="BoxShape3D" id="BoxShape3D_0otfk"]
size = Vector3(0.5, 0.5, 1)
+4
View File
@@ -67,3 +67,7 @@ turbo={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[physics]
3d/physics_engine="Jolt Physics"
+16 -11
View File
File diff suppressed because one or more lines are too long
+5 -20
View File
@@ -1,7 +1,7 @@
[gd_scene load_steps=14 format=3 uid="uid://djlfte5nx8sel"]
[gd_scene load_steps=13 format=3 uid="uid://djlfte5nx8sel"]
[ext_resource type="PackedScene" uid="uid://dnra1buk328d" path="res://objects/vehicle.tscn" id="2_2d4ji"]
[ext_resource type="ArrayMesh" uid="uid://ucw1lyo43yi4" path="res://assets/models/gold_ball.res" id="2_4bpxj"]
[ext_resource type="PackedScene" uid="uid://27u3tdc5yqnl" path="res://objects/ball.tscn" id="2_mv342"]
[ext_resource type="Script" uid="uid://scnbnslvru0b" path="res://scripts/MatchCamera3D.gd" id="2_n3g6s"]
[ext_resource type="PackedScene" uid="uid://cofdcxo5170rs" path="res://objects/goal.tscn" id="3_xk008"]
[ext_resource type="Script" uid="uid://cprbkhe46c1be" path="res://scripts/player1.gd" id="4_keuru"]
@@ -17,8 +17,6 @@ size = Vector3(10, 0.5, 10)
[sub_resource type="BoxShape3D" id="BoxShape3D_133xi"]
size = Vector3(10, 0.5, 10)
[sub_resource type="SphereShape3D" id="SphereShape3D_c5p07"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_t0i0j"]
sky_top_color = Color(0.266667, 0.419608, 1, 1)
@@ -31,13 +29,12 @@ sky = SubResource("Sky_0r58b")
[node name="MatchNode3D" type="Node3D"]
[node name="MatchCamera3D" type="Camera3D" parent="." node_paths=PackedStringArray("vehicle", "ball")]
[node name="MatchCamera3D" type="Camera3D" parent="." node_paths=PackedStringArray("vehicle")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 1.33585, 3.3972)
current = true
fov = 114.877
script = ExtResource("2_n3g6s")
vehicle = NodePath("../Players/GridContainer/SubViewportContainer/SubViewport/Player1")
ball = NodePath("../Ball")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.908048, -0.417905, 0.0283578, 0.372456, 0.836559, 0.401802, -0.191638, -0.354294, 0.915287, 0, 3.7388, 0.115907)
@@ -52,18 +49,8 @@ mesh = SubResource("BoxMesh_xotuo")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"]
shape = SubResource("BoxShape3D_133xi")
[node name="Ball" type="RigidBody3D" parent="."]
[node name="Ball" parent="." instance=ExtResource("2_mv342")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 2, 2.08165e-12)
mass = 100.0
inertia = Vector3(100, 100, 100)
metadata/_edit_group_ = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ball"]
shape = SubResource("SphereShape3D_c5p07")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ball"]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 2.08165e-12, 2.08165e-12, 2.08165e-12)
mesh = ExtResource("2_4bpxj")
[node name="Players" type="Node3D" parent="."]
@@ -103,10 +90,8 @@ script = ExtResource("4_vutck")
[node name="Goals" type="Node3D" parent="."]
[node name="Goal2" parent="Goals" node_paths=PackedStringArray("ball", "player1") instance=ExtResource("3_xk008")]
[node name="Goal2" parent="Goals" instance=ExtResource("3_xk008")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 1, -5)
ball = NodePath("../../Ball")
player1 = NodePath("../../Players/GridContainer/SubViewportContainer/SubViewport/Player1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_ycxte")
+1 -1
View File
@@ -2,4 +2,4 @@ extends Button
func _on_pressed() -> void:
get_tree().change_scene_to_file("res://scenes/Game.tscn")
get_tree().change_scene_to_file("res://scenes/game.tscn")
+75
View File
@@ -0,0 +1,75 @@
class_name Ship
extends RigidBody3D
var speed = 10.0
@onready var camera : Camera3D = get_node("Camera3D")
@onready var ball = get_parent().get_node("Ball")
func _physics_process(_delta):
if ball and camera:
# Adjust the offset based on your scene scale
# Increasing Y component to raise the camera higher above the vehicle
var offset = Vector3(0, 2, -2) # Adjust Y to change height
# Position the camera behind and above the vehicle
var behind_vehicle = global_transform.origin - global_transform.basis.z * offset.z
behind_vehicle += global_transform.basis.y * offset.y
camera.global_transform.origin = behind_vehicle
camera.look_at(ball.global_transform.origin, Vector3.UP)
func _integrate_forces(state):
# input_vector represents the movement input relative to the vehicle
var input_vector = get_input_vector()
# Scale the input_vector by speed
input_vector = input_vector.normalized() * speed
# Set the linear velocity based on the input
state.linear_velocity = input_vector
# Rotate the ship to face the movement direction
if input_vector.length() > 0.1: # Only rotate if there's significant movement
var target_direction = input_vector.normalized()
# Create a transform that looks in the target direction
var look_transform = Transform3D()
look_transform.origin = global_transform.origin
look_transform = look_transform.looking_at(global_transform.origin + target_direction, Vector3.UP)
# Apply the rotation to the ship
state.transform.basis = look_transform.basis
func get_input_vector() -> Vector3:
var input_vector = Vector3.ZERO
if camera:
var camera_transform = camera.global_transform
var forward_direction = -camera_transform.basis.z
var right_direction = camera_transform.basis.x
var y_movement = input_vector.y
if Input.is_action_pressed("move_forward"):
input_vector += forward_direction
if Input.is_action_pressed("move_backward"):
input_vector -= forward_direction
if Input.is_action_pressed("move_left"):
input_vector -= right_direction
if Input.is_action_pressed("move_right"):
input_vector += right_direction
# Zero out the Y component to restrict movement to the XZ plane
input_vector.y = 0
# Add back the preserved Y movement
input_vector.y = y_movement
if Input.is_action_pressed("move_up"):
input_vector.y += 1
if Input.is_action_pressed("move_down"):
input_vector.y -= 1
return input_vector.normalized()
else:
print("Camera not found")
return Vector3.ZERO
+1
View File
@@ -0,0 +1 @@
uid://dyq1n7q1bqjps