From 248ef3b9124a1a8d23185cd0ee75ee2ac265f423 Mon Sep 17 00:00:00 2001 From: Nikolai Fesenko <152747946+NikolaiFesenko-code@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:43:11 +0200 Subject: [PATCH] build preview update --- .../textures/double_bed_metal.png.import | 13 +++++---- Scenes/Prefabs/DoubleBeds.tscn | 25 ++++++++++++++-- Scenes/Prefabs/cart.tscn | 28 ++++++++++-------- Scripts/build_object.gd | 29 +++++++++++++++++++ Scripts/build_object.gd.uid | 1 + Scripts/building_area.gd | 19 +++++++++++- Scripts/global_script.gd | 10 ++++++- Shaders/build_transparent.gdshader | 15 ++++++++++ Shaders/build_transparent.gdshader.uid | 1 + 9 files changed, 118 insertions(+), 23 deletions(-) create mode 100644 Scripts/build_object.gd create mode 100644 Scripts/build_object.gd.uid create mode 100644 Shaders/build_transparent.gdshader create mode 100644 Shaders/build_transparent.gdshader.uid diff --git a/Blends/Mobel/textures/double_bed_metal.png.import b/Blends/Mobel/textures/double_bed_metal.png.import index 50af62f..35d5b44 100644 --- a/Blends/Mobel/textures/double_bed_metal.png.import +++ b/Blends/Mobel/textures/double_bed_metal.png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://84bnb4rnuhuq" -path="res://.godot/imported/double_bed_metal.png-ecfdaed077568d6224139d3066a4c4c8.ctex" +path.s3tc="res://.godot/imported/double_bed_metal.png-ecfdaed077568d6224139d3066a4c4c8.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://Blends/Mobel/textures/double_bed_metal.png" -dest_files=["res://.godot/imported/double_bed_metal.png-ecfdaed077568d6224139d3066a4c4c8.ctex"] +dest_files=["res://.godot/imported/double_bed_metal.png-ecfdaed077568d6224139d3066a4c4c8.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/Scenes/Prefabs/DoubleBeds.tscn b/Scenes/Prefabs/DoubleBeds.tscn index a312c34..dec0e9a 100644 --- a/Scenes/Prefabs/DoubleBeds.tscn +++ b/Scenes/Prefabs/DoubleBeds.tscn @@ -1,8 +1,27 @@ -[gd_scene load_steps=2 format=3 uid="uid://0t0cvsitlfmm"] +[gd_scene load_steps=9 format=3 uid="uid://0t0cvsitlfmm"] -[ext_resource type="PackedScene" uid="uid://ca3mea0tt0xvg" path="res://Blends/Mobel/DoubleBeds.blend" id="1_kkvf5"] +[ext_resource type="Script" uid="uid://c61rr6to3q566" path="res://Scripts/build_object.gd" id="1_nn5da"] +[ext_resource type="ArrayMesh" uid="uid://cahq2fdeqqwhx" path="res://Blends/Mobel/DoubleBeds.obj" id="2_8ssp7"] +[ext_resource type="Texture2D" uid="uid://84bnb4rnuhuq" path="res://Blends/Mobel/textures/double_bed_metal.png" id="3_nn5da"] +[ext_resource type="Texture2D" uid="uid://lbbig7lpdun3" path="res://Blends/Mobel/textures/Material.003 Roughness.png" id="4_dn7et"] +[ext_resource type="Texture2D" uid="uid://kl1jplui8wfq" path="res://Blends/Mobel/textures/Material.003 Base Color.png" id="5_sp2kd"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c1046"] +albedo_texture = ExtResource("3_nn5da") +roughness_texture = ExtResource("4_dn7et") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k1k40"] +albedo_texture = ExtResource("5_sp2kd") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tma46"] +albedo_texture = ExtResource("5_sp2kd") [node name="DoubleBeds" type="Node3D"] +script = ExtResource("1_nn5da") -[node name="DoubleBeds" parent="." instance=ExtResource("1_kkvf5")] +[node name="DoubleBeds" type="MeshInstance3D" parent="."] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1.83435, 0, 0) +mesh = ExtResource("2_8ssp7") +surface_material_override/0 = SubResource("StandardMaterial3D_c1046") +surface_material_override/1 = SubResource("StandardMaterial3D_k1k40") +surface_material_override/2 = SubResource("StandardMaterial3D_tma46") diff --git a/Scenes/Prefabs/cart.tscn b/Scenes/Prefabs/cart.tscn index d33e00c..c13e5df 100644 --- a/Scenes/Prefabs/cart.tscn +++ b/Scenes/Prefabs/cart.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=8 format=3 uid="uid://dim2geqhn6d35"] +[gd_scene load_steps=11 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"] +[ext_resource type="Shader" uid="uid://bfv6ckihralab" path="res://Shaders/build_transparent.gdshader" id="6_ru0md"] [sub_resource type="BoxShape3D" id="BoxShape3D_esjgi"] size = Vector3(22.2341, 4.23804, 0.494629) @@ -12,6 +13,13 @@ size = Vector3(22.2341, 4.23804, 0.494629) [sub_resource type="BoxShape3D" id="BoxShape3D_eosii"] size = Vector3(5.40002, 4.29805, 2.28394) +[sub_resource type="BoxMesh" id="BoxMesh_eosii"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_u7bw1"] +render_priority = 0 +shader = ExtResource("6_ru0md") +shader_parameter/alpha = 0.5 + [node name="Cart" type="Node3D" node_paths=PackedStringArray("cartTop")] script = ExtResource("1_esjgi") cartTop = NodePath("Cart-top") @@ -61,21 +69,17 @@ 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="."] +[node name="BuildingArea" type="StaticBody3D" parent="." node_paths=PackedStringArray("buildTransparentPreivew")] script = ExtResource("5_eosii") +buildTransparentPreivew = NodePath("BuildAreaModeView") metadata/is_building_area = true [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 + +[node name="BuildAreaModeView" type="MeshInstance3D" parent="BuildingArea"] +transform = Transform3D(5.40002, 0, 0, 0, 4.29805, 0, 0, 0, 2.28394, -5.69414, 1.02766, -1.22106) +mesh = SubResource("BoxMesh_eosii") +surface_material_override/0 = SubResource("ShaderMaterial_u7bw1") diff --git a/Scripts/build_object.gd b/Scripts/build_object.gd new file mode 100644 index 0000000..e0f3eca --- /dev/null +++ b/Scripts/build_object.gd @@ -0,0 +1,29 @@ +extends Node3D + +var meshInstance: MeshInstance3D +var default_materials + +#var build_material +@onready var build_material = load("res://Shaders/build_transparent.gdshader") + +func _ready() -> void: + default_materials = Array() + meshInstance = $DoubleBeds + default_materials.resize(meshInstance.get_surface_override_material_count()) + set_default_materials() + Global.preview_created.connect(_on_preview_create) + print(build_material) + +func set_default_materials(): + for i in meshInstance.get_surface_override_material_count(): + default_materials[i] = meshInstance.get_surface_override_material(i) + + +func set_green_color(): + for i in meshInstance.get_surface_override_material_count(): + meshInstance.set_surface_override_material(i, Global.build_material) + + + +func _on_preview_create(): + set_green_color() diff --git a/Scripts/build_object.gd.uid b/Scripts/build_object.gd.uid new file mode 100644 index 0000000..868841c --- /dev/null +++ b/Scripts/build_object.gd.uid @@ -0,0 +1 @@ +uid://c61rr6to3q566 diff --git a/Scripts/building_area.gd b/Scripts/building_area.gd index 456daf1..b298d20 100644 --- a/Scripts/building_area.gd +++ b/Scripts/building_area.gd @@ -1,13 +1,19 @@ extends StaticBody3D + + @onready var beds = preload("res://Scenes/Prefabs/DoubleBeds.tscn") +@export var buildTransparentPreivew: MeshInstance3D + var areas var previewObject: Node3D var is_placed = false func _ready() -> void: areas = get_children() + buildTransparentPreivew.visible = false Global.exit_build_mode.connect(_on_exit_build_mode) + Global.enter_build_mode.connect(_on_enter_build_mode) func _input_event(camera: Camera3D, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void: @@ -27,15 +33,26 @@ func _mouse_exit() -> void: func show_preview(): previewObject = beds.instantiate() areas[0].add_child(previewObject) + buildTransparentPreivew.visible = false + Global.preview_created.emit() func hide_preview(): if is_placed != true: if previewObject != null: previewObject.queue_free() + buildTransparentPreivew.visible = true func place_object(): is_placed = true + buildTransparentPreivew.visible = false - +func _on_enter_build_mode(): + if !is_placed: + buildTransparentPreivew.visible = true func _on_exit_build_mode(): hide_preview() + buildTransparentPreivew.visible = false + +func set_preview_material(): + #beds + pass diff --git a/Scripts/global_script.gd b/Scripts/global_script.gd index a3f2565..219bbcd 100644 --- a/Scripts/global_script.gd +++ b/Scripts/global_script.gd @@ -1,17 +1,25 @@ extends Node3D @export var debugLabel1: Label - +@onready var build_material = load("res://Shaders/build_transparent.gdshader") signal exit_build_mode +signal enter_build_mode + +signal preview_created +signal preview_destroyed var build_mode: bool = false +func _ready() -> void: + build_material.set("alpha", 0.5) + func _input(event: InputEvent) -> void: if event.is_action_released("enter_build_mode"): if build_mode: exit_build_mode.emit() build_mode = false else: + enter_build_mode.emit() build_mode = true diff --git a/Shaders/build_transparent.gdshader b/Shaders/build_transparent.gdshader new file mode 100644 index 0000000..c0d9f72 --- /dev/null +++ b/Shaders/build_transparent.gdshader @@ -0,0 +1,15 @@ +shader_type spatial; +uniform float alpha; +void vertex() { + // Called for every vertex the material is visible on. +} + +void fragment() { + ALBEDO = vec3(0,1.0,0); + ALPHA = alpha; +} + +//void light() { +// // Called for every pixel for every light affecting the material. +// // Uncomment to replace the default light processing function with this one. +//} diff --git a/Shaders/build_transparent.gdshader.uid b/Shaders/build_transparent.gdshader.uid new file mode 100644 index 0000000..75d313e --- /dev/null +++ b/Shaders/build_transparent.gdshader.uid @@ -0,0 +1 @@ +uid://bfv6ckihralab