new build mechanic
This commit is contained in:
@@ -5,3 +5,4 @@
|
|||||||
[node name="DoubleBeds" type="Node3D"]
|
[node name="DoubleBeds" type="Node3D"]
|
||||||
|
|
||||||
[node name="DoubleBeds" parent="." instance=ExtResource("1_kkvf5")]
|
[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)
|
||||||
|
|||||||
@@ -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="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://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://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="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"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_esjgi"]
|
||||||
size = Vector3(22.2341, 4.23804, 0.494629)
|
size = Vector3(22.2341, 4.23804, 0.494629)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_eosii"]
|
[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")]
|
[node name="Cart" type="Node3D" node_paths=PackedStringArray("cartTop")]
|
||||||
script = ExtResource("1_esjgi")
|
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)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.282789, 1.61902, -2.6054)
|
||||||
shape = SubResource("BoxShape3D_esjgi")
|
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="."]
|
||||||
|
script = ExtResource("5_eosii")
|
||||||
metadata/is_building_area = true
|
metadata/is_building_area = true
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="BuildingArea"]
|
[node name="smallBuildingArea2" type="CollisionShape3D" parent="BuildingArea"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.374649, -0.275452, 2.38014)
|
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="CollisionShape3D2" type="CollisionShape3D" parent="BuildingArea"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.374649, -0.275452, -1.22106)
|
|
||||||
shape = SubResource("BoxShape3D_eosii")
|
shape = SubResource("BoxShape3D_eosii")
|
||||||
metadata/is_building_area = true
|
metadata/is_building_area = true
|
||||||
|
|||||||
@@ -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="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://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="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"]
|
[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"]
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_21xkr"]
|
||||||
lifetime_randomness = 0.55
|
lifetime_randomness = 0.55
|
||||||
emission_shape = 3
|
emission_shape = 3
|
||||||
@@ -18,7 +36,10 @@ size = Vector2(0.5, 0.5)
|
|||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_21xkr"]
|
[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="."]
|
[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)
|
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")
|
skeleton = NodePath("../Road")
|
||||||
|
|
||||||
[node name="Road" type="MeshInstance3D" parent="."]
|
[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")
|
mesh = ExtResource("4_jjvhh")
|
||||||
|
|
||||||
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
|
[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)
|
transform = Transform3D(3.70763, 0, 0, 0, 2.24982, 0, 0, 0, 3.71542, -7.77808, 47.2887, -60.0289)
|
||||||
emitting = false
|
emitting = false
|
||||||
amount = 500
|
amount = 1006
|
||||||
speed_scale = 5.17
|
speed_scale = 5.17
|
||||||
randomness = 1.0
|
randomness = 1.0
|
||||||
trail_lifetime = 1.01
|
trail_lifetime = 1.01
|
||||||
@@ -62,7 +83,7 @@ axis_lock_angular_z = true
|
|||||||
mass = 0.001
|
mass = 0.001
|
||||||
gravity_scale = 0.0
|
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)
|
transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 17.894, 14)
|
||||||
current = true
|
current = true
|
||||||
script = ExtResource("7_6bp64")
|
script = ExtResource("7_6bp64")
|
||||||
@@ -70,6 +91,8 @@ rayLength = 1000.0
|
|||||||
camera_speed = 2.0
|
camera_speed = 2.0
|
||||||
ownRigidBody = NodePath("..")
|
ownRigidBody = NodePath("..")
|
||||||
endZoom = NodePath("../endZoom")
|
endZoom = NodePath("../endZoom")
|
||||||
|
particlesSystem = NodePath("../../GPUParticles3D")
|
||||||
|
worldEnvironmentSystem = NodePath("../../WorldEnvironment")
|
||||||
|
|
||||||
[node name="DebugLabel1" type="Label" parent="RigidBody3D/Camera3D"]
|
[node name="DebugLabel1" type="Label" parent="RigidBody3D/Camera3D"]
|
||||||
offset_right = 40.0
|
offset_right = 40.0
|
||||||
|
|||||||
41
Scripts/building_area.gd
Normal file
41
Scripts/building_area.gd
Normal file
@@ -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()
|
||||||
1
Scripts/building_area.gd.uid
Normal file
1
Scripts/building_area.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bcmd74mxocn7e
|
||||||
@@ -4,6 +4,8 @@ extends Camera3D
|
|||||||
@export var camera_speed: float
|
@export var camera_speed: float
|
||||||
@export var ownRigidBody: RigidBody3D
|
@export var ownRigidBody: RigidBody3D
|
||||||
@export var endZoom: Node3D
|
@export var endZoom: Node3D
|
||||||
|
@export var particlesSystem: GPUParticles3D
|
||||||
|
@export var worldEnvironmentSystem: WorldEnvironment
|
||||||
var debugLabel
|
var debugLabel
|
||||||
var global_delta
|
var global_delta
|
||||||
var default_pos
|
var default_pos
|
||||||
@@ -11,9 +13,13 @@ var default_pos
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
default_pos = self.position
|
default_pos = self.position
|
||||||
debugLabel = $DebugLabel1
|
debugLabel = $DebugLabel1
|
||||||
|
particlesSystem.emitting = true
|
||||||
|
var environment = worldEnvironmentSystem.environment
|
||||||
|
environment.fog_enabled = true
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
debugLabel.text = "Mode: " + str(Global.build_mode)
|
||||||
global_delta = delta
|
global_delta = delta
|
||||||
look_at(ownRigidBody.position)
|
look_at(ownRigidBody.position)
|
||||||
self.position.y = -0.1 * pow(self.position.z,2) + 40
|
self.position.y = -0.1 * pow(self.position.z,2) + 40
|
||||||
|
|||||||
@@ -5,31 +5,10 @@ extends Node3D
|
|||||||
@export var cartTop: MeshInstance3D
|
@export var cartTop: MeshInstance3D
|
||||||
@export var mainCamera: Camera3D
|
@export var mainCamera: Camera3D
|
||||||
|
|
||||||
var build_mode = false
|
|
||||||
var previewObject
|
var previewObject
|
||||||
var targetPos
|
var targetPos
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("hide_top"):
|
if event.is_action_pressed("hide_top"):
|
||||||
cartTop.visible = !cartTop.visible
|
cartTop.visible = !cartTop.visible
|
||||||
if event.is_action_pressed("enter_build_mode"):
|
#add_preview()
|
||||||
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)
|
|
||||||
|
|||||||
17
Scripts/global_script.gd
Normal file
17
Scripts/global_script.gd
Normal file
@@ -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
|
||||||
|
|
||||||
1
Scripts/global_script.gd.uid
Normal file
1
Scripts/global_script.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://be4romsmai6jd
|
||||||
1
Scripts/small_building_area.gd
Normal file
1
Scripts/small_building_area.gd
Normal file
@@ -0,0 +1 @@
|
|||||||
|
extends CollisionShape3D
|
||||||
1
Scripts/small_building_area.gd.uid
Normal file
1
Scripts/small_building_area.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://c3sewowdqkd83
|
||||||
@@ -15,6 +15,10 @@ run/main_scene="uid://bj7y7q2qkpnci"
|
|||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
[autoload]
|
||||||
|
|
||||||
|
Global="*res://Scripts/global_script.gd"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
hide_top={
|
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)
|
, 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)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user