diff --git a/Scenes/Prefabs/DoubleBeds.tscn b/Scenes/Prefabs/DoubleBeds.tscn index 2b06ed0..a312c34 100644 --- a/Scenes/Prefabs/DoubleBeds.tscn +++ b/Scenes/Prefabs/DoubleBeds.tscn @@ -5,3 +5,4 @@ [node name="DoubleBeds" type="Node3D"] [node name="DoubleBeds" parent="." instance=ExtResource("1_kkvf5")] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1.83435, 0, 0) diff --git a/Scenes/Prefabs/cart.tscn b/Scenes/Prefabs/cart.tscn index 54d0394..d33e00c 100644 --- a/Scenes/Prefabs/cart.tscn +++ b/Scenes/Prefabs/cart.tscn @@ -1,15 +1,16 @@ -[gd_scene load_steps=7 format=3 uid="uid://dim2geqhn6d35"] +[gd_scene load_steps=8 format=3 uid="uid://dim2geqhn6d35"] [ext_resource type="Script" uid="uid://dhls6unflalvd" path="res://Scripts/cart.gd" id="1_esjgi"] [ext_resource type="ArrayMesh" uid="uid://p3d7iitismhf" path="res://Blends/Cart/cart-bottom.obj" id="1_ux2tx"] [ext_resource type="ArrayMesh" uid="uid://docto7iocves6" path="res://Blends/Cart/wheels.obj" id="2_2wj72"] [ext_resource type="ArrayMesh" uid="uid://cayqoyyq7nbij" path="res://Blends/Cart/cart-top.obj" id="3_2wj72"] +[ext_resource type="Script" uid="uid://bcmd74mxocn7e" path="res://Scripts/building_area.gd" id="5_eosii"] [sub_resource type="BoxShape3D" id="BoxShape3D_esjgi"] size = Vector3(22.2341, 4.23804, 0.494629) [sub_resource type="BoxShape3D" id="BoxShape3D_eosii"] -size = Vector3(17.5376, 0.0286865, 2.28394) +size = Vector3(5.40002, 4.29805, 2.28394) [node name="Cart" type="Node3D" node_paths=PackedStringArray("cartTop")] script = ExtResource("1_esjgi") @@ -60,15 +61,21 @@ shape = SubResource("BoxShape3D_esjgi") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.282789, 1.61902, -2.6054) shape = SubResource("BoxShape3D_esjgi") +[node name="BuildingArea2" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.23003, 0, 0) +script = ExtResource("5_eosii") +metadata/is_building_area = true + +[node name="smallBuildingArea2" type="CollisionShape3D" parent="BuildingArea2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.69414, 1.02766, -1.22106) +shape = SubResource("BoxShape3D_eosii") +metadata/is_building_area = true + [node name="BuildingArea" type="StaticBody3D" parent="."] +script = ExtResource("5_eosii") metadata/is_building_area = true -[node name="CollisionShape3D" type="CollisionShape3D" parent="BuildingArea"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.374649, -0.275452, 2.38014) -shape = SubResource("BoxShape3D_eosii") -metadata/is_building_area = true - -[node name="CollisionShape3D2" type="CollisionShape3D" parent="BuildingArea"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.374649, -0.275452, -1.22106) +[node name="smallBuildingArea2" type="CollisionShape3D" parent="BuildingArea"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.69414, 1.02766, -1.22106) shape = SubResource("BoxShape3D_eosii") metadata/is_building_area = true diff --git a/Scenes/main.tscn b/Scenes/main.tscn index d148233..a4504a9 100644 --- a/Scenes/main.tscn +++ b/Scenes/main.tscn @@ -1,10 +1,28 @@ -[gd_scene load_steps=8 format=3 uid="uid://bj7y7q2qkpnci"] +[gd_scene load_steps=11 format=3 uid="uid://bj7y7q2qkpnci"] [ext_resource type="ArrayMesh" uid="uid://622ethh2pdfa" path="res://Blends/road/road.obj" id="4_jjvhh"] [ext_resource type="PackedScene" uid="uid://dim2geqhn6d35" path="res://Scenes/Prefabs/cart.tscn" id="6_21xkr"] [ext_resource type="PackedScene" uid="uid://dy03tqug33fep" path="res://Blends/ground.blend" id="6_344ge"] [ext_resource type="Script" uid="uid://drrp1k2q71hq2" path="res://Scripts/camera_3d.gd" id="7_6bp64"] +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_jjvhh"] +sky_top_color = Color(0.654771, 0.60129, 0.578102, 1) +sky_horizon_color = Color(0.866942, 0.845822, 0.831025, 1) +ground_horizon_color = Color(0.866942, 0.845822, 0.831025, 1) + +[sub_resource type="Sky" id="Sky_kry3j"] +sky_material = SubResource("ProceduralSkyMaterial_jjvhh") + +[sub_resource type="Environment" id="Environment_21xkr"] +background_mode = 2 +sky = SubResource("Sky_kry3j") +tonemap_mode = 2 +ssao_enabled = true +glow_enabled = true +fog_mode = 1 +fog_density = 1.0 +fog_depth_curve = 4.75681 + [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_21xkr"] lifetime_randomness = 0.55 emission_shape = 3 @@ -18,7 +36,10 @@ size = Vector2(0.5, 0.5) [sub_resource type="BoxShape3D" id="BoxShape3D_21xkr"] -[node name="Node3D" type="Node3D"] +[node name="Main" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_21xkr") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(-0.866025, -0.5, -2.18557e-08, 0, -4.37114e-08, 1, -0.5, 0.866025, 3.78552e-08, 0, 0, 0) @@ -30,13 +51,13 @@ mesh = ExtResource("4_jjvhh") skeleton = NodePath("../Road") [node name="Road" type="MeshInstance3D" parent="."] -transform = Transform3D(10.9512, 0, 0, 0, 1, 0, 0, 0, 1, -53.9758, 37.1737, -62.1734) +transform = Transform3D(10.9512, 0, 0, 0, 1, 0, 0, 0, 1, -54.4288, 36.9927, -61.8752) mesh = ExtResource("4_jjvhh") [node name="GPUParticles3D" type="GPUParticles3D" parent="."] transform = Transform3D(3.70763, 0, 0, 0, 2.24982, 0, 0, 0, 3.71542, -7.77808, 47.2887, -60.0289) emitting = false -amount = 500 +amount = 1006 speed_scale = 5.17 randomness = 1.0 trail_lifetime = 1.01 @@ -62,7 +83,7 @@ axis_lock_angular_z = true mass = 0.001 gravity_scale = 0.0 -[node name="Camera3D" type="Camera3D" parent="RigidBody3D" node_paths=PackedStringArray("ownRigidBody", "endZoom")] +[node name="Camera3D" type="Camera3D" parent="RigidBody3D" node_paths=PackedStringArray("ownRigidBody", "endZoom", "particlesSystem", "worldEnvironmentSystem")] transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 17.894, 14) current = true script = ExtResource("7_6bp64") @@ -70,6 +91,8 @@ rayLength = 1000.0 camera_speed = 2.0 ownRigidBody = NodePath("..") endZoom = NodePath("../endZoom") +particlesSystem = NodePath("../../GPUParticles3D") +worldEnvironmentSystem = NodePath("../../WorldEnvironment") [node name="DebugLabel1" type="Label" parent="RigidBody3D/Camera3D"] offset_right = 40.0 diff --git a/Scripts/building_area.gd b/Scripts/building_area.gd new file mode 100644 index 0000000..456daf1 --- /dev/null +++ b/Scripts/building_area.gd @@ -0,0 +1,41 @@ +extends StaticBody3D + +@onready var beds = preload("res://Scenes/Prefabs/DoubleBeds.tscn") + +var areas +var previewObject: Node3D +var is_placed = false +func _ready() -> void: + areas = get_children() + Global.exit_build_mode.connect(_on_exit_build_mode) + + +func _input_event(camera: Camera3D, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void: + if event.is_action_pressed("mouse_click") and Global.build_mode: + place_object() + + + +func _mouse_enter() -> void: + if !is_placed and Global.build_mode: + show_preview() + +func _mouse_exit() -> void: + if !is_placed and Global.build_mode: + hide_preview() + +func show_preview(): + previewObject = beds.instantiate() + areas[0].add_child(previewObject) + +func hide_preview(): + if is_placed != true: + if previewObject != null: + previewObject.queue_free() + +func place_object(): + is_placed = true + + +func _on_exit_build_mode(): + hide_preview() diff --git a/Scripts/building_area.gd.uid b/Scripts/building_area.gd.uid new file mode 100644 index 0000000..a117047 --- /dev/null +++ b/Scripts/building_area.gd.uid @@ -0,0 +1 @@ +uid://bcmd74mxocn7e diff --git a/Scripts/camera_3d.gd b/Scripts/camera_3d.gd index 82b25ff..41cb3cb 100644 --- a/Scripts/camera_3d.gd +++ b/Scripts/camera_3d.gd @@ -4,6 +4,8 @@ extends Camera3D @export var camera_speed: float @export var ownRigidBody: RigidBody3D @export var endZoom: Node3D +@export var particlesSystem: GPUParticles3D +@export var worldEnvironmentSystem: WorldEnvironment var debugLabel var global_delta var default_pos @@ -11,9 +13,13 @@ var default_pos func _ready() -> void: default_pos = self.position debugLabel = $DebugLabel1 + particlesSystem.emitting = true + var environment = worldEnvironmentSystem.environment + environment.fog_enabled = true func _process(delta: float) -> void: + debugLabel.text = "Mode: " + str(Global.build_mode) global_delta = delta look_at(ownRigidBody.position) self.position.y = -0.1 * pow(self.position.z,2) + 40 diff --git a/Scripts/cart.gd b/Scripts/cart.gd index 891b565..7218fb6 100644 --- a/Scripts/cart.gd +++ b/Scripts/cart.gd @@ -5,31 +5,10 @@ extends Node3D @export var cartTop: MeshInstance3D @export var mainCamera: Camera3D -var build_mode = false var previewObject var targetPos func _input(event: InputEvent) -> void: if event.is_action_pressed("hide_top"): cartTop.visible = !cartTop.visible - if event.is_action_pressed("enter_build_mode"): - build_mode = !build_mode - add_preview() - -func _process(_delta: float) -> void: - if build_mode: - targetPos = mainCamera.getGlobalRayTargetObject() - #mainCamera.debugLabel.text = targetPos.collider.name - - if is_instance_valid(targetPos): - if targetPos.collider.has_meta("is_building_area"): - #if targetPos.collider.is_building_area == true: - previewObject.visible = true - previewObject.global_position = targetPos.position - else: - previewObject.visible = false - - -func add_preview(): - previewObject = beds.instantiate() - get_tree().root.get_child(0).add_child(previewObject) + #add_preview() diff --git a/Scripts/global_script.gd b/Scripts/global_script.gd new file mode 100644 index 0000000..a3f2565 --- /dev/null +++ b/Scripts/global_script.gd @@ -0,0 +1,17 @@ +extends Node3D +@export var debugLabel1: Label + + +signal exit_build_mode + +var build_mode: bool = false + + +func _input(event: InputEvent) -> void: + if event.is_action_released("enter_build_mode"): + if build_mode: + exit_build_mode.emit() + build_mode = false + else: + build_mode = true + diff --git a/Scripts/global_script.gd.uid b/Scripts/global_script.gd.uid new file mode 100644 index 0000000..a3e3165 --- /dev/null +++ b/Scripts/global_script.gd.uid @@ -0,0 +1 @@ +uid://be4romsmai6jd diff --git a/Scripts/small_building_area.gd b/Scripts/small_building_area.gd new file mode 100644 index 0000000..affc6ce --- /dev/null +++ b/Scripts/small_building_area.gd @@ -0,0 +1 @@ +extends CollisionShape3D diff --git a/Scripts/small_building_area.gd.uid b/Scripts/small_building_area.gd.uid new file mode 100644 index 0000000..aebde8c --- /dev/null +++ b/Scripts/small_building_area.gd.uid @@ -0,0 +1 @@ +uid://c3sewowdqkd83 diff --git a/project.godot b/project.godot index 291c987..edc585c 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,10 @@ run/main_scene="uid://bj7y7q2qkpnci" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" +[autoload] + +Global="*res://Scripts/global_script.gd" + [input] hide_top={ @@ -38,3 +42,8 @@ camera_zoom={ , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(72, 17),"global_position":Vector2(81, 65),"factor":0.0300018,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null) ] } +mouse_click={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(146, 26),"global_position":Vector2(155, 74),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +}