diff --git a/assets/core/enviroment/dev-level/dev-level.tscn b/assets/core/enviroment/dev-level/dev-level.tscn index 252a298..c59136d 100644 --- a/assets/core/enviroment/dev-level/dev-level.tscn +++ b/assets/core/enviroment/dev-level/dev-level.tscn @@ -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="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) @@ -53,3 +54,6 @@ 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) diff --git a/assets/core/enviroment/dev-level/dev1D90.tmp b/assets/core/enviroment/dev-level/dev1D90.tmp new file mode 100644 index 0000000..74fda9c --- /dev/null +++ b/assets/core/enviroment/dev-level/dev1D90.tmp @@ -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) diff --git a/assets/core/enviroment/dev-level/dev81EA.tmp b/assets/core/enviroment/dev-level/dev81EA.tmp new file mode 100644 index 0000000..74fda9c --- /dev/null +++ b/assets/core/enviroment/dev-level/dev81EA.tmp @@ -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) diff --git a/assets/core/interactables/Interactable.gd b/assets/core/interactables/Interactable.gd new file mode 100644 index 0000000..04e01f4 --- /dev/null +++ b/assets/core/interactables/Interactable.gd @@ -0,0 +1,9 @@ +class_name Interactable + +extends Node3D + +var player_reference: Player + + +func interact(): + pass diff --git a/assets/core/interactables/ship-helm/ship-helm.tscn b/assets/core/interactables/ship-helm/ship-helm.tscn new file mode 100644 index 0000000..4a4594f --- /dev/null +++ b/assets/core/interactables/ship-helm/ship-helm.tscn @@ -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") diff --git a/assets/core/interactables/ship-helm/ship_helm.blend b/assets/core/interactables/ship-helm/ship_helm.blend new file mode 100644 index 0000000..c8dc87b Binary files /dev/null and b/assets/core/interactables/ship-helm/ship_helm.blend differ diff --git a/assets/core/interactables/ship-helm/ship_helm.blend.import b/assets/core/interactables/ship-helm/ship_helm.blend.import new file mode 100644 index 0000000..ef3597a --- /dev/null +++ b/assets/core/interactables/ship-helm/ship_helm.blend.import @@ -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 diff --git a/assets/core/interactables/ship-helm/ship_helm.gd b/assets/core/interactables/ship-helm/ship_helm.gd new file mode 100644 index 0000000..a875d94 --- /dev/null +++ b/assets/core/interactables/ship-helm/ship_helm.gd @@ -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 diff --git a/assets/core/placeable-objects/ship_helm.blend b/assets/core/placeable-objects/ship_helm.blend new file mode 100644 index 0000000..27d1313 Binary files /dev/null and b/assets/core/placeable-objects/ship_helm.blend differ diff --git a/assets/core/placeable-objects/ship_helm.blend.import b/assets/core/placeable-objects/ship_helm.blend.import new file mode 100644 index 0000000..e48ae82 --- /dev/null +++ b/assets/core/placeable-objects/ship_helm.blend.import @@ -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 diff --git a/assets/core/placeable-objects/ship_helm.blend1 b/assets/core/placeable-objects/ship_helm.blend1 new file mode 100644 index 0000000..7164732 Binary files /dev/null and b/assets/core/placeable-objects/ship_helm.blend1 differ diff --git a/assets/core/player-controller/scenes/pla106A.tmp b/assets/core/player-controller/scenes/pla106A.tmp new file mode 100644 index 0000000..2ebf37b --- /dev/null +++ b/assets/core/player-controller/scenes/pla106A.tmp @@ -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("../../..") diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn index 70f7d96..e562096 100644 --- a/assets/core/player-controller/scenes/player.tscn +++ b/assets/core/player-controller/scenes/player.tscn @@ -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_interacter.gd" id="2_wvu3d"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] radius = 0.35 @@ -10,15 +11,15 @@ radius = 0.35 [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] script = ExtResource("1_bv7t4") -speed = null -acceleration = null -jump_height = null -camera_sens = null -joystick_camera_sens_multiplier = null 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) +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 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) [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("../../..") diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index 2c48536..9ee4950 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -3,9 +3,10 @@ class_name Player extends CharacterBody3D var network_manager: OldnetworkManager var player_tag: Label3D var username: String = "" +var is_piloting: bool = false @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(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 jump_vel: Vector3 # Jumping velocity +var current_ship: Ship + func _ready() -> void: capture_mouse() @@ -47,7 +50,7 @@ func _unhandled_input(event: InputEvent) -> void: _rotate_camera() elif event is InputEventJoypadMotion: is_using_joystick = true - if Input.is_action_just_pressed("jump"): + if Input.is_action_just_pressed("jump") and !is_piloting: jumping = true @@ -59,9 +62,20 @@ func _input(event): 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: _handle_joypad_camera_rotation(delta) - velocity = _walk(delta) + _gravity(delta) + _jump(delta) move_and_slide() @@ -90,7 +104,7 @@ func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void look_dir = Vector2.ZERO -func _walk(delta: float) -> Vector3: +func walk(delta: float) -> Vector3: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: 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) @@ -111,3 +125,19 @@ func _jump(delta: float) -> Vector3: return jump_vel jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta) 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 diff --git a/assets/core/player-controller/scripts/player_interacter.gd b/assets/core/player-controller/scripts/player_interacter.gd new file mode 100644 index 0000000..e941591 --- /dev/null +++ b/assets/core/player-controller/scripts/player_interacter.gd @@ -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() diff --git a/assets/core/ships/test-ship/test-ship.tscn b/assets/core/ships/test-ship/test-ship.tscn new file mode 100644 index 0000000..b57547c --- /dev/null +++ b/assets/core/ships/test-ship/test-ship.tscn @@ -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"] diff --git a/assets/core/ships/test-ship/test_ship.gd b/assets/core/ships/test-ship/test_ship.gd new file mode 100644 index 0000000..4187477 --- /dev/null +++ b/assets/core/ships/test-ship/test_ship.gd @@ -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 diff --git a/godot-jolt/windows/~godot-jolt_windows-x64_editor.dll b/godot-jolt/windows/~godot-jolt_windows-x64_editor.dll deleted file mode 100644 index c05d288..0000000 Binary files a/godot-jolt/windows/~godot-jolt_windows-x64_editor.dll and /dev/null differ