Merge pull request 'feature/moving-platforms' (#6) from feature/moving-platforms into develop

Reviewed-on: https://git.bellsworne.tech/Bellsworne/steamforged-skies/pulls/6
This commit is contained in:
Gary Steven Keough 2024-12-14 03:44:59 +00:00
commit 86f6d53081
18 changed files with 484 additions and 11 deletions

View File

@ -1,8 +1,9 @@
[gd_scene load_steps=10 format=3 uid="uid://ewovs6ns5y3k"] [gd_scene load_steps=11 format=3 uid="uid://ewovs6ns5y3k"]
[ext_resource type="Script" path="res://assets/core/networking/old/old_NetworkManager.gd" id="1_kki4t"] [ext_resource type="Script" path="res://assets/core/networking/old/old_NetworkManager.gd" id="1_kki4t"]
[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"] [ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"]
[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"] [ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"]
[ext_resource type="PackedScene" uid="uid://c7mtmmke1anxp" path="res://assets/core/ships/test-ship/test-ship.tscn" id="4_feinw"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
@ -53,3 +54,6 @@ shape = SubResource("WorldBoundaryShape3D_4238x")
[node name="Player" parent="." instance=ExtResource("2_q510b")] [node name="Player" parent="." instance=ExtResource("2_q510b")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
joystick_camera_sens_multiplier = 5.0 joystick_camera_sens_multiplier = 5.0
[node name="TestShip" parent="." instance=ExtResource("4_feinw")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24218, 0.563903, 0)

View File

@ -0,0 +1,59 @@
[gd_scene load_steps=11 format=3 uid="uid://ewovs6ns5y3k"]
[ext_resource type="Script" path="res://assets/core/networking/NetworkManager.gd" id="1_kki4t"]
[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"]
[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"]
[ext_resource type="PackedScene" uid="uid://c7mtmmke1anxp" path="res://assets/core/ships/test-ship/test-ship.tscn" id="4_feinw"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="Sky" id="Sky_roqfl"]
sky_material = SubResource("ProceduralSkyMaterial_yg2er")
[sub_resource type="Environment" id="Environment_nyust"]
background_mode = 2
sky = SubResource("Sky_roqfl")
tonemap_mode = 2
glow_enabled = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8ttyg"]
albedo_texture = ExtResource("1_l0osb")
uv1_triplanar = true
[sub_resource type="PlaneMesh" id="PlaneMesh_v66gr"]
lightmap_size_hint = Vector2i(102, 102)
size = Vector2(20, 20)
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_4238x"]
[node name="DevLevel" type="Node3D"]
[node name="NetworkManager" type="Node" parent="."]
unique_name_in_owner = true
script = ExtResource("1_kki4t")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_nyust")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
shadow_enabled = true
[node name="StaticBody3D" type="StaticBody3D" parent="."]
[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"]
material_override = SubResource("StandardMaterial3D_8ttyg")
mesh = SubResource("PlaneMesh_v66gr")
skeleton = NodePath("../..")
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
shape = SubResource("WorldBoundaryShape3D_4238x")
[node name="Player" parent="." instance=ExtResource("2_q510b")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
joystick_camera_sens_multiplier = 5.0
[node name="TestShip" parent="." instance=ExtResource("4_feinw")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24218, 0.563903, 0)

View File

@ -0,0 +1,59 @@
[gd_scene load_steps=11 format=3 uid="uid://ewovs6ns5y3k"]
[ext_resource type="Script" path="res://assets/core/networking/NetworkManager.gd" id="1_kki4t"]
[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="1_l0osb"]
[ext_resource type="PackedScene" uid="uid://c6w0ivy4hetrl" path="res://assets/core/player-controller/scenes/player.tscn" id="2_q510b"]
[ext_resource type="PackedScene" uid="uid://c7mtmmke1anxp" path="res://assets/core/ships/test-ship/test-ship.tscn" id="4_feinw"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_yg2er"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="Sky" id="Sky_roqfl"]
sky_material = SubResource("ProceduralSkyMaterial_yg2er")
[sub_resource type="Environment" id="Environment_nyust"]
background_mode = 2
sky = SubResource("Sky_roqfl")
tonemap_mode = 2
glow_enabled = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8ttyg"]
albedo_texture = ExtResource("1_l0osb")
uv1_triplanar = true
[sub_resource type="PlaneMesh" id="PlaneMesh_v66gr"]
lightmap_size_hint = Vector2i(102, 102)
size = Vector2(20, 20)
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_4238x"]
[node name="DevLevel" type="Node3D"]
[node name="NetworkManager" type="Node" parent="."]
unique_name_in_owner = true
script = ExtResource("1_kki4t")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_nyust")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
shadow_enabled = true
[node name="StaticBody3D" type="StaticBody3D" parent="."]
[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"]
material_override = SubResource("StandardMaterial3D_8ttyg")
mesh = SubResource("PlaneMesh_v66gr")
skeleton = NodePath("../..")
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
shape = SubResource("WorldBoundaryShape3D_4238x")
[node name="Player" parent="." instance=ExtResource("2_q510b")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
joystick_camera_sens_multiplier = 5.0
[node name="TestShip" parent="." instance=ExtResource("4_feinw")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.24218, 0.563903, 0)

View File

@ -0,0 +1,9 @@
class_name Interactable
extends Node3D
var player_reference: Player
func interact():
pass

View File

@ -0,0 +1,16 @@
[gd_scene load_steps=4 format=3 uid="uid://dm31ddavxv5gt"]
[ext_resource type="Script" path="res://assets/core/interactables/ship-helm/ship_helm.gd" id="1_lsarv"]
[ext_resource type="PackedScene" uid="uid://d2e3plio1db16" path="res://assets/core/interactables/ship-helm/ship_helm.blend" id="2_n3ctg"]
[sub_resource type="BoxShape3D" id="BoxShape3D_u6a0w"]
size = Vector3(1, 1.23828, 0.332275)
[node name="ShipHelm" type="StaticBody3D"]
script = ExtResource("1_lsarv")
[node name="ship_helm" parent="." instance=ExtResource("2_n3ctg")]
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.220532, 0.0608378)
shape = SubResource("BoxShape3D_u6a0w")

Binary file not shown.

View File

@ -0,0 +1,51 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://d2e3plio1db16"
path="res://.godot/imported/ship_helm.blend-ff92b4e852f739448ae2d5004545d8b0.scn"
[deps]
source_file="res://assets/core/interactables/ship-helm/ship_helm.blend"
dest_files=["res://.godot/imported/ship_helm.blend-ff92b4e852f739448ae2d5004545d8b0.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true

View File

@ -0,0 +1,19 @@
class_name ShipHelm
extends Interactable
@export var parent_ship: Ship
var is_being_piloted: bool = false
func interact():
if !is_being_piloted:
player_reference.set_is_piloting(true)
print("set player to piloting")
is_being_piloted = true
parent_ship.ship_is_piloted = true
elif is_being_piloted:
player_reference.set_is_piloting(false)
print("set player to NOT piloting")
is_being_piloted = false
parent_ship.ship_is_piloted = false

Binary file not shown.

View File

@ -0,0 +1,51 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cje1q2piwu0ri"
path="res://.godot/imported/ship_helm.blend-ea3ce672878a6c3516ac3fa7aae30891.scn"
[deps]
source_file="res://assets/core/placeable-objects/ship_helm.blend"
dest_files=["res://.godot/imported/ship_helm.blend-ea3ce672878a6c3516ac3fa7aae30891.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true

Binary file not shown.

View File

@ -0,0 +1,35 @@
[gd_scene load_steps=5 format=3 uid="uid://c6w0ivy4hetrl"]
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"]
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"]
radius = 0.35
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qlkab"]
radius = 0.35
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")]
script = ExtResource("1_bv7t4")
camera = NodePath("Neck/Camera3D")
[node name="PlayerTag" type="Label3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0)
billboard = 1
text = "username"
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("CapsuleMesh_v7b3h")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_qlkab")
[node name="Neck" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
[node name="Camera3D" type="Camera3D" parent="Neck"]
[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")]
target_position = Vector3(0, 0, -2.5)
script = ExtResource("2_wvu3d")
player = NodePath("../../..")

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://c6w0ivy4hetrl"] [gd_scene load_steps=5 format=3 uid="uid://c6w0ivy4hetrl"]
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"] [ext_resource type="Script" path="res://assets/core/player-controller/scripts/player.gd" id="1_bv7t4"]
[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_interacter.gd" id="2_wvu3d"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"]
radius = 0.35 radius = 0.35
@ -10,15 +11,15 @@ radius = 0.35
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")]
script = ExtResource("1_bv7t4") script = ExtResource("1_bv7t4")
speed = null
acceleration = null
jump_height = null
camera_sens = null
joystick_camera_sens_multiplier = null
camera = NodePath("Neck/Camera3D") camera = NodePath("Neck/Camera3D")
[node name="PlayerTag" type="Label3D" parent="."] [node name="PlayerTag" type="Label3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.26654, 0)
visibility_range_begin = 0.7
visibility_range_begin_margin = 14.0
visibility_range_end = 15.0
visibility_range_end_margin = 14.0
visibility_range_fade_mode = 1
billboard = 1 billboard = 1
text = "username" text = "username"
@ -32,3 +33,8 @@ shape = SubResource("CapsuleShape3D_qlkab")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.65, 0)
[node name="Camera3D" type="Camera3D" parent="Neck"] [node name="Camera3D" type="Camera3D" parent="Neck"]
[node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")]
target_position = Vector3(0, 0, -2.5)
script = ExtResource("2_wvu3d")
player = NodePath("../../..")

View File

@ -3,9 +3,10 @@ class_name Player extends CharacterBody3D
var network_manager: OldnetworkManager var network_manager: OldnetworkManager
var player_tag: Label3D var player_tag: Label3D
var username: String = "" var username: String = ""
var is_piloting: bool = false
@export_category("Player") @export_category("Player")
@export_range(1, 35, 1) var speed: float = 10 # m/s @export_range(1, 35, 1) var speed: float = 5 # m/s
@export_range(10, 400, 1) var acceleration: float = 100 # m/s^2 @export_range(10, 400, 1) var acceleration: float = 100 # m/s^2
@export_range(0.1, 3.0, 0.1) var jump_height: float = 1 # m @export_range(0.1, 3.0, 0.1) var jump_height: float = 1 # m
@ -23,6 +24,8 @@ var walk_vel: Vector3 # Walking velocity
var grav_vel: Vector3 # Gravity velocity var grav_vel: Vector3 # Gravity velocity
var jump_vel: Vector3 # Jumping velocity var jump_vel: Vector3 # Jumping velocity
var current_ship: Ship
func _ready() -> void: func _ready() -> void:
capture_mouse() capture_mouse()
@ -47,7 +50,7 @@ func _unhandled_input(event: InputEvent) -> void:
_rotate_camera() _rotate_camera()
elif event is InputEventJoypadMotion: elif event is InputEventJoypadMotion:
is_using_joystick = true is_using_joystick = true
if Input.is_action_just_pressed("jump"): if Input.is_action_just_pressed("jump") and !is_piloting:
jumping = true jumping = true
@ -59,9 +62,20 @@ func _input(event):
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
if current_ship != null:
if !is_piloting:
velocity = walk(delta) + _gravity(delta) + _jump(delta)
global_transform.basis = current_ship.global_transform.basis
else:
global_rotation.y = current_ship.global_rotation.y
else:
velocity = walk(delta) + _gravity(delta) + _jump(delta)
global_rotation.x = 0.0
global_rotation.z = 0.0
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
_handle_joypad_camera_rotation(delta) _handle_joypad_camera_rotation(delta)
velocity = _walk(delta) + _gravity(delta) + _jump(delta)
move_and_slide() move_and_slide()
@ -90,7 +104,7 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void
look_dir = Vector2.ZERO look_dir = Vector2.ZERO
func _walk(delta: float) -> Vector3: func walk(delta: float) -> Vector3:
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards") move_dir = Input.get_vector("move_left", "move_right", "move_forwards", "move_backwards")
var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y) var _forward: Vector3 = camera.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y)
@ -111,3 +125,19 @@ func _jump(delta: float) -> Vector3:
return jump_vel return jump_vel
jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta) jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta)
return jump_vel return jump_vel
func player_entered_ship(ship_global_position: Vector3, ship: Ship):
current_ship = ship
print(ship.ship_id)
print(global_position)
func player_exited_ship(ship_global_position: Vector3, ship: Ship):
current_ship = null
print(ship.ship_id)
print(global_position)
func set_is_piloting(state: bool):
is_piloting = state

View File

@ -0,0 +1,13 @@
extends RayCast3D
@export var player: Player
var current_interactable: Interactable
func _input(event):
if is_colliding() and get_collider() is Interactable:
if event.is_action_released("interact"):
current_interactable = get_collider() as Interactable
GameConsole.log_debug("interacted with interactable: " + current_interactable.name)
current_interactable.player_reference = player
current_interactable.interact()

View File

@ -0,0 +1,69 @@
[gd_scene load_steps=8 format=3 uid="uid://c7mtmmke1anxp"]
[ext_resource type="Script" path="res://assets/core/ships/test-ship/test_ship.gd" id="1_yql7r"]
[ext_resource type="PackedScene" uid="uid://dm31ddavxv5gt" path="res://assets/core/interactables/ship-helm/ship-helm.tscn" id="2_bmsx0"]
[sub_resource type="BoxMesh" id="BoxMesh_tkeg5"]
size = Vector3(5, 0.25, 10)
[sub_resource type="BoxShape3D" id="BoxShape3D_fs34p"]
size = Vector3(5, 0.25, 10)
[sub_resource type="CapsuleMesh" id="CapsuleMesh_oqio3"]
radius = 1.401
height = 7.405
[sub_resource type="BoxShape3D" id="BoxShape3D_7jr0u"]
size = Vector3(5.14063, 6.07324, 10.1924)
[sub_resource type="CylinderMesh" id="CylinderMesh_h3cm2"]
top_radius = 0.1
bottom_radius = 0.1
height = 4.5
[node name="TestShip" type="RigidBody3D" node_paths=PackedStringArray("ship_area", "ship_helm")]
mass = 800.0
gravity_scale = 0.0
script = ExtResource("1_yql7r")
ship_area = NodePath("Area3D")
ship_helm = NodePath("ShipHelm")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_tkeg5")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_fs34p")
[node name="Balloon" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 5.12542, 0)
mesh = SubResource("CapsuleMesh_oqio3")
skeleton = NodePath("")
[node name="Area3D" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.99997, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
shape = SubResource("BoxShape3D_7jr0u")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(0.866025, -0.5, 0, 0.5, 0.866025, 0, 0, 0, 1, 1.25913, 1.87582, 2.33493)
mesh = SubResource("CylinderMesh_h3cm2")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.2691, 1.87582, 2.33493)
mesh = SubResource("CylinderMesh_h3cm2")
[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
transform = Transform3D(0.866025, -0.5, 0, 0.5, 0.866025, 0, 0, 0, 1, 1.25913, 1.87582, -2.52429)
mesh = SubResource("CylinderMesh_h3cm2")
[node name="MeshInstance3D5" type="MeshInstance3D" parent="."]
transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.2691, 1.87582, -2.52429)
mesh = SubResource("CylinderMesh_h3cm2")
[node name="ShipHelm" parent="." node_paths=PackedStringArray("parent_ship") instance=ExtResource("2_bmsx0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8, -0.598755)
parent_ship = NodePath("..")
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
[connection signal="body_exited" from="Area3D" to="." method="_on_area_3d_body_exited"]

View File

@ -0,0 +1,52 @@
class_name Ship
extends RigidBody3D
@export var ship_area: Area3D
@export var ship_helm: ShipHelm
var ship_id: String = "1a"
var ship_is_piloted: bool = false
var base_turn_speed: float = 1
var ship_lift_speed: float = 20 # Adjust this value as needed
var acceleration: float = 50
var deceleration: float = acceleration * 0.5
var ship_top_speed: float = 100
var current_speed: float = 0.0
var max_force: float = 1000.0
func _physics_process(delta):
global_rotation.x = lerpf(global_rotation.x, 0, 0.01)
global_rotation.z = lerpf(global_rotation.z, 0, 0.01)
if ship_is_piloted:
var turn_speed = base_turn_speed / max(mass, 1)
if Input.is_action_pressed("move_left"):
angular_velocity.y += turn_speed
elif Input.is_action_pressed("move_right"):
angular_velocity.y -= turn_speed
if Input.is_action_pressed("jump"):
# Apply an impulse to achieve instantaneous upward velocity
apply_impulse(Vector3.UP * ship_lift_speed)
if Input.is_action_pressed("move_forwards"):
current_speed = min(current_speed + acceleration * delta, ship_top_speed)
else:
current_speed = max(current_speed - deceleration * delta, 0.0)
var desired_velocity = -transform.basis.z * current_speed
var forward_force = (desired_velocity - linear_velocity) * mass
forward_force = forward_force.normalized() * min(forward_force.length(), max_force)
apply_central_force(forward_force)
angular_velocity.y = clamp(angular_velocity.y, -0.5, 0.5)
func _on_area_3d_body_entered(body):
if body is Player:
body.player_entered_ship(global_position, self)
func _on_area_3d_body_exited(body):
if body is Player:
body.player_exited_ship(global_position, self)
ship_helm.is_being_piloted = false