new build mechanic
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
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 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
|
||||
|
||||
@@ -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()
|
||||
|
||||
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/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)
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user