diff --git a/addons/kennysprototypetextures/Purple/texture_purple (1).png.import b/addons/kennysprototypetextures/Purple/texture_purple (1).png.import index d482513..91a1856 100644 --- a/addons/kennysprototypetextures/Purple/texture_purple (1).png.import +++ b/addons/kennysprototypetextures/Purple/texture_purple (1).png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://becx0d2aass76" -path="res://.godot/imported/texture_purple (1).png-280110f53f224c96b93436181ab481d7.ctex" +path.s3tc="res://.godot/imported/texture_purple (1).png-280110f53f224c96b93436181ab481d7.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://addons/kennysprototypetextures/Purple/texture_purple (1).png" -dest_files=["res://.godot/imported/texture_purple (1).png-280110f53f224c96b93436181ab481d7.ctex"] +dest_files=["res://.godot/imported/texture_purple (1).png-280110f53f224c96b93436181ab481d7.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +32,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 diff --git a/assets/core/enviroment/custom-skies/clouds/clouds.tscn b/assets/core/enviroment/custom-skies/clouds/clouds.tscn new file mode 100644 index 0000000..41f89b3 --- /dev/null +++ b/assets/core/enviroment/custom-skies/clouds/clouds.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://c2754duv8pcgd"] + +[node name="Clouds" type="Node3D"] diff --git a/assets/core/enviroment/custom-skies/sky-asset/custom_skies.gd b/assets/core/enviroment/custom-skies/sky-asset/custom_skies.gd new file mode 100644 index 0000000..37a072a --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/custom_skies.gd @@ -0,0 +1,86 @@ +extends WorldEnvironment + +# Node references +@onready var sun_moon_line: Node3D = $SunMoonLine +@onready var world_envi: WorldEnvironment = $"." +@onready var sun_directional_light_3d: DirectionalLight3D = $SunMoonLine/SunNodes/SunDirectionalLight3D +@onready var moon_directional_light_3d: DirectionalLight3D = $SunMoonLine/MoonNodes/MoonDirectionalLight3D + +# Exported time control settings +@export_category("Time Controls") +@export_range(0.0, 2400.0, 0.01) var timeOfDay : float = 1200.0 +@export_range(1.0, 86400, 1.0) var rateOfTime : float = 0.1 +@export var simulatingTime : bool = false + +# Exported sky control settings +@export_category("Sky Controls") +@export_range(0, 360, 0.1) var skyRotation : float = 0.0 +@export var fog : bool = false +@export_range(0.0, 1.0, 0.001) var fogDensity : float = 0.0 + +# Exported sky color settings +@export_category("Sky/Light Colors") +@export var sky_base_color_gradient: GradientTexture1D = preload("res://assets/core/enviroment/custom-skies/sky-asset/sky_base_color_gradient.tres") +@export var sun_light_color_gradient: GradientTexture1D = preload("res://assets/core/enviroment/custom-skies/sky-asset/sun_light_color_gradient.tres") +@export var sky_sun_set_rise_color_gradient: GradientTexture1D = preload("res://assets/core/enviroment/custom-skies/sky-asset/sky_sun_set_rise_color_gradient.tres") + +# MISC Variables +var sunPosition : float = 0.0 +var moonPosition : float = 0.0 +var star_alpha +var start_time : float = 0.0 + +func _physics_process(delta: float) -> void: + _updateRotation() + _updateSky() + _updateLight() + _simulateTime(delta) + _updateFog() + _updateStars(delta) + +func _simulateTime(delta): + if simulatingTime: + timeOfDay += (rateOfTime / 36) * delta + timeOfDay = wrapf(timeOfDay, 0.0, 2400.0) + +func _updateLight(): + sunPosition = sun_directional_light_3d.global_position.y + 0.5 + moonPosition = sun_directional_light_3d.global_position.y + 0.5 + sun_directional_light_3d.light_color = sun_light_color_gradient.gradient.sample(sunPosition) + +func _updateRotation(): + var hourMapped = remap(timeOfDay, 0.0, 2400.0, 0.0, 1.0) + sun_moon_line.rotation_degrees.y = skyRotation + sun_moon_line.rotation_degrees.x = hourMapped * 360 + 90 + +func _updateFog(): + if fog == true: + environment.volumetric_fog_density = fogDensity * 0.1 + else: + environment.volumetric_fog_density = 0 + +func _updateStars(delta): + var skyMaterial = self.environment.sky.get_material() # get sky material + if timeOfDay >= 0.0 and timeOfDay <= 585.0: #BETWEEN MIDNIGHT AND MORNING + star_alpha = skyMaterial.sky_cover_modulate.a # gets the current alpha of the stars + star_alpha = lerpf(star_alpha, 1.0, (1 * delta)) # smoothly lerps the current alpha to the new one + skyMaterial.sky_cover_modulate.a = star_alpha # sets the alpha of the stars + + elif timeOfDay >= 585.0 and timeOfDay <= 1820.0: #BETWEEN MORNING AND NOON + star_alpha = skyMaterial.sky_cover_modulate.a # gets the current alpha of the stars + star_alpha = lerpf(star_alpha, 0.0, (1 * delta)) # smoothly lerps the current alpha to the new one + skyMaterial.sky_cover_modulate.a = star_alpha # sets the alpha of the stars + + elif timeOfDay >= 1820.0 and timeOfDay <= 2400.0: #BETWEEN NOON AND MIDNIGHT + star_alpha = skyMaterial.sky_cover_modulate.a # gets the current alpha of the stars + star_alpha = lerpf(star_alpha, 1.0, (1 * delta)) # smoothly lerps the current alpha to the new one + skyMaterial.sky_cover_modulate.a = star_alpha # sets the alpha of the stars + +func _updateSky(): + var skyMaterial = self.environment.sky.get_material() # get sky material + # Match sky to gradient color + skyMaterial.sky_top_color = sky_base_color_gradient.gradient.sample(sunPosition) # sample gradient and set sky top color to match based on the time of day + skyMaterial.sky_horizon_color = sky_sun_set_rise_color_gradient.gradient.sample(sunPosition) # sample gradient and set sky horizon color to match based on the time of day + # Match ground to gradient color + skyMaterial.ground_bottom_color = sky_base_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground top color to match based on the time of day + skyMaterial.ground_horizon_color = sky_sun_set_rise_color_gradient.gradient.sample(sunPosition) # sample gradient and set ground horizon color to match based on the time of day diff --git a/assets/core/enviroment/custom-skies/sky-asset/custom_skies.tscn b/assets/core/enviroment/custom-skies/sky-asset/custom_skies.tscn new file mode 100644 index 0000000..8113576 --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/custom_skies.tscn @@ -0,0 +1,56 @@ +[gd_scene load_steps=6 format=3 uid="uid://ciak2pkm2kom6"] + +[ext_resource type="Texture2D" uid="uid://cx7i0fi1jin6q" path="res://assets/core/enviroment/custom-skies/sky-asset/star-texture.png" id="1_qrqqh"] +[ext_resource type="Script" path="res://assets/core/enviroment/custom-skies/sky-asset/custom_skies.gd" id="2_unvmv"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_tcxa4"] +sky_top_color = Color(0.345098, 0.45098, 0.588235, 1) +sky_horizon_color = Color(0.345098, 0.45098, 0.588235, 1) +sky_cover = ExtResource("1_qrqqh") +sky_cover_modulate = Color(1, 1, 1, 7.93862e-39) +ground_bottom_color = Color(0.345098, 0.45098, 0.588235, 1) +ground_horizon_color = Color(0.345098, 0.45098, 0.588235, 1) +ground_curve = 0.0273208 +sun_angle_max = 3.0 +sun_curve = 0.439227 + +[sub_resource type="Sky" id="Sky_aggj1"] +sky_material = SubResource("ProceduralSkyMaterial_tcxa4") + +[sub_resource type="Environment" id="Environment_8p04f"] +background_mode = 2 +sky = SubResource("Sky_aggj1") +reflected_light_source = 2 +tonemap_mode = 3 +ssr_enabled = true +ssao_enabled = true +ssil_enabled = true +sdfgi_enabled = true +sdfgi_use_occlusion = true +fog_density = 0.0 +volumetric_fog_enabled = true +volumetric_fog_density = 0.0 + +[node name="CustomSkies" type="WorldEnvironment"] +environment = SubResource("Environment_8p04f") +script = ExtResource("2_unvmv") +rateOfTime = 500.0 +skyRotation = 18.5 + +[node name="SunMoonLine" type="Node3D" parent="."] +transform = Transform3D(0.948324, -0.317304, 3.78381e-09, 0, 1.19248e-08, 0.999998, -0.317305, -0.948321, 1.13086e-08, 0, 0, 0) + +[node name="SunNodes" type="Node3D" parent="SunMoonLine"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5) + +[node name="SunDirectionalLight3D" type="DirectionalLight3D" parent="SunMoonLine/SunNodes"] +light_bake_mode = 1 +shadow_enabled = true + +[node name="MoonNodes" type="Node3D" parent="SunMoonLine"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -5) + +[node name="MoonDirectionalLight3D" type="DirectionalLight3D" parent="SunMoonLine/MoonNodes"] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) +light_energy = 0.01 +shadow_enabled = true diff --git a/assets/core/enviroment/custom-skies/sky-asset/sky_base_color_gradient.tres b/assets/core/enviroment/custom-skies/sky-asset/sky_base_color_gradient.tres new file mode 100644 index 0000000..d17df5e --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/sky_base_color_gradient.tres @@ -0,0 +1,9 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://3e2k7wllekm8"] + +[sub_resource type="Gradient" id="Gradient_fqghg"] +interpolation_mode = 2 +offsets = PackedFloat32Array(0.245161, 0.767742) +colors = PackedColorArray(0.0196078, 0.00784314, 0.0980392, 1, 0.345098, 0.45098, 0.588235, 1) + +[resource] +gradient = SubResource("Gradient_fqghg") diff --git a/assets/core/enviroment/custom-skies/sky-asset/sky_sun_set_rise_color_gradient.tres b/assets/core/enviroment/custom-skies/sky-asset/sky_sun_set_rise_color_gradient.tres new file mode 100644 index 0000000..ecd0f59 --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/sky_sun_set_rise_color_gradient.tres @@ -0,0 +1,9 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://df17po01nhu3c"] + +[sub_resource type="Gradient" id="Gradient_mw8hp"] +interpolation_mode = 2 +offsets = PackedFloat32Array(0.167742, 0.458065, 0.645161, 0.780645) +colors = PackedColorArray(0, 0, 0, 1, 0.756863, 0.356863, 0.321569, 1, 0.831373, 0.592157, 0.388235, 1, 0.345098, 0.45098, 0.588235, 1) + +[resource] +gradient = SubResource("Gradient_mw8hp") diff --git a/assets/core/enviroment/custom-skies/sky-asset/star-texture.png b/assets/core/enviroment/custom-skies/sky-asset/star-texture.png new file mode 100644 index 0000000..d6a0cb9 Binary files /dev/null and b/assets/core/enviroment/custom-skies/sky-asset/star-texture.png differ diff --git a/assets/core/enviroment/custom-skies/sky-asset/star-texture.png.import b/assets/core/enviroment/custom-skies/sky-asset/star-texture.png.import new file mode 100644 index 0000000..7e4debf --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/star-texture.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cx7i0fi1jin6q" +path.s3tc="res://.godot/imported/star-texture.png-56b0ece7656164ea391a5522d028ae23.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://assets/core/enviroment/custom-skies/sky-asset/star-texture.png" +dest_files=["res://.godot/imported/star-texture.png-56b0ece7656164ea391a5522d028ae23.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/core/enviroment/custom-skies/sky-asset/sun_light_color_gradient.tres b/assets/core/enviroment/custom-skies/sky-asset/sun_light_color_gradient.tres new file mode 100644 index 0000000..5035a42 --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky-asset/sun_light_color_gradient.tres @@ -0,0 +1,9 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bosyl6tsy1wpf"] + +[sub_resource type="Gradient" id="Gradient_o6r7l"] +interpolation_mode = 2 +offsets = PackedFloat32Array(0.167742, 0.48, 0.748387, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.756863, 0.356863, 0.321569, 1, 0.831373, 0.592157, 0.388235, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_o6r7l") diff --git a/assets/core/enviroment/custom-skies/sky.tscn b/assets/core/enviroment/custom-skies/sky.tscn new file mode 100644 index 0000000..c0f60fc --- /dev/null +++ b/assets/core/enviroment/custom-skies/sky.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://dlv4cwhskx8dr"] + +[ext_resource type="PackedScene" uid="uid://ciak2pkm2kom6" path="res://assets/core/enviroment/custom-skies/sky-asset/custom_skies.tscn" id="1_g8g48"] +[ext_resource type="PackedScene" uid="uid://c2754duv8pcgd" path="res://assets/core/enviroment/custom-skies/clouds/clouds.tscn" id="2_iqdk5"] + +[node name="Sky" type="Node"] + +[node name="CustomSkies" parent="." instance=ExtResource("1_g8g48")] +simulatingTime = true + +[node name="Clouds" parent="." instance=ExtResource("2_iqdk5")] + +[editable path="CustomSkies"] diff --git a/assets/core/enviroment/dev-level/dev-level.tscn b/assets/core/enviroment/dev-level/dev-level.tscn index 9a7f23b..dad4c5f 100644 --- a/assets/core/enviroment/dev-level/dev-level.tscn +++ b/assets/core/enviroment/dev-level/dev-level.tscn @@ -1,32 +1,19 @@ -[gd_scene load_steps=6 format=3 uid="uid://ewovs6ns5y3k"] +[gd_scene load_steps=5 format=3 uid="uid://ewovs6ns5y3k"] [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://y0xb2vktsr1k" path="res://assets/core/ships/shuttle-class/shuttle-class.tscn" id="3_lsckv"] [ext_resource type="PackedScene" uid="uid://dqymnaouq1mu2" path="res://assets/core/enviroment/dev-level/terrain.tscn" id="3_vcq2f"] - -[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 +[ext_resource type="PackedScene" uid="uid://dlv4cwhskx8dr" path="res://assets/core/enviroment/custom-skies/sky.tscn" id="4_uss2e"] [node name="DevLevel" type="Node3D"] -[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="Player" parent="." instance=ExtResource("2_q510b")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.02866, 27.0719, 0.35519) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.46532, 9.08969, 5.43659) joystick_camera_sens_multiplier = 5.0 [node name="level" parent="." instance=ExtResource("3_vcq2f")] + +[node name="ShuttleClass" parent="." instance=ExtResource("3_lsckv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.4922, 0) + +[node name="Sky" parent="." instance=ExtResource("4_uss2e")] diff --git a/assets/core/enviroment/dev-level/terrain.tscn b/assets/core/enviroment/dev-level/terrain.tscn index ae79a13..bcb08b1 100644 --- a/assets/core/enviroment/dev-level/terrain.tscn +++ b/assets/core/enviroment/dev-level/terrain.tscn @@ -12,7 +12,7 @@ shader_parameter/WallTexScale = 1.0 shader_parameter/WallColor = Color(0.662452, 0.662452, 0.662452, 1) shader_parameter/TopTexScale = 1.005 shader_parameter/TopColor = Color(0.466181, 0.466181, 0.466181, 1) -shader_parameter/BlendValues = Vector4(3.12, -1.96, 0, 1.115) +shader_parameter/BlendValues = Vector4(3.495, -2.27, 0, 1.19) shader_parameter/WallTex = ExtResource("4_c1a6l") shader_parameter/TopTex = ExtResource("3_u3eue") diff --git a/assets/core/interactables/ship-helm/ship-helm.tscn b/assets/core/interactables/ship-helm/ship-helm.tscn index 4a4594f..03b624c 100644 --- a/assets/core/interactables/ship-helm/ship-helm.tscn +++ b/assets/core/interactables/ship-helm/ship-helm.tscn @@ -1,16 +1,36 @@ -[gd_scene load_steps=4 format=3 uid="uid://dm31ddavxv5gt"] +[gd_scene load_steps=7 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"] +[ext_resource type="Texture2D" uid="uid://becx0d2aass76" path="res://addons/kennysprototypetextures/Purple/texture_purple (1).png" id="3_sgyh6"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vj8ph"] +albedo_texture = ExtResource("3_sgyh6") +uv1_triplanar = true + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mtdgj"] +albedo_texture = ExtResource("3_sgyh6") +uv1_triplanar = true [sub_resource type="BoxShape3D" id="BoxShape3D_u6a0w"] size = Vector3(1, 1.23828, 0.332275) [node name="ShipHelm" type="StaticBody3D"] +collision_layer = 256 +collision_mask = 7 script = ExtResource("1_lsarv") [node name="ship_helm" parent="." instance=ExtResource("2_n3ctg")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.681346, 0) + +[node name="Cube" parent="ship_helm" index="0"] +material_override = SubResource("StandardMaterial3D_vj8ph") + +[node name="Torus" parent="ship_helm" index="1"] +material_override = SubResource("StandardMaterial3D_mtdgj") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.220532, 0.0608378) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.901878, 0.0608378) shape = SubResource("BoxShape3D_u6a0w") + +[editable path="ship_helm"] diff --git a/assets/core/interactables/ship-helm/ship_helm.gd b/assets/core/interactables/ship-helm/ship_helm.gd index acb9925..d46401a 100644 --- a/assets/core/interactables/ship-helm/ship_helm.gd +++ b/assets/core/interactables/ship-helm/ship_helm.gd @@ -2,21 +2,21 @@ class_name ShipHelm extends Interactable -@export var parent_ship: Ship -@export var helm_lock_pos: Marker3D +var parent_ship: Ship -var is_being_piloted: bool = false + +func _ready(): + parent_ship = get_parent() #sets the parent ship to the ship that the helm is placed on func interact(): - if !is_being_piloted: + if !parent_ship.ship_is_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: + + elif parent_ship.ship_is_piloted: player_reference.set_is_piloting(false) print("set player to NOT piloting") - is_being_piloted = false parent_ship.ship_is_piloted = false - GameConsole.log_debug("helm pilot state - " + str(is_being_piloted)) + GameConsole.log_debug("helm pilot state - " + str(parent_ship.ship_is_piloted)) diff --git a/assets/core/placeable-objects/ship_helm.blend b/assets/core/placeable-objects/ship_helm.blend deleted file mode 100644 index 27d1313..0000000 Binary files a/assets/core/placeable-objects/ship_helm.blend and /dev/null differ diff --git a/assets/core/placeable-objects/ship_helm.blend.import b/assets/core/placeable-objects/ship_helm.blend.import deleted file mode 100644 index e48ae82..0000000 --- a/assets/core/placeable-objects/ship_helm.blend.import +++ /dev/null @@ -1,51 +0,0 @@ -[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/player-controller/2d_crosshair_dot.png b/assets/core/player-controller/2d_crosshair_dot.png new file mode 100644 index 0000000..aa58704 Binary files /dev/null and b/assets/core/player-controller/2d_crosshair_dot.png differ diff --git a/assets/core/player-controller/2d_crosshair_dot.png.import b/assets/core/player-controller/2d_crosshair_dot.png.import new file mode 100644 index 0000000..43038a6 --- /dev/null +++ b/assets/core/player-controller/2d_crosshair_dot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3lblkyavjtol" +path="res://.godot/imported/2d_crosshair_dot.png-61f11b68155f3e5bb55efff33412dc26.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/core/player-controller/2d_crosshair_dot.png" +dest_files=["res://.godot/imported/2d_crosshair_dot.png-61f11b68155f3e5bb55efff33412dc26.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/core/player-controller/scenes/inverted_crosshair.gdshader b/assets/core/player-controller/scenes/inverted_crosshair.gdshader new file mode 100644 index 0000000..fff9187 --- /dev/null +++ b/assets/core/player-controller/scenes/inverted_crosshair.gdshader @@ -0,0 +1,8 @@ +shader_type canvas_item; + +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + +void fragment(){ + vec4 color = vec4(texture(SCREEN_TEXTURE, SCREEN_UV).rgb, texture(TEXTURE, UV).a); + COLOR = vec4(1.0 - color.rgb, color.a); +} \ No newline at end of file diff --git a/assets/core/player-controller/scenes/player.tscn b/assets/core/player-controller/scenes/player.tscn index c25dd49..1ab7490 100644 --- a/assets/core/player-controller/scenes/player.tscn +++ b/assets/core/player-controller/scenes/player.tscn @@ -1,7 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://c6w0ivy4hetrl"] +[gd_scene load_steps=11 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"] +[ext_resource type="Script" path="res://assets/core/player-controller/scripts/player_hud.gd" id="3_02ne1"] +[ext_resource type="Shader" path="res://assets/core/player-controller/scenes/inverted_crosshair.gdshader" id="3_rakxt"] +[ext_resource type="Texture2D" uid="uid://c3lblkyavjtol" path="res://assets/core/player-controller/2d_crosshair_dot.png" id="4_3uwxe"] [sub_resource type="CapsuleMesh" id="CapsuleMesh_v7b3h"] radius = 0.35 @@ -9,8 +12,18 @@ radius = 0.35 [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qlkab"] radius = 0.35 +[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_fqbrh"] +auto_exposure_enabled = true +auto_exposure_max_sensitivity = 700.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_wmxrr"] +shader = ExtResource("3_rakxt") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0n7pd"] +shader = ExtResource("3_rakxt") + [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera")] -collision_mask = 243 +collision_mask = 242 script = ExtResource("1_bv7t4") camera = NodePath("Neck/Camera3D") @@ -31,8 +44,70 @@ 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"] +attributes = SubResource("CameraAttributesPractical_fqbrh") [node name="RayCast3D" type="RayCast3D" parent="Neck/Camera3D" node_paths=PackedStringArray("player")] target_position = Vector3(0, 0, -2.5) +collision_mask = 256 script = ExtResource("2_wvu3d") player = NodePath("../../..") + +[node name="PlayerHUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("fps_label")] +script = ExtResource("3_02ne1") +fps_label = NodePath("Debug/HBoxContainer/VBoxContainer/MarginContainer/FPSLabel") + +[node name="Overlay" type="Control" parent="PlayerHUD"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 + +[node name="CenterContainer" type="CenterContainer" parent="PlayerHUD/Overlay"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="PlayerHUD/Overlay/CenterContainer"] +material = SubResource("ShaderMaterial_wmxrr") +layout_mode = 2 +texture = ExtResource("4_3uwxe") + +[node name="Debug" type="Control" parent="PlayerHUD"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="PlayerHUD/Debug"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="PlayerHUD/Debug/HBoxContainer"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="PlayerHUD/Debug/HBoxContainer/VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 + +[node name="FPSLabel" type="Label" parent="PlayerHUD/Debug/HBoxContainer/VBoxContainer/MarginContainer"] +material = SubResource("ShaderMaterial_0n7pd") +layout_mode = 2 +theme_override_font_sizes/font_size = 35 +text = "999 FPS" +horizontal_alignment = 2 +vertical_alignment = 1 diff --git a/assets/core/player-controller/scripts/player.gd b/assets/core/player-controller/scripts/player.gd index d1a5560..a3eca63 100644 --- a/assets/core/player-controller/scripts/player.gd +++ b/assets/core/player-controller/scripts/player.gd @@ -52,12 +52,13 @@ func _input(event): func _physics_process(delta: float) -> void: if current_ship != null: - if !is_piloting: - velocity = walk(delta) + _gravity(delta) + _jump(delta) - global_basis = current_ship.global_basis - else: + if is_piloting: #if we are piloting a ship + global_transform.basis = current_ship.global_transform.basis + global_rotation.y = current_ship.global_rotation.y + + else: #if we are NOT piloting a ship + velocity = walk(delta) + _gravity(delta) + _jump(delta) global_rotation.y = current_ship.global_rotation.y - global_rotation.y = current_ship.global_rotation.y else: diff --git a/assets/core/player-controller/scripts/player_hud.gd b/assets/core/player-controller/scripts/player_hud.gd new file mode 100644 index 0000000..1bfa282 --- /dev/null +++ b/assets/core/player-controller/scripts/player_hud.gd @@ -0,0 +1,7 @@ +extends CanvasLayer + + +@export var fps_label: Label + +func _process(delta): + fps_label.text = str(Engine.get_frames_per_second()) + " FPS" diff --git a/assets/core/ships/ship_script.gd b/assets/core/ships/ship_script.gd new file mode 100644 index 0000000..2473c35 --- /dev/null +++ b/assets/core/ships/ship_script.gd @@ -0,0 +1,56 @@ +class_name Ship + +extends RigidBody3D + +@export var player_detection_area: Area3D + +var ship_helm_scene: PackedScene = load("res://assets/core/interactables/ship-helm/ship-helm.tscn") + +var ship_helm: ShipHelm +var piloting_player: Player = null + +var ship_id: int = 0 +var ship_is_piloted: bool = false +var turn_speed: float = 10.0 +var lift_speed: float = 10.0 +var top_speed: float = 10.0 +var move_speed: float = 10.0 +var acceleration: float = 10.0 +var deceleration: float = 20.0 + + +func _ready(): + #connect signals + player_detection_area.body_entered.connect(_on_area_3d_body_entered) + player_detection_area.body_exited.connect(_on_area_3d_body_exited) + + _add_ship_helm(ship_helm_scene) #TEMPORARY TEST + + + ship_id = randi_range(1000, 9999) #assign a random id to the ship as a unique identifier + GameConsole.log_debug("Ship ID: " + str(ship_id)) + + +func _physics_process(delta): + if ship_is_piloted: + pass + + +func _on_area_3d_body_entered(body): + if body is Player: + body.player_entered_ship(global_position, self) + piloting_player = body + print(self.name) + + +func _on_area_3d_body_exited(body): + if body is Player: + body.player_exited_ship(global_position, self) + ship_is_piloted = false + piloting_player = null + + +func _add_ship_helm(_ship_helm_scene: PackedScene): + var ship_helm = _ship_helm_scene.instantiate() + add_child(ship_helm) + ship_helm = get_node("ShipHelm") diff --git a/assets/core/ships/shuttle-class/shuttle-class.tscn b/assets/core/ships/shuttle-class/shuttle-class.tscn new file mode 100644 index 0000000..4c324a7 --- /dev/null +++ b/assets/core/ships/shuttle-class/shuttle-class.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=7 format=3 uid="uid://y0xb2vktsr1k"] + +[ext_resource type="Script" path="res://assets/core/ships/ship_script.gd" id="1_ghft7"] +[ext_resource type="Texture2D" uid="uid://gymb0tju4y67" path="res://addons/kennysprototypetextures/Dark/texture_black (1).png" id="2_3koq8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_6gbwt"] +size = Vector3(5, 0.15, 20) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g0mto"] +albedo_texture = ExtResource("2_3koq8") +uv1_triplanar = true + +[sub_resource type="BoxMesh" id="BoxMesh_d2exa"] +size = Vector3(5, 0.15, 20) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7o08p"] +size = Vector3(4.99609, 2.95453, 20.0022) + +[node name="ShuttleClass" type="RigidBody3D" node_paths=PackedStringArray("player_detection_area")] +collision_layer = 8 +collision_mask = 200 +mass = 700.0 +gravity_scale = 0.0 +script = ExtResource("1_ghft7") +player_detection_area = NodePath("PlayerDetectionArea") + +[node name="ShipToShipCol" type="CollisionShape3D" parent="."] +shape = SubResource("BoxShape3D_6gbwt") + +[node name="PlayerShipShape" type="StaticBody3D" parent="."] +collision_layer = 16 +collision_mask = 5 + +[node name="ShipMesh" type="MeshInstance3D" parent="PlayerShipShape"] +material_override = SubResource("StandardMaterial3D_g0mto") +mesh = SubResource("BoxMesh_d2exa") +skeleton = NodePath("../..") + +[node name="ShipToShipCol" type="CollisionShape3D" parent="PlayerShipShape"] +shape = SubResource("BoxShape3D_6gbwt") + +[node name="PlayerDetectionArea" type="Area3D" parent="."] + +[node name="PlayerDetectionAreaCol" type="CollisionShape3D" parent="PlayerDetectionArea"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.55551, 0) +shape = SubResource("BoxShape3D_7o08p") diff --git a/assets/core/ships/test-ship/test_ship.gd b/assets/core/ships/test-ship/test_ship.gd index d6f0d07..0049acc 100644 --- a/assets/core/ships/test-ship/test_ship.gd +++ b/assets/core/ships/test-ship/test_ship.gd @@ -1,4 +1,4 @@ -class_name Ship + extends RigidBody3D @export var ship_area: Area3D diff --git a/project.godot b/project.godot index 1492829..c1b028f 100644 --- a/project.godot +++ b/project.godot @@ -28,6 +28,7 @@ file_logging/enable_file_logging=true window/size/viewport_width=1280 window/size/viewport_height=720 +window/vsync/vsync_mode=0 [dotnet]