clean up and restructuring
This commit is contained in:
parent
61dee85aa3
commit
37bb550544
|
@ -48,8 +48,6 @@ func _ready():
|
||||||
)
|
)
|
||||||
|
|
||||||
func set_state(stateInfo):
|
func set_state(stateInfo):
|
||||||
print("Setting state: ", stateInfo)
|
|
||||||
|
|
||||||
if stateInfo == null:
|
if stateInfo == null:
|
||||||
view.texture = null
|
view.texture = null
|
||||||
mesh.visible = true
|
mesh.visible = true
|
||||||
|
|
|
@ -9,5 +9,5 @@ func _ready():
|
||||||
|
|
||||||
if movable:
|
if movable:
|
||||||
movable.on_moved.connect(func():
|
movable.on_moved.connect(func():
|
||||||
House.body.save_all_entities()
|
App.house.save_all_entities()
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,7 +26,7 @@ func _ready():
|
||||||
remove_child(chart_button)
|
remove_child(chart_button)
|
||||||
|
|
||||||
chart_button.on_button_down.connect(func():
|
chart_button.on_button_down.connect(func():
|
||||||
House.body.create_entity(entity_id, global_position, "line_chart")
|
App.house.create_entity(entity_id, global_position, "line_chart")
|
||||||
remove_child(chart_button)
|
remove_child(chart_button)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,6 @@ func set_state(stateInfo):
|
||||||
if stateInfo == null:
|
if stateInfo == null:
|
||||||
return
|
return
|
||||||
|
|
||||||
print(stateInfo)
|
|
||||||
|
|
||||||
var state = stateInfo["state"]
|
var state = stateInfo["state"]
|
||||||
var attributes = stateInfo["attributes"]
|
var attributes = stateInfo["attributes"]
|
||||||
|
|
||||||
|
@ -39,7 +37,7 @@ func set_state(stateInfo):
|
||||||
animation.play("clear-night")
|
animation.play("clear-night")
|
||||||
"cloudy":
|
"cloudy":
|
||||||
weather_label.text = "Cloudy"
|
weather_label.text = "Cloudy"
|
||||||
animation.play("cloudy")
|
animation.play("partly-cloudy-day")
|
||||||
"fog":
|
"fog":
|
||||||
weather_label.text = "Fog"
|
weather_label.text = "Fog"
|
||||||
animation.play("fog")
|
animation.play("fog")
|
||||||
|
|
|
@ -30426,8 +30426,7 @@ transform = Transform3D(0.28, 0, 0, 0, 0.28, 0, 0, 0, 0.28, -0.14, 0.01, 0)
|
||||||
pixel_size = 0.001
|
pixel_size = 0.001
|
||||||
render_priority = 15
|
render_priority = 15
|
||||||
sprite_frames = SubResource("SpriteFrames_71wxj")
|
sprite_frames = SubResource("SpriteFrames_71wxj")
|
||||||
animation = &"sleet"
|
animation = &"partly-cloudy-day"
|
||||||
frame_progress = 0.689981
|
|
||||||
|
|
||||||
[node name="WeatherLabel" type="Label3D" parent="."]
|
[node name="WeatherLabel" type="Label3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05, 0.02, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05, 0.02, 0)
|
||||||
|
|
|
@ -2,20 +2,19 @@ extends Node3D
|
||||||
|
|
||||||
const VoiceAssistant = preload ("res://content/system/assist/assist.tscn")
|
const VoiceAssistant = preload ("res://content/system/assist/assist.tscn")
|
||||||
const environment_passthrough_material = preload ("res://assets/environment_passthrough.tres")
|
const environment_passthrough_material = preload ("res://assets/environment_passthrough.tres")
|
||||||
|
const Menu = preload ("res://content/ui/menu/menu.gd")
|
||||||
|
const OnboardingScene = preload ("res://content/ui/onboarding/onboarding.tscn")
|
||||||
|
|
||||||
@onready var environment: WorldEnvironment = $WorldEnvironment
|
@onready var environment: WorldEnvironment = $WorldEnvironment
|
||||||
@onready var camera: XRCamera3D = $XROrigin3D/XRCamera3D
|
@onready var camera: XRCamera3D = %XRCamera3D
|
||||||
@onready var controller_left = $XROrigin3D/XRControllerLeft
|
@onready var controller_left = %XRControllerLeft
|
||||||
@onready var controller_right = $XROrigin3D/XRControllerRight
|
@onready var controller_right = %XRControllerRight
|
||||||
@onready var house = $House
|
@onready var house = $House
|
||||||
@onready var menu = $Menu
|
@onready var menu: Menu = $Menu
|
||||||
@onready var keyboard = $Keyboard
|
|
||||||
@onready var xr: XRToolsStartXR = $StartXR
|
@onready var xr: XRToolsStartXR = $StartXR
|
||||||
var voice_assistant = null
|
var voice_assistant = null
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
# In case we're running on the headset, use the passthrough sky
|
|
||||||
|
|
||||||
if OS.get_name() == "Android":
|
if OS.get_name() == "Android":
|
||||||
# OS.request_permissions()
|
# OS.request_permissions()
|
||||||
environment.environment = environment_passthrough_material
|
environment.environment = environment_passthrough_material
|
||||||
|
@ -25,51 +24,24 @@ func _ready():
|
||||||
|
|
||||||
create_voice_assistant()
|
create_voice_assistant()
|
||||||
|
|
||||||
controller_left.button_pressed.connect(func(name):
|
|
||||||
_emit_action(name, true, false)
|
|
||||||
)
|
|
||||||
|
|
||||||
controller_right.button_pressed.connect(func(name):
|
|
||||||
_emit_action(name, true, true)
|
|
||||||
)
|
|
||||||
|
|
||||||
controller_left.button_released.connect(func(name):
|
|
||||||
_emit_action(name, false, false)
|
|
||||||
)
|
|
||||||
|
|
||||||
controller_right.button_released.connect(func(name):
|
|
||||||
_emit_action(name, false, true)
|
|
||||||
)
|
|
||||||
|
|
||||||
remove_child(keyboard)
|
|
||||||
|
|
||||||
EventSystem.on_action_down.connect(func(action):
|
|
||||||
if action.name == "menu_button":
|
|
||||||
toggle_menu()
|
|
||||||
elif action.name == "by_button":
|
|
||||||
House.body.mini_view.small.value=!House.body.mini_view.small.value
|
|
||||||
)
|
|
||||||
|
|
||||||
EventSystem.on_focus_in.connect(func(event):
|
|
||||||
if keyboard.is_inside_tree():
|
|
||||||
return
|
|
||||||
|
|
||||||
add_child(keyboard)
|
|
||||||
keyboard.global_transform=menu.get_node("AnimationContainer/KeyboardPlace").global_transform
|
|
||||||
)
|
|
||||||
|
|
||||||
EventSystem.on_focus_out.connect(func(event):
|
|
||||||
if !keyboard.is_inside_tree():
|
|
||||||
return
|
|
||||||
|
|
||||||
remove_child(keyboard)
|
|
||||||
)
|
|
||||||
|
|
||||||
xr.xr_started.connect(func():
|
xr.xr_started.connect(func():
|
||||||
if HomeApi.has_connected() == false:
|
if HomeApi.has_connected() == false:
|
||||||
HomeApi.start()
|
HomeApi.start()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
HomeApi.on_connect.connect(func():
|
||||||
|
start_setup_flow.call_deferred()
|
||||||
|
)
|
||||||
|
|
||||||
|
func start_setup_flow():
|
||||||
|
var onboarding = OnboardingScene.instantiate()
|
||||||
|
add_child(onboarding)
|
||||||
|
|
||||||
|
await onboarding.tree_exited
|
||||||
|
|
||||||
|
if Store.house.state.rooms.size() == 0:
|
||||||
|
house.create_room("Room 1")
|
||||||
|
|
||||||
func create_voice_assistant():
|
func create_voice_assistant():
|
||||||
if Store.settings.is_loaded() == false:
|
if Store.settings.is_loaded() == false:
|
||||||
await Store.settings.on_loaded
|
await Store.settings.on_loaded
|
||||||
|
@ -85,47 +57,37 @@ func create_voice_assistant():
|
||||||
voice_assistant.queue_free()
|
voice_assistant.queue_free()
|
||||||
)
|
)
|
||||||
|
|
||||||
func toggle_menu():
|
|
||||||
menu.show_menu.value = !menu.show_menu.value
|
|
||||||
|
|
||||||
func _emit_action(name: String, value, right_controller: bool=true):
|
|
||||||
var event = EventAction.new()
|
|
||||||
event.name = name
|
|
||||||
event.value = value
|
|
||||||
event.right_controller = right_controller
|
|
||||||
|
|
||||||
match typeof(value):
|
|
||||||
TYPE_BOOL:
|
|
||||||
EventSystem.emit("action_down" if value else "action_up", event)
|
|
||||||
TYPE_FLOAT, TYPE_VECTOR2:
|
|
||||||
EventSystem.emit("action_value", event)
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if OS.get_name() != "Android":
|
_move_camera_pc(delta)
|
||||||
|
|
||||||
var camera_basis = camera.get_global_transform().basis
|
|
||||||
|
|
||||||
camera_basis.x.y = 0
|
|
||||||
camera_basis.z.y = 0
|
|
||||||
camera_basis.y = Vector3(0, 1, 0)
|
|
||||||
camera_basis.x = camera_basis.x.normalized()
|
|
||||||
camera_basis.z = camera_basis.z.normalized()
|
|
||||||
|
|
||||||
var movement = camera_basis * vector_key_mapping(KEY_D, KEY_A, KEY_S, KEY_W) * delta
|
|
||||||
|
|
||||||
camera.position += movement
|
|
||||||
controller_left.position += movement
|
|
||||||
controller_right.position += movement
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
|
|
||||||
|
# Debugging Features
|
||||||
if event is InputEventKey and Input.is_key_pressed(KEY_F10):
|
if event is InputEventKey and Input.is_key_pressed(KEY_F10):
|
||||||
var vp = get_viewport()
|
var vp = get_viewport()
|
||||||
vp.debug_draw = (vp.debug_draw + 1) % 5
|
vp.debug_draw = (vp.debug_draw + 1) % 5
|
||||||
|
|
||||||
if event is InputEventKey and Input.is_key_pressed(KEY_M):
|
if event is InputEventKey and Input.is_key_pressed(KEY_M):
|
||||||
toggle_menu()
|
menu.toggle_open()
|
||||||
|
|
||||||
func vector_key_mapping(key_positive_x: int, key_negative_x: int, key_positive_y: int, key_negative_y: int):
|
func _move_camera_pc(delta):
|
||||||
|
if OS.get_name() == "Android": return
|
||||||
|
|
||||||
|
var camera_basis = camera.get_global_transform().basis
|
||||||
|
|
||||||
|
camera_basis.x.y = 0
|
||||||
|
camera_basis.z.y = 0
|
||||||
|
camera_basis.y = Vector3(0, 1, 0)
|
||||||
|
camera_basis.x = camera_basis.x.normalized()
|
||||||
|
camera_basis.z = camera_basis.z.normalized()
|
||||||
|
|
||||||
|
var movement = camera_basis * _vector_key_mapping(KEY_D, KEY_A, KEY_S, KEY_W) * delta
|
||||||
|
|
||||||
|
camera.position += movement
|
||||||
|
controller_left.position += movement
|
||||||
|
controller_right.position += movement
|
||||||
|
|
||||||
|
func _vector_key_mapping(key_positive_x: int, key_negative_x: int, key_positive_y: int, key_negative_y: int):
|
||||||
var x = 0
|
var x = 0
|
||||||
var y = 0
|
var y = 0
|
||||||
if Input.is_physical_key_pressed(key_positive_y):
|
if Input.is_physical_key_pressed(key_positive_y):
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://ctltchlf2j2r4" path="res://addons/xr-simulator/XRSimulator.tscn" id="5_3qc8g"]
|
[ext_resource type="PackedScene" uid="uid://ctltchlf2j2r4" path="res://addons/xr-simulator/XRSimulator.tscn" id="5_3qc8g"]
|
||||||
[ext_resource type="PackedScene" uid="uid://biu66ihmvmku3" path="res://content/system/controller_right/controller_right.tscn" id="7_0b3tc"]
|
[ext_resource type="PackedScene" uid="uid://biu66ihmvmku3" path="res://content/system/controller_right/controller_right.tscn" id="7_0b3tc"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c3kdssrmv84kv" path="res://content/ui/menu/menu.tscn" id="8_du83w"]
|
[ext_resource type="PackedScene" uid="uid://c3kdssrmv84kv" path="res://content/ui/menu/menu.tscn" id="8_du83w"]
|
||||||
[ext_resource type="PackedScene" uid="uid://lrehk38exd5n" path="res://content/system/keyboard/keyboard.tscn" id="9_e5n3p"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cbemihbxkd4ll" path="res://content/system/house/house.tscn" id="9_np6mw"]
|
[ext_resource type="PackedScene" uid="uid://cbemihbxkd4ll" path="res://content/system/house/house.tscn" id="9_np6mw"]
|
||||||
[ext_resource type="Script" path="res://lib/utils/screenshot.gd" id="12_e13ym"]
|
[ext_resource type="Script" path="res://lib/utils/screenshot.gd" id="12_e13ym"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ds60i5n211hi3" path="res://content/system/miniature/miniature.tscn" id="12_lmxhs"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bhyddd1f0ry1x" path="res://content/ui/onboarding/onboarding.tscn" id="12_uq2nj"]
|
[ext_resource type="PackedScene" uid="uid://bhyddd1f0ry1x" path="res://content/ui/onboarding/onboarding.tscn" id="12_uq2nj"]
|
||||||
|
|
||||||
[node name="Main" type="Node3D"]
|
[node name="Main" type="Node3D"]
|
||||||
|
@ -30,8 +30,10 @@ enable_passthrough = true
|
||||||
[node name="XROrigin3D" type="XROrigin3D" parent="."]
|
[node name="XROrigin3D" type="XROrigin3D" parent="."]
|
||||||
|
|
||||||
[node name="XRCamera3D" parent="XROrigin3D" instance=ExtResource("3_rj4ac")]
|
[node name="XRCamera3D" parent="XROrigin3D" instance=ExtResource("3_rj4ac")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="XRControllerLeft" parent="XROrigin3D" instance=ExtResource("2_2lraw")]
|
[node name="XRControllerLeft" parent="XROrigin3D" instance=ExtResource("2_2lraw")]
|
||||||
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(0.999999, -1.39633e-11, 0, 9.48075e-12, 1, 0, 0, 0, 1, -0.355145, 0.550439, -0.477945)
|
transform = Transform3D(0.999999, -1.39633e-11, 0, 9.48075e-12, 1, 0, 0, 0, 1, -0.355145, 0.550439, -0.477945)
|
||||||
|
|
||||||
[node name="IndexTip" parent="XROrigin3D/XRControllerLeft" index="4"]
|
[node name="IndexTip" parent="XROrigin3D/XRControllerLeft" index="4"]
|
||||||
|
@ -43,30 +45,25 @@ transform = Transform3D(0.967043, 0.24582, -0.0663439, -0.0663439, 0.494837, 0.8
|
||||||
[node name="MiddleTip" parent="XROrigin3D/XRControllerLeft" index="6"]
|
[node name="MiddleTip" parent="XROrigin3D/XRControllerLeft" index="6"]
|
||||||
transform = Transform3D(0.98042, 0.196912, 0.00149799, 0.001498, -0.015065, 0.999885, 0.196912, -0.980305, -0.0150651, -0.00327212, -0.00771427, -0.176318)
|
transform = Transform3D(0.98042, 0.196912, 0.00149799, 0.001498, -0.015065, 0.999885, 0.196912, -0.980305, -0.0150651, -0.00327212, -0.00771427, -0.176318)
|
||||||
|
|
||||||
[node name="Palm" parent="XROrigin3D/XRControllerLeft" index="7"]
|
|
||||||
transform = Transform3D(1, 3.12364e-06, -3.13861e-06, -3.12371e-06, 1, -1.97886e-05, 3.13854e-06, 1.97889e-05, 1, 0.0307807, -0.0419721, -0.0399505)
|
|
||||||
|
|
||||||
[node name="XRControllerRight" parent="XROrigin3D" instance=ExtResource("7_0b3tc")]
|
[node name="XRControllerRight" parent="XROrigin3D" instance=ExtResource("7_0b3tc")]
|
||||||
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(0.999999, -1.39635e-11, 0, 1.31553e-10, 1, 0, 0, 0, 1, 0.336726, 0.575093, -0.437942)
|
transform = Transform3D(0.999999, -1.39635e-11, 0, 1.31553e-10, 1, 0, 0, 0, 1, 0.336726, 0.575093, -0.437942)
|
||||||
|
|
||||||
[node name="XRSimulator" parent="." instance=ExtResource("5_3qc8g")]
|
[node name="XRSimulator" parent="." instance=ExtResource("5_3qc8g")]
|
||||||
min_camera_height = 0.01
|
min_camera_height = 0.01
|
||||||
xr_origin = NodePath("../XROrigin3D")
|
xr_origin = NodePath("../XROrigin3D")
|
||||||
|
|
||||||
|
[node name="House" parent="." instance=ExtResource("9_np6mw")]
|
||||||
|
|
||||||
|
[node name="Miniature" parent="." instance=ExtResource("12_lmxhs")]
|
||||||
|
|
||||||
[node name="Menu" parent="." instance=ExtResource("8_du83w")]
|
[node name="Menu" parent="." instance=ExtResource("8_du83w")]
|
||||||
transform = Transform3D(0.999999, -1.39633e-11, 0, 1.60657e-10, 1, -4.54747e-13, 0, 0, 0.999999, -0.0165677, 0.766337, -0.634317)
|
transform = Transform3D(0.999999, -1.39633e-11, 0, 1.60657e-10, 1, -4.54747e-13, 0, 0, 0.999999, -0.0165677, 0.766337, -0.634317)
|
||||||
|
|
||||||
[node name="Keyboard" parent="." instance=ExtResource("9_e5n3p")]
|
|
||||||
transform = Transform3D(0.5, 5.24309e-05, 0.000144384, -0.000139169, 0.353553, 0.353553, -6.50204e-05, -0.353553, 0.353553, -0.0199266, 0.550784, -0.47368)
|
|
||||||
|
|
||||||
[node name="Rooms" type="Node3D" parent="."]
|
|
||||||
|
|
||||||
[node name="House" parent="." instance=ExtResource("9_np6mw")]
|
|
||||||
|
|
||||||
[node name="Onboarding" parent="." instance=ExtResource("12_uq2nj")]
|
[node name="Onboarding" parent="." instance=ExtResource("12_uq2nj")]
|
||||||
transform = Transform3D(1, -1.39636e-11, 0, 4.42413e-11, 1, 0, 0, 0, 1, -0.576793, 0.820168, -0.60016)
|
transform = Transform3D(1, -1.39636e-11, 0, 4.42413e-11, 1, 0, 0, 0, 1, -0.576793, 0.820168, -0.60016)
|
||||||
|
|
||||||
[node name="Node" type="Node" parent="."]
|
[node name="Screenshot" type="Node" parent="."]
|
||||||
script = ExtResource("12_e13ym")
|
script = ExtResource("12_e13ym")
|
||||||
|
|
||||||
[editable path="XROrigin3D/XRControllerLeft"]
|
[editable path="XROrigin3D/XRControllerLeft"]
|
||||||
|
|
|
@ -17,7 +17,6 @@ var effect: AudioEffectCapture
|
||||||
@onready var chat_user: Chat = $ChatUser
|
@onready var chat_user: Chat = $ChatUser
|
||||||
@onready var chat_assistant: Chat = $ChatAssistant
|
@onready var chat_assistant: Chat = $ChatAssistant
|
||||||
@onready var loader: Node3D = $Loader
|
@onready var loader: Node3D = $Loader
|
||||||
@onready var camera = $"/root/Main/XROrigin3D/XRCamera3D"
|
|
||||||
|
|
||||||
var running := false
|
var running := false
|
||||||
var voice_assistant: VoiceAssistant
|
var voice_assistant: VoiceAssistant
|
||||||
|
@ -50,9 +49,9 @@ func _ready():
|
||||||
loader.visible=true
|
loader.visible=true
|
||||||
chat_user.visible=false
|
chat_user.visible=false
|
||||||
chat_assistant.visible=false
|
chat_assistant.visible=false
|
||||||
global_position=camera.global_position + camera.global_transform.basis.z * - 0.5
|
global_position=App.camera.global_position + App.camera.global_transform.basis.z * - 0.5
|
||||||
global_position.y *= 0.7
|
global_position.y *= 0.7
|
||||||
global_transform.basis=Basis.looking_at((camera.global_position - global_position) * - 1)
|
global_transform.basis=Basis.looking_at((App.camera.global_position - global_position) * - 1)
|
||||||
running=true
|
running=true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ func _physics_process(_delta):
|
||||||
update_room()
|
update_room()
|
||||||
|
|
||||||
func update_room():
|
func update_room():
|
||||||
var room = House.body.find_room_at(global_position)
|
var room = App.house.find_room_at(global_position)
|
||||||
|
|
||||||
if room != last_room:
|
if room != last_room:
|
||||||
if room:
|
if room:
|
||||||
|
|
|
@ -5,9 +5,8 @@ const Initiator = preload ("res://lib/utils/pointer/initiator.gd")
|
||||||
const Finger = preload ("res://lib/utils/touch/finger.gd")
|
const Finger = preload ("res://lib/utils/touch/finger.gd")
|
||||||
const Touch = preload ("res://lib/utils/touch/touch.gd")
|
const Touch = preload ("res://lib/utils/touch/touch.gd")
|
||||||
const Collide = preload ("res://lib/utils/touch/collide.gd")
|
const Collide = preload ("res://lib/utils/touch/collide.gd")
|
||||||
const Miniature = preload ("res://content/system/house/mini/miniature.gd")
|
const Miniature = preload ("res://content/system/miniature/miniature.gd")
|
||||||
|
|
||||||
@onready var main = $"/root/Main"
|
|
||||||
@onready var hand = $hand_l
|
@onready var hand = $hand_l
|
||||||
@onready var hand_mesh = $hand_l/Armature/Skeleton3D/mesh_Hand_L
|
@onready var hand_mesh = $hand_l/Armature/Skeleton3D/mesh_Hand_L
|
||||||
@onready var auto_hand = $AutoHandtracker
|
@onready var auto_hand = $AutoHandtracker
|
||||||
|
@ -35,6 +34,13 @@ var pressed = false
|
||||||
var grabbed = false
|
var grabbed = false
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
button_pressed.connect(func(action_name):
|
||||||
|
EventSystem.emit_action(action_name, true, false)
|
||||||
|
)
|
||||||
|
|
||||||
|
button_released.connect(func(action_name):
|
||||||
|
EventSystem.emit_action(action_name, false, false)
|
||||||
|
)
|
||||||
|
|
||||||
_setup_hand()
|
_setup_hand()
|
||||||
|
|
||||||
|
@ -43,7 +49,7 @@ func _process(_delta):
|
||||||
if quick_actions.is_inside_tree(): palm.remove_child(quick_actions)
|
if quick_actions.is_inside_tree(): palm.remove_child(quick_actions)
|
||||||
return
|
return
|
||||||
|
|
||||||
if main.camera.global_transform.basis.z.dot(palm.global_transform.basis.x) > 0.85:
|
if App.camera.global_transform.basis.z.dot(palm.global_transform.basis.x) > 0.85:
|
||||||
if quick_actions.is_inside_tree() == false: palm.add_child(quick_actions)
|
if quick_actions.is_inside_tree() == false: palm.add_child(quick_actions)
|
||||||
else:
|
else:
|
||||||
if quick_actions.is_inside_tree(): palm.remove_child(quick_actions)
|
if quick_actions.is_inside_tree(): palm.remove_child(quick_actions)
|
||||||
|
@ -87,21 +93,21 @@ func _setup_hand():
|
||||||
)
|
)
|
||||||
|
|
||||||
mini_view_button.on_button_up.connect(func():
|
mini_view_button.on_button_up.connect(func():
|
||||||
House.body.mini_view.small.value=!House.body.mini_view.small.value
|
App.miniature.small.value=!App.miniature.small.value
|
||||||
)
|
)
|
||||||
|
|
||||||
temperature_button.on_button_up.connect(func():
|
temperature_button.on_button_up.connect(func():
|
||||||
if House.body.mini_view.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE:
|
if App.miniature.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE:
|
||||||
House.body.mini_view.heatmap_type.value=Miniature.HeatmapType.NONE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.NONE
|
||||||
else:
|
else:
|
||||||
House.body.mini_view.heatmap_type.value=Miniature.HeatmapType.TEMPERATURE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.TEMPERATURE
|
||||||
)
|
)
|
||||||
|
|
||||||
humidity_button.on_button_up.connect(func():
|
humidity_button.on_button_up.connect(func():
|
||||||
if House.body.mini_view.heatmap_type.value == Miniature.HeatmapType.HUMIDITY:
|
if App.miniature.heatmap_type.value == Miniature.HeatmapType.HUMIDITY:
|
||||||
House.body.mini_view.heatmap_type.value=Miniature.HeatmapType.NONE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.NONE
|
||||||
else:
|
else:
|
||||||
House.body.mini_view.heatmap_type.value=Miniature.HeatmapType.HUMIDITY
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.HUMIDITY
|
||||||
)
|
)
|
||||||
|
|
||||||
initiator.type = Initiator.Type.HAND_LEFT
|
initiator.type = Initiator.Type.HAND_LEFT
|
||||||
|
|
|
@ -5,9 +5,8 @@ const Initiator = preload ("res://lib/utils/pointer/initiator.gd")
|
||||||
const Finger = preload ("res://lib/utils/touch/finger.gd")
|
const Finger = preload ("res://lib/utils/touch/finger.gd")
|
||||||
const Touch = preload ("res://lib/utils/touch/touch.gd")
|
const Touch = preload ("res://lib/utils/touch/touch.gd")
|
||||||
const Collide = preload ("res://lib/utils/touch/collide.gd")
|
const Collide = preload ("res://lib/utils/touch/collide.gd")
|
||||||
const Miniature = preload ("res://content/system/house/mini/miniature.gd")
|
const Miniature = preload ("res://content/system/miniature/miniature.gd")
|
||||||
|
|
||||||
@onready var main = $"/root/Main"
|
|
||||||
@onready var ray: RayCast3D = $Raycast
|
@onready var ray: RayCast3D = $Raycast
|
||||||
@onready var hand: Node3D = $hand_r
|
@onready var hand: Node3D = $hand_r
|
||||||
@onready var hand_mesh = $hand_r/Armature/Skeleton3D/mesh_Hand_R
|
@onready var hand_mesh = $hand_r/Armature/Skeleton3D/mesh_Hand_R
|
||||||
|
@ -28,6 +27,14 @@ var pressed = false
|
||||||
var grabbed = false
|
var grabbed = false
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
button_pressed.connect(func(action_name):
|
||||||
|
EventSystem.emit_action(action_name, true, true)
|
||||||
|
)
|
||||||
|
button_released.connect(func(action_name):
|
||||||
|
EventSystem.emit_action(action_name, false, true)
|
||||||
|
)
|
||||||
|
|
||||||
|
func _setup_hand():
|
||||||
TouchManager.add_finger(Finger.Type.INDEX_RIGHT, $IndexTip/TouchArea)
|
TouchManager.add_finger(Finger.Type.INDEX_RIGHT, $IndexTip/TouchArea)
|
||||||
|
|
||||||
collide = Collide.new(hand, hand_mesh, index_tip.get_node("Marker3D"))
|
collide = Collide.new(hand, hand_mesh, index_tip.get_node("Marker3D"))
|
||||||
|
|
|
@ -16,8 +16,6 @@ var touched_enter = 0.0
|
||||||
var moved_ran = false
|
var moved_ran = false
|
||||||
var touch_ran = false
|
var touch_ran = false
|
||||||
|
|
||||||
var miniature = House.body.mini_view
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
label.text=entity.icon.value
|
label.text=entity.icon.value
|
||||||
|
@ -37,15 +35,15 @@ func _ready():
|
||||||
)
|
)
|
||||||
|
|
||||||
func _on_click(_event: EventPointer):
|
func _on_click(_event: EventPointer):
|
||||||
if entity.has_method("quick_action")&&miniature.entity_select.selection_active() == false:
|
if entity.has_method("quick_action")&&App.miniature.entity_select.selection_active() == false:
|
||||||
entity.quick_action()
|
entity.quick_action()
|
||||||
snap_sound.play()
|
snap_sound.play()
|
||||||
else:
|
else:
|
||||||
miniature.entity_select.toggle(entity)
|
App.miniature.entity_select.toggle(entity)
|
||||||
|
|
||||||
func _on_press_move(_event: EventPointer):
|
func _on_press_move(_event: EventPointer):
|
||||||
if moved_ran: return
|
if moved_ran: return
|
||||||
miniature.entity_select.toggle(entity)
|
App.miniature.entity_select.toggle(entity)
|
||||||
moved_ran = true
|
moved_ran = true
|
||||||
|
|
||||||
func _on_press_up(_event: EventPointer):
|
func _on_press_up(_event: EventPointer):
|
||||||
|
@ -58,15 +56,15 @@ func _on_touch_enter(_event: EventTouch):
|
||||||
func _on_touch_move(_event: EventTouch):
|
func _on_touch_move(_event: EventTouch):
|
||||||
if touch_ran||Time.get_ticks_msec() - touched_enter < TOUCH_LONG: return
|
if touch_ran||Time.get_ticks_msec() - touched_enter < TOUCH_LONG: return
|
||||||
|
|
||||||
miniature.entity_select.toggle(entity)
|
App.miniature.entity_select.toggle(entity)
|
||||||
|
|
||||||
touch_ran = true
|
touch_ran = true
|
||||||
|
|
||||||
func _on_touch_leave(_event: EventTouch):
|
func _on_touch_leave(_event: EventTouch):
|
||||||
if touch_ran: return
|
if touch_ran: return
|
||||||
|
|
||||||
if entity.has_method("quick_action")&&miniature.entity_select.selection_active() == false:
|
if entity.has_method("quick_action")&&App.miniature.entity_select.selection_active() == false:
|
||||||
snap_sound.play()
|
snap_sound.play()
|
||||||
entity.quick_action()
|
entity.quick_action()
|
||||||
else:
|
else:
|
||||||
miniature.entity_select.toggle(entity)
|
App.miniature.entity_select.toggle(entity)
|
||||||
|
|
|
@ -19,7 +19,7 @@ extends Node3D
|
||||||
edge.visible = !disabled
|
edge.visible = !disabled
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
update_initial_positions()
|
update_initial_positions.call_deferred()
|
||||||
|
|
||||||
corner1.get_node("Movable").on_move.connect(func(position, rotation):
|
corner1.get_node("Movable").on_move.connect(func(position, rotation):
|
||||||
edge.align_to_corners(corner1.global_position, corner2.global_position)
|
edge.align_to_corners(corner1.global_position, corner2.global_position)
|
||||||
|
@ -40,8 +40,11 @@ func _ready():
|
||||||
return corner1.position + delta_new_pos_corner1
|
return corner1.position + delta_new_pos_corner1
|
||||||
|
|
||||||
func update_initial_positions():
|
func update_initial_positions():
|
||||||
|
if App.main.is_node_ready() == false:
|
||||||
|
await App.main.ready
|
||||||
|
|
||||||
edge.align_to_corners(corner1.global_position, corner2.global_position)
|
edge.align_to_corners(corner1.global_position, corner2.global_position)
|
||||||
marker.global_transform = House.body.transform
|
marker.global_transform = App.house.transform
|
||||||
|
|
||||||
func get_new_transform():
|
func get_new_transform():
|
||||||
marker.scale = Vector3(1, 1, 1)
|
marker.scale = Vector3(1, 1, 1)
|
||||||
|
@ -61,4 +64,4 @@ func update_align_reference():
|
||||||
|
|
||||||
func update_store():
|
func update_store():
|
||||||
Store.house.state.align_position1 = corner1.global_position
|
Store.house.state.align_position1 = corner1.global_position
|
||||||
Store.house.state.align_position2 = corner2.global_position
|
Store.house.state.align_position2 = corner2.global_position
|
||||||
|
|
|
@ -50,8 +50,8 @@ func edit(door):
|
||||||
break
|
break
|
||||||
|
|
||||||
if existing_door != null:
|
if existing_door != null:
|
||||||
room1 = House.body.find_room(existing_door.room1)
|
room1 = App.house.find_room(existing_door.room1)
|
||||||
room2 = House.body.find_room(existing_door.room2)
|
room2 = App.house.find_room(existing_door.room2)
|
||||||
|
|
||||||
room1_corner1 = WallCornerScene.instantiate()
|
room1_corner1 = WallCornerScene.instantiate()
|
||||||
room1_corner1.global_position = existing_door.room1_position1
|
room1_corner1.global_position = existing_door.room1_position1
|
||||||
|
@ -73,13 +73,13 @@ func edit(door):
|
||||||
room2_corner2.get_node("Clickable").on_grab_move.connect(_move_corner.bind(room2, room2_corner2))
|
room2_corner2.get_node("Clickable").on_grab_move.connect(_move_corner.bind(room2, room2_corner2))
|
||||||
add_child(room2_corner2)
|
add_child(room2_corner2)
|
||||||
|
|
||||||
for room in House.body.get_rooms(0):
|
for room in App.house.get_rooms():
|
||||||
if room != room1&&room != room2:
|
if room != room1&&room != room2:
|
||||||
room.get_node("WallCollision/Clickable").on_click.connect(_add_corner.bind(room))
|
room.get_node("WallCollision/Clickable").on_click.connect(_add_corner.bind(room))
|
||||||
else:
|
else:
|
||||||
room.get_node("WallCollision/Clickable").on_click.disconnect(_add_corner.bind(room))
|
room.get_node("WallCollision/Clickable").on_click.disconnect(_add_corner.bind(room))
|
||||||
|
|
||||||
for room in House.body.get_rooms(0):
|
for room in App.house.get_rooms():
|
||||||
if door != null:
|
if door != null:
|
||||||
room.get_node("WallCollision/Clickable").on_click.connect(_add_corner.bind(room))
|
room.get_node("WallCollision/Clickable").on_click.connect(_add_corner.bind(room))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -2,15 +2,12 @@ extends Node3D
|
||||||
|
|
||||||
const Room = preload ("./room/room.tscn")
|
const Room = preload ("./room/room.tscn")
|
||||||
const RoomType = preload ("./room/room.gd")
|
const RoomType = preload ("./room/room.gd")
|
||||||
const Miniature = preload ("./mini/miniature.gd")
|
|
||||||
const Doors = preload ("./doors/doors.gd")
|
const Doors = preload ("./doors/doors.gd")
|
||||||
const AlignReference = preload ("./align_reference.gd")
|
const AlignReference = preload ("./align_reference.gd")
|
||||||
|
|
||||||
@onready var levels = $Levels
|
@onready var rooms = $Rooms
|
||||||
@onready var collision_shape = $Levels/CollisionShape3D
|
|
||||||
@onready var align_reference: AlignReference = $AlignReference
|
@onready var align_reference: AlignReference = $AlignReference
|
||||||
@onready var mini_view: Miniature = $Levels/Miniature
|
@onready var doors: Doors = $Doors
|
||||||
@onready var doors: Doors = $Levels/Doors
|
|
||||||
|
|
||||||
var fixing_reference: bool = false
|
var fixing_reference: bool = false
|
||||||
var editing_room: RoomType = null
|
var editing_room: RoomType = null
|
||||||
|
@ -23,7 +20,7 @@ func _ready():
|
||||||
|
|
||||||
func update_house():
|
func update_house():
|
||||||
loaded.value = false
|
loaded.value = false
|
||||||
for old_room in get_rooms(0):
|
for old_room in get_rooms():
|
||||||
old_room.get_parent().remove_child(old_room)
|
old_room.get_parent().remove_child(old_room)
|
||||||
old_room.queue_free()
|
old_room.queue_free()
|
||||||
|
|
||||||
|
@ -37,7 +34,7 @@ func update_house():
|
||||||
Store.house.save_local()
|
Store.house.save_local()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
create_room(new_room.name, 0)
|
create_room(new_room.name)
|
||||||
|
|
||||||
for entity_index in range(Store.house.state.entities.size()):
|
for entity_index in range(Store.house.state.entities.size()):
|
||||||
var entity = Store.house.state.entities[entity_index]
|
var entity = Store.house.state.entities[entity_index]
|
||||||
|
@ -53,7 +50,7 @@ func update_house():
|
||||||
|
|
||||||
loaded.value = true
|
loaded.value = true
|
||||||
|
|
||||||
func create_room(room_name: String, level: int) -> RoomType:
|
func create_room(room_name: String) -> RoomType:
|
||||||
var existing_room = Store.house.get_room(room_name)
|
var existing_room = Store.house.get_room(room_name)
|
||||||
|
|
||||||
if existing_room == null:
|
if existing_room == null:
|
||||||
|
@ -66,7 +63,7 @@ func create_room(room_name: String, level: int) -> RoomType:
|
||||||
var room = Room.instantiate()
|
var room = Room.instantiate()
|
||||||
room.name = room_name
|
room.name = room_name
|
||||||
|
|
||||||
get_level(level).add_child(room)
|
rooms.add_child(room)
|
||||||
|
|
||||||
return room
|
return room
|
||||||
|
|
||||||
|
@ -116,13 +113,13 @@ func is_editiong(room_name):
|
||||||
return editing_room != null&&editing_room.name == room_name
|
return editing_room != null&&editing_room.name == room_name
|
||||||
|
|
||||||
func find_room(room_name):
|
func find_room(room_name):
|
||||||
for room in get_rooms(0):
|
for room in get_rooms():
|
||||||
if room.name == room_name:
|
if room.name == room_name:
|
||||||
return room
|
return room
|
||||||
return null
|
return null
|
||||||
|
|
||||||
func find_room_at(entity_position: Vector3):
|
func find_room_at(entity_position: Vector3):
|
||||||
for room in get_rooms(0):
|
for room in get_rooms():
|
||||||
if room.has_point(entity_position):
|
if room.has_point(entity_position):
|
||||||
return room
|
return room
|
||||||
return null
|
return null
|
||||||
|
@ -143,11 +140,8 @@ func rename_room(old_room: String, new_name: String):
|
||||||
save_all_entities()
|
save_all_entities()
|
||||||
Store.house.save_local()
|
Store.house.save_local()
|
||||||
|
|
||||||
func get_level(level: int):
|
func get_rooms_aabb():
|
||||||
return levels.get_child(level)
|
var rooms = get_rooms()
|
||||||
|
|
||||||
func get_level_aabb(level: int):
|
|
||||||
var rooms = get_level(level).get_children()
|
|
||||||
if rooms.size() == 0:
|
if rooms.size() == 0:
|
||||||
return AABB()
|
return AABB()
|
||||||
|
|
||||||
|
@ -168,8 +162,8 @@ func get_level_aabb(level: int):
|
||||||
|
|
||||||
return AABB(min_pos, max_pos - min_pos)
|
return AABB(min_pos, max_pos - min_pos)
|
||||||
|
|
||||||
func get_rooms(level: int):
|
func get_rooms():
|
||||||
return get_level(level).get_children()
|
return rooms.get_children()
|
||||||
|
|
||||||
func create_entity(entity_id: String, entity_position: Vector3, type=null):
|
func create_entity(entity_id: String, entity_position: Vector3, type=null):
|
||||||
var room = find_room_at(entity_position)
|
var room = find_room_at(entity_position)
|
||||||
|
@ -218,7 +212,7 @@ func fix_reference():
|
||||||
|
|
||||||
func save_reference():
|
func save_reference():
|
||||||
if fixing_reference:
|
if fixing_reference:
|
||||||
for room in get_rooms(0):
|
for room in get_rooms():
|
||||||
room.editable = true
|
room.editable = true
|
||||||
|
|
||||||
var align_transform = align_reference.global_transform
|
var align_transform = align_reference.global_transform
|
||||||
|
@ -227,7 +221,7 @@ func save_reference():
|
||||||
|
|
||||||
align_reference.update_store()
|
align_reference.update_store()
|
||||||
|
|
||||||
for room in get_rooms(0):
|
for room in get_rooms():
|
||||||
room.editable = false
|
room.editable = false
|
||||||
|
|
||||||
save_all_entities()
|
save_all_entities()
|
||||||
|
@ -241,7 +235,7 @@ func save_reference():
|
||||||
func save_all_entities():
|
func save_all_entities():
|
||||||
Store.house.state.entities.clear()
|
Store.house.state.entities.clear()
|
||||||
|
|
||||||
for room in get_rooms(0):
|
for room in get_rooms():
|
||||||
for entity in room.get_node("Entities").get_children():
|
for entity in room.get_node("Entities").get_children():
|
||||||
var entity_data = {
|
var entity_data = {
|
||||||
"id": entity.entity_id,
|
"id": entity.entity_id,
|
||||||
|
|
|
@ -1,21 +1,16 @@
|
||||||
[gd_scene load_steps=5 format=3 uid="uid://cbemihbxkd4ll"]
|
[gd_scene load_steps=4 format=3 uid="uid://cbemihbxkd4ll"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://content/system/house/house.gd" id="1_p8amj"]
|
[ext_resource type="Script" path="res://content/system/house/house.gd" id="1_p8amj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://jls16btb8nko" path="res://content/system/house/align_reference.tscn" id="3_e1tcn"]
|
[ext_resource type="PackedScene" uid="uid://jls16btb8nko" path="res://content/system/house/align_reference.tscn" id="3_e1tcn"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c8nh8582vwc8u" path="res://content/system/house/doors/doors.tscn" id="4_bb3c2"]
|
[ext_resource type="PackedScene" uid="uid://c8nh8582vwc8u" path="res://content/system/house/doors/doors.tscn" id="4_bb3c2"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ds60i5n211hi3" path="res://content/system/house/mini/miniature.tscn" id="4_qjbly"]
|
|
||||||
|
|
||||||
[node name="House" type="Node3D"]
|
[node name="House" type="Node3D"]
|
||||||
script = ExtResource("1_p8amj")
|
script = ExtResource("1_p8amj")
|
||||||
|
|
||||||
[node name="Levels" type="Node3D" parent="."]
|
[node name="Rooms" type="Node3D" parent="."]
|
||||||
|
|
||||||
[node name="Level0" type="Node3D" parent="Levels"]
|
|
||||||
|
|
||||||
[node name="Miniature" parent="Levels" instance=ExtResource("4_qjbly")]
|
|
||||||
|
|
||||||
[node name="Doors" parent="Levels" instance=ExtResource("4_bb3c2")]
|
|
||||||
|
|
||||||
[node name="AlignReference" parent="." instance=ExtResource("3_e1tcn")]
|
[node name="AlignReference" parent="." instance=ExtResource("3_e1tcn")]
|
||||||
visible = false
|
visible = false
|
||||||
disabled = true
|
disabled = true
|
||||||
|
|
||||||
|
[node name="Doors" parent="." instance=ExtResource("4_bb3c2")]
|
||||||
|
|
|
@ -20,9 +20,35 @@ var caps = false:
|
||||||
update_labels()
|
update_labels()
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
get_parent().remove_child.call_deferred(self)
|
||||||
|
|
||||||
|
_create_keys()
|
||||||
|
_prepare_keyboard_spawn()
|
||||||
|
_connect_key_events()
|
||||||
|
|
||||||
|
func _prepare_keyboard_spawn():
|
||||||
|
if Engine.is_editor_hint():
|
||||||
|
return
|
||||||
|
|
||||||
|
EventSystem.on_focus_in.connect(func(event):
|
||||||
|
if is_inside_tree():
|
||||||
|
return
|
||||||
|
|
||||||
|
App.main.add_child(self)
|
||||||
|
global_transform=App.menu.get_node("AnimationContainer/KeyboardPlace").global_transform
|
||||||
|
)
|
||||||
|
|
||||||
|
EventSystem.on_focus_out.connect(func(event):
|
||||||
|
if !is_inside_tree():
|
||||||
|
return
|
||||||
|
|
||||||
|
App.main.remove_child(self)
|
||||||
|
)
|
||||||
|
|
||||||
|
func _create_keys():
|
||||||
for row in key_list:
|
for row in key_list:
|
||||||
for key in row:
|
for key in row:
|
||||||
var key_node = create_key(key)
|
var key_node = _create_key(key)
|
||||||
keys.add_child(key_node)
|
keys.add_child(key_node)
|
||||||
|
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
|
@ -37,6 +63,7 @@ func _ready():
|
||||||
|
|
||||||
keys.columns = key_list[0].size()
|
keys.columns = key_list[0].size()
|
||||||
|
|
||||||
|
func _connect_key_events():
|
||||||
if Engine.is_editor_hint():
|
if Engine.is_editor_hint():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -67,7 +94,7 @@ func _ready():
|
||||||
_emit_event("key_up", KEY_INSERT)
|
_emit_event("key_up", KEY_INSERT)
|
||||||
)
|
)
|
||||||
|
|
||||||
func create_key(key: Key):
|
func _create_key(key: Key):
|
||||||
var key_node = button_scene.instantiate()
|
var key_node = button_scene.instantiate()
|
||||||
|
|
||||||
key_node.label = EventKey.key_to_string(key, caps)
|
key_node.label = EventKey.key_to_string(key, caps)
|
||||||
|
|
|
@ -4,20 +4,17 @@ const DotScene = preload ("res://content/system/dot/dot.tscn")
|
||||||
const Entity = preload ("res://content/entities/entity.gd")
|
const Entity = preload ("res://content/entities/entity.gd")
|
||||||
|
|
||||||
@onready var dots = $"../Small/Dots"
|
@onready var dots = $"../Small/Dots"
|
||||||
@onready var main = $"/root/Main"
|
|
||||||
|
|
||||||
var active_type = null
|
var active_type = null
|
||||||
var editing = R.state([])
|
var editing = R.state([])
|
||||||
var group_entity = null
|
var group_entity = null
|
||||||
|
|
||||||
var house_small = null
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
await House.body.ready
|
await App.main.ready
|
||||||
|
|
||||||
# Update Group Entity
|
# Update Group Entity
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
if house_small.value == false||editing.value.size() == 0:
|
if App.miniature.small.value == false||editing.value.size() == 0:
|
||||||
if group_entity != null:
|
if group_entity != null:
|
||||||
remove_child(group_entity)
|
remove_child(group_entity)
|
||||||
group_entity.queue_free()
|
group_entity.queue_free()
|
||||||
|
@ -29,19 +26,19 @@ func _ready():
|
||||||
if entity_node is Movable:
|
if entity_node is Movable:
|
||||||
entity_node.disabled=true
|
entity_node.disabled=true
|
||||||
|
|
||||||
group_entity.transform=Transform3D().looking_at(to_local((main.camera.global_position)), Vector3.UP, true)
|
group_entity.transform=Transform3D().looking_at(to_local((App.camera.global_position)), Vector3.UP, true)
|
||||||
add_child(group_entity)
|
add_child(group_entity)
|
||||||
else:
|
else:
|
||||||
HomeApi.groups.update_entities(group_entity.entity_id, editing.value.map(func(entity): return entity.entity_id))
|
HomeApi.groups.update_entities(group_entity.entity_id, editing.value.map(func(entity): return entity.entity_id))
|
||||||
)
|
)
|
||||||
|
|
||||||
var dots_disabled = R.computed(func(_arg):
|
var dots_disabled = R.computed(func(_arg):
|
||||||
return House.body.mini_view.small.value == false
|
return App.miniature.small.value == false
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update Entities
|
# Update Entities
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
if House.body.loaded.value == false:
|
if App.house.loaded.value == false:
|
||||||
return
|
return
|
||||||
|
|
||||||
if Store.house.state.entities.size() == 0:
|
if Store.house.state.entities.size() == 0:
|
||||||
|
@ -51,11 +48,11 @@ func _ready():
|
||||||
dots.remove_child(old_dot)
|
dots.remove_child(old_dot)
|
||||||
old_dot.free()
|
old_dot.free()
|
||||||
|
|
||||||
for room in House.body.get_rooms(0):
|
for room in App.house.get_rooms():
|
||||||
for entity in room.get_node("Entities").get_children():
|
for entity in room.get_node("Entities").get_children():
|
||||||
var dot=DotScene.instantiate()
|
var dot=DotScene.instantiate()
|
||||||
|
|
||||||
dot.position=House.body.to_local(entity.global_position)
|
dot.position=App.house.to_local(entity.global_position)
|
||||||
dot.entity=entity
|
dot.entity=entity
|
||||||
dot.active=R.computed(func(_arg2):
|
dot.active=R.computed(func(_arg2):
|
||||||
return editing.value.has(entity)
|
return editing.value.has(entity)
|
|
@ -1,7 +1,7 @@
|
||||||
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://bcfcough6ucvc"]
|
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://bcfcough6ucvc"]
|
||||||
|
|
||||||
[ext_resource type="Shader" path="res://content/system/house/mini/mini_wall_shader.gdshader" id="1_sbr3e"]
|
[ext_resource type="Shader" path="res://content/system/miniature/mini_wall_shader.gdshader" id="1_sbr3e"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bbuq4wn7e5o2q" path="res://content/system/house/mini/temp_gradient.tres" id="2_3lwi8"]
|
[ext_resource type="Texture2D" uid="uid://bbuq4wn7e5o2q" path="res://content/system/miniature/temp_gradient.tres" id="2_3lwi8"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
render_priority = 0
|
render_priority = 0
|
|
@ -28,36 +28,36 @@ float SchlickFresnel(float u) {
|
||||||
|
|
||||||
void vertex() {
|
void vertex() {
|
||||||
color = vec3(0.9, 0.9, 0.9);
|
color = vec3(0.9, 0.9, 0.9);
|
||||||
|
|
||||||
if(data_size > 0) {
|
if(data_size > 0) {
|
||||||
float distances[100];
|
float distances[100];
|
||||||
float dist_sum = 0.0;
|
float dist_sum = 0.0;
|
||||||
float data_sum = 0.0;
|
float data_sum = 0.0;
|
||||||
|
|
||||||
float closest_dist = -1.0;
|
float closest_dist = -1.0;
|
||||||
int closest_index = 0;
|
int closest_index = 0;
|
||||||
|
|
||||||
// Calculate Global Coordinates
|
// Calculate Global Coordinates
|
||||||
//vec3 world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
//vec3 world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||||
|
|
||||||
closest_dist = distance(data[0].xyz, VERTEX);
|
closest_dist = distance(data[0].xyz, VERTEX);
|
||||||
|
|
||||||
// Inverse distance weighting using Shepard's method
|
// Inverse distance weighting using Shepard's method
|
||||||
for(int i = 0; i < data_size; i++) {
|
for(int i = 0; i < data_size; i++) {
|
||||||
distances[i] = sphere_weight(i, VERTEX, 5.0);
|
distances[i] = sphere_weight(i, VERTEX, 5.0);
|
||||||
dist_sum += distances[i];
|
dist_sum += distances[i];
|
||||||
data_sum += distances[i] * data[i].w;
|
data_sum += distances[i] * data[i].w;
|
||||||
|
|
||||||
float dist = distance(data[i].xyz, VERTEX);
|
float dist = distance(data[i].xyz, VERTEX);
|
||||||
|
|
||||||
if(dist < closest_dist) {
|
if(dist < closest_dist) {
|
||||||
closest_dist = dist;
|
closest_dist = dist;
|
||||||
closest_index = i;
|
closest_index = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float value = (1.0 / dist_sum) * data_sum;
|
float value = (1.0 / dist_sum) * data_sum;
|
||||||
|
|
||||||
if( value > 0.0 || value < 1.0) {
|
if( value > 0.0 || value < 1.0) {
|
||||||
color.xyz = texture(color_gradient, vec2(value, 0)).xyz;
|
color.xyz = texture(color_gradient, vec2(value, 0)).xyz;
|
||||||
} else {
|
} else {
|
||||||
|
@ -69,10 +69,10 @@ void vertex() {
|
||||||
void fragment() {
|
void fragment() {
|
||||||
ALBEDO = vec3(color.xyz);
|
ALBEDO = vec3(color.xyz);
|
||||||
//ALPHA = alpha;
|
//ALPHA = alpha;
|
||||||
|
|
||||||
float VdotN = dot(VIEW, NORMAL);
|
float VdotN = dot(VIEW, NORMAL);
|
||||||
float fresnel = clamp(SchlickFresnel(VdotN), 0.0, 1.0);
|
float fresnel = clamp(SchlickFresnel(VdotN), 0.0, 1.0);
|
||||||
|
|
||||||
// apply glass look
|
// apply glass look
|
||||||
//float a = mix(0.001, 1.0, ALPHA);
|
//float a = mix(0.001, 1.0, ALPHA);
|
||||||
//ALPHA = mix(fresnel * edge_color.a, 1.0, a);
|
//ALPHA = mix(fresnel * edge_color.a, 1.0, a);
|
|
@ -11,7 +11,6 @@ const temperature_gradient = preload ("./temp_gradient.tres")
|
||||||
@onready var player = $Body/Small/Player
|
@onready var player = $Body/Small/Player
|
||||||
@onready var collision_shape = $Body/CollisionShape3D
|
@onready var collision_shape = $Body/CollisionShape3D
|
||||||
@onready var entity_select = $Body/EntitySelect
|
@onready var entity_select = $Body/EntitySelect
|
||||||
@onready var main = $"/root/Main"
|
|
||||||
|
|
||||||
enum HeatmapType {
|
enum HeatmapType {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
|
@ -39,7 +38,10 @@ func _ready():
|
||||||
wall_material.set_shader_parameter("data", [])
|
wall_material.set_shader_parameter("data", [])
|
||||||
wall_material.set_shader_parameter("data_size", 0)
|
wall_material.set_shader_parameter("data_size", 0)
|
||||||
|
|
||||||
entity_select.house_small = small
|
EventSystem.on_action_down.connect(func(action):
|
||||||
|
if action.name == "by_button":
|
||||||
|
small.value=!small.value
|
||||||
|
)
|
||||||
|
|
||||||
if Store.house.is_loaded() == false:
|
if Store.house.is_loaded() == false:
|
||||||
await Store.house.on_loaded
|
await Store.house.on_loaded
|
||||||
|
@ -87,7 +89,7 @@ func _ready():
|
||||||
tween.set_parallel(true)
|
tween.set_parallel(true)
|
||||||
if small.value:
|
if small.value:
|
||||||
|
|
||||||
var aabb=House.body.get_level_aabb(0)
|
var aabb=App.house.get_level_aabb(0)
|
||||||
var height=aabb.size.y
|
var height=aabb.size.y
|
||||||
|
|
||||||
aabb.position.y=- 0.03
|
aabb.position.y=- 0.03
|
||||||
|
@ -99,9 +101,8 @@ func _ready():
|
||||||
collision_shape.position=center * 0.1
|
collision_shape.position=center * 0.1
|
||||||
entity_select.position=Vector3(0, height * 0.1 + 0.1, 0)
|
entity_select.position=Vector3(0, height * 0.1 + 0.1, 0)
|
||||||
|
|
||||||
var camera=$"/root/Main/XROrigin3D/XRCamera3D"
|
var camera_position=App.camera.global_position
|
||||||
var camera_position=camera.global_position
|
var camera_direction=- App.camera.global_transform.basis.z
|
||||||
var camera_direction=- camera.global_transform.basis.z
|
|
||||||
|
|
||||||
camera_position.y *= 0.5
|
camera_position.y *= 0.5
|
||||||
camera_direction.y=0
|
camera_direction.y=0
|
||||||
|
@ -119,10 +120,7 @@ func _ready():
|
||||||
|
|
||||||
# Update Walls
|
# Update Walls
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
var show_map=heatmap_type.value != HeatmapType.NONE
|
model.visible=heatmap_type.value != HeatmapType.NONE||small.value
|
||||||
var show_small=small.value
|
|
||||||
|
|
||||||
model.visible=show_map||show_small
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update Heatmap
|
# Update Heatmap
|
||||||
|
@ -144,7 +142,7 @@ func _ready():
|
||||||
)
|
)
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
var cam_pos = main.camera.global_position
|
var cam_pos = App.camera.global_position
|
||||||
cam_pos.y += 0.1
|
cam_pos.y += 0.1
|
||||||
player.mesh.height = cam_pos.y
|
player.mesh.height = cam_pos.y
|
||||||
player.position = Vector3(cam_pos.x, cam_pos.y / 2, cam_pos.z)
|
player.position = Vector3(cam_pos.x, cam_pos.y / 2, cam_pos.z)
|
||||||
|
@ -157,7 +155,7 @@ func get_base_scale() -> Vector2:
|
||||||
func get_sensor_data():
|
func get_sensor_data():
|
||||||
var data_list = []
|
var data_list = []
|
||||||
|
|
||||||
for room in House.body.get_rooms(0):
|
for room in App.house.get_rooms():
|
||||||
for entity in room.get_node("Entities").get_children():
|
for entity in room.get_node("Entities").get_children():
|
||||||
if entity is SensorEntity:
|
if entity is SensorEntity:
|
||||||
var sensor = entity as SensorEntity
|
var sensor = entity as SensorEntity
|
||||||
|
@ -165,14 +163,14 @@ func get_sensor_data():
|
||||||
if data == null:
|
if data == null:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var sensor_pos = House.body.to_local(sensor.global_position)
|
var sensor_pos = App.house.to_local(sensor.global_position)
|
||||||
|
|
||||||
data_list.append(Vector4(sensor_pos.x, sensor_pos.y, sensor_pos.z, float(data)))
|
data_list.append(Vector4(sensor_pos.x, sensor_pos.y, sensor_pos.z, float(data)))
|
||||||
|
|
||||||
return data_list
|
return data_list
|
||||||
|
|
||||||
func get_sensor_unit():
|
func get_sensor_unit():
|
||||||
for room in House.body.get_rooms(0):
|
for room in App.house.get_rooms():
|
||||||
for entity in room.get_node("Entities").get_children():
|
for entity in room.get_node("Entities").get_children():
|
||||||
if entity is SensorEntity:
|
if entity is SensorEntity:
|
||||||
var sensor = entity as SensorEntity
|
var sensor = entity as SensorEntity
|
|
@ -1,8 +1,8 @@
|
||||||
[gd_scene load_steps=7 format=3 uid="uid://ds60i5n211hi3"]
|
[gd_scene load_steps=7 format=3 uid="uid://ds60i5n211hi3"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://content/system/house/mini/miniature.gd" id="1_b53yn"]
|
[ext_resource type="Script" path="res://content/system/miniature/miniature.gd" id="1_b53yn"]
|
||||||
[ext_resource type="Script" path="res://content/functions/movable.gd" id="2_x7oed"]
|
[ext_resource type="Script" path="res://content/functions/movable.gd" id="2_x7oed"]
|
||||||
[ext_resource type="Script" path="res://content/system/house/mini/Entity.gd" id="3_tgpny"]
|
[ext_resource type="Script" path="res://content/system/miniature/entity_select.gd" id="3_tgpny"]
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bckw3"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_bckw3"]
|
||||||
|
|
|
@ -73,7 +73,7 @@ func _ready():
|
||||||
trash_bin_large=false
|
trash_bin_large=false
|
||||||
trash_bin_visible=false
|
trash_bin_visible=false
|
||||||
|
|
||||||
House.body.save_all_entities()
|
App.house.save_all_entities()
|
||||||
)
|
)
|
||||||
|
|
||||||
func _get_entity(node: Node):
|
func _get_entity(node: Node):
|
||||||
|
|
|
@ -20,7 +20,7 @@ func _ready():
|
||||||
entities_page.on_select_entity.connect(func(entity_name):
|
entities_page.on_select_entity.connect(func(entity_name):
|
||||||
spawn_sound.play()
|
spawn_sound.play()
|
||||||
|
|
||||||
var entity=House.body.create_entity(entity_name, global_position)
|
var entity=App.house.create_entity(entity_name, global_position)
|
||||||
|
|
||||||
if typeof(entity) == TYPE_BOOL&&entity == false:
|
if typeof(entity) == TYPE_BOOL&&entity == false:
|
||||||
EventSystem.notify("Entity is not in Room", EventNotify.Type.INFO)
|
EventSystem.notify("Entity is not in Room", EventNotify.Type.INFO)
|
||||||
|
|
|
@ -6,18 +6,15 @@ const Notification = preload ("res://content/ui/components/notification/notifica
|
||||||
@onready var open_sound = $OpenSound
|
@onready var open_sound = $OpenSound
|
||||||
@onready var close_sound = $CloseSound
|
@onready var close_sound = $CloseSound
|
||||||
@onready var notify_place = $AnimationContainer/NotifyPlace
|
@onready var notify_place = $AnimationContainer/NotifyPlace
|
||||||
@onready var main = $"/root/Main"
|
|
||||||
|
|
||||||
var show_menu = R.state(false)
|
var show_menu = R.state(false)
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
await main.ready
|
App.main.remove_child(self)
|
||||||
|
|
||||||
main.remove_child(self)
|
|
||||||
|
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
if show_menu.value:
|
if show_menu.value:
|
||||||
main.add_child(self)
|
App.main.add_child(self)
|
||||||
move_into_view()
|
move_into_view()
|
||||||
animation_player.play_backwards("hide_menu")
|
animation_player.play_backwards("hide_menu")
|
||||||
open_sound.play()
|
open_sound.play()
|
||||||
|
@ -30,7 +27,12 @@ func _ready():
|
||||||
|
|
||||||
animation_player.animation_finished.connect(func(_animation):
|
animation_player.animation_finished.connect(func(_animation):
|
||||||
if show_menu.value == false:
|
if show_menu.value == false:
|
||||||
main.remove_child(self)
|
App.main.remove_child(self)
|
||||||
|
)
|
||||||
|
|
||||||
|
EventSystem.on_action_down.connect(func(action):
|
||||||
|
if action.name == "menu_button":
|
||||||
|
toggle_open()
|
||||||
)
|
)
|
||||||
|
|
||||||
EventSystem.on_notify.connect(func(event: EventNotify):
|
EventSystem.on_notify.connect(func(event: EventNotify):
|
||||||
|
@ -44,8 +46,11 @@ func _ready():
|
||||||
notify_place.add_child(notification_node)
|
notify_place.add_child(notification_node)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func toggle_open():
|
||||||
|
show_menu.value = !show_menu.value
|
||||||
|
|
||||||
func move_into_view():
|
func move_into_view():
|
||||||
var camera_transform = main.camera.global_transform
|
var camera_transform = App.camera.global_transform
|
||||||
camera_transform.origin -= camera_transform.basis.z * 0.5
|
camera_transform.origin -= camera_transform.basis.z * 0.5
|
||||||
|
|
||||||
global_transform = camera_transform
|
global_transform = camera_transform
|
|
@ -1,6 +1,6 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
const window_scene = preload("./window.tscn")
|
const window_scene = preload ("./window.tscn")
|
||||||
|
|
||||||
@onready var background = $Background
|
@onready var background = $Background
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ func _ready():
|
||||||
background.visible = false
|
background.visible = false
|
||||||
|
|
||||||
HomeApi.on_connect.connect(func():
|
HomeApi.on_connect.connect(func():
|
||||||
# var rooms = House.body.get_rooms(0)
|
# var rooms = App.house.get_rooms(0)
|
||||||
|
|
||||||
# for room in rooms:
|
# for room in rooms:
|
||||||
# var mesh = room.wall_mesh
|
# var mesh = room.wall_mesh
|
||||||
|
|
|
@ -45,20 +45,20 @@ func _ready():
|
||||||
|
|
||||||
door_button.on_button_up.connect(func():
|
door_button.on_button_up.connect(func():
|
||||||
if doors_map.selected_door.value == null:
|
if doors_map.selected_door.value == null:
|
||||||
var id=House.body.doors.add()
|
var id=App.house.doors.add()
|
||||||
editing_door.value=true
|
editing_door.value=true
|
||||||
doors_map.selected_door.value=id
|
doors_map.selected_door.value=id
|
||||||
elif editing_door.value == false:
|
elif editing_door.value == false:
|
||||||
editing_door.value=true
|
editing_door.value=true
|
||||||
House.body.doors.edit(doors_map.selected_door.value)
|
App.house.doors.edit(doors_map.selected_door.value)
|
||||||
else:
|
else:
|
||||||
House.body.doors.save()
|
App.house.doors.save()
|
||||||
editing_door.value=false
|
editing_door.value=false
|
||||||
)
|
)
|
||||||
|
|
||||||
delete_button.on_button_up.connect(func():
|
delete_button.on_button_up.connect(func():
|
||||||
if doors_map.selected_door.value != null:
|
if doors_map.selected_door.value != null:
|
||||||
House.body.doors.delete(doors_map.selected_door.value)
|
App.house.doors.delete(doors_map.selected_door.value)
|
||||||
doors_map.selected_door.value=null
|
doors_map.selected_door.value=null
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,13 +19,13 @@ func _ready():
|
||||||
|
|
||||||
edit_button.on_button_down.connect(func():
|
edit_button.on_button_down.connect(func():
|
||||||
if active:
|
if active:
|
||||||
House.body.save_reference()
|
App.house.save_reference()
|
||||||
else:
|
else:
|
||||||
House.body.edit_reference()
|
App.house.edit_reference()
|
||||||
active = !active
|
active=!active
|
||||||
)
|
)
|
||||||
|
|
||||||
fix_button.on_button_down.connect(func():
|
fix_button.on_button_down.connect(func():
|
||||||
House.body.fix_reference()
|
App.house.fix_reference()
|
||||||
active = true
|
active=true
|
||||||
)
|
)
|
||||||
|
|
|
@ -46,8 +46,8 @@ func _ready():
|
||||||
EventSystem.notify("Name already taken", EventNotify.Type.WARNING)
|
EventSystem.notify("Name already taken", EventNotify.Type.WARNING)
|
||||||
return
|
return
|
||||||
|
|
||||||
House.body.create_room(room_name, 0)
|
App.house.create_room(room_name)
|
||||||
House.body.edit_room(room_name)
|
App.house.edit_room(room_name)
|
||||||
selected_room.value=room_name
|
selected_room.value=room_name
|
||||||
editing_room.value=true
|
editing_room.value=true
|
||||||
rooms_map.selectable.value=false
|
rooms_map.selectable.value=false
|
||||||
|
@ -56,17 +56,17 @@ func _ready():
|
||||||
rooms_map.selectable.value=!editing_room.value
|
rooms_map.selectable.value=!editing_room.value
|
||||||
|
|
||||||
if editing_room.value == false:
|
if editing_room.value == false:
|
||||||
if !House.body.is_valid_room(selected_room.value):
|
if !App.house.is_valid_room(selected_room.value):
|
||||||
EventSystem.notify("Room was deleted as it had less than 3 corners.", EventNotify.Type.WARNING)
|
EventSystem.notify("Room was deleted as it had less than 3 corners.", EventNotify.Type.WARNING)
|
||||||
House.body.delete_room(selected_room.value)
|
App.house.delete_room(selected_room.value)
|
||||||
selected_room.value=null
|
selected_room.value=null
|
||||||
return
|
return
|
||||||
|
|
||||||
if selected_room.value != null&&selected_room.value != input.text:
|
if selected_room.value != null&&selected_room.value != input.text:
|
||||||
House.body.rename_room(selected_room.value, input.text)
|
App.house.rename_room(selected_room.value, input.text)
|
||||||
selected_room.value=input.text
|
selected_room.value=input.text
|
||||||
|
|
||||||
House.body.edit_room(null)
|
App.house.edit_room(null)
|
||||||
else:
|
else:
|
||||||
House.body.edit_room(selected_room.value)
|
App.house.edit_room(selected_room.value)
|
||||||
)
|
)
|
||||||
|
|
|
@ -40,7 +40,6 @@ func _ready():
|
||||||
cursor_options.on_select.connect(func(option):
|
cursor_options.on_select.connect(func(option):
|
||||||
settings_store.cursor_style=option
|
settings_store.cursor_style=option
|
||||||
settings_store.cursor_style=option
|
settings_store.cursor_style=option
|
||||||
print("cursor_style", option)
|
|
||||||
Store.settings.save_local()
|
Store.settings.save_local()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
[ext_resource type="Texture2D" uid="uid://bl33klueufwja" path="res://assets/cursors/pointer.png" id="6_ypel5"]
|
[ext_resource type="Texture2D" uid="uid://bl33klueufwja" path="res://assets/cursors/pointer.png" id="6_ypel5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://churthrr24yhw" path="res://assets/cursors/old.png" id="7_un12x"]
|
[ext_resource type="Texture2D" uid="uid://churthrr24yhw" path="res://assets/cursors/old.png" id="7_un12x"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_5amor"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jrgbl"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
render_priority = 10
|
render_priority = 10
|
||||||
shader = ExtResource("4_v4u0l")
|
shader = ExtResource("4_v4u0l")
|
||||||
|
@ -23,7 +23,7 @@ shader_parameter/corner_radius = 0.2
|
||||||
shader_parameter/roughness = 0.3
|
shader_parameter/roughness = 0.3
|
||||||
shader_parameter/grain_amount = 0.02
|
shader_parameter/grain_amount = 0.02
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id="QuadMesh_i5pey"]
|
[sub_resource type="QuadMesh" id="QuadMesh_si7x8"]
|
||||||
size = Vector2(0.04, 0.04)
|
size = Vector2(0.04, 0.04)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_01skh"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_01skh"]
|
||||||
|
@ -34,7 +34,7 @@ size = Vector3(0.04, 0.04, 0.01)
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
size = Vector3(0.04, 0.04, 0.03)
|
size = Vector3(0.04, 0.04, 0.03)
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dsrxt"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_arcnd"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
render_priority = 10
|
render_priority = 10
|
||||||
shader = ExtResource("4_v4u0l")
|
shader = ExtResource("4_v4u0l")
|
||||||
|
@ -49,7 +49,7 @@ shader_parameter/corner_radius = 0.2
|
||||||
shader_parameter/roughness = 0.3
|
shader_parameter/roughness = 0.3
|
||||||
shader_parameter/grain_amount = 0.02
|
shader_parameter/grain_amount = 0.02
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id="QuadMesh_7pl3m"]
|
[sub_resource type="QuadMesh" id="QuadMesh_ajawk"]
|
||||||
size = Vector2(0.04, 0.04)
|
size = Vector2(0.04, 0.04)
|
||||||
|
|
||||||
[node name="FeaturesMenu" type="Node3D"]
|
[node name="FeaturesMenu" type="Node3D"]
|
||||||
|
@ -93,8 +93,8 @@ icon = true
|
||||||
toggleable = true
|
toggleable = true
|
||||||
|
|
||||||
[node name="Panel3D" parent="CursorOptions/CircleCursor/Body" index="0"]
|
[node name="Panel3D" parent="CursorOptions/CircleCursor/Body" index="0"]
|
||||||
material_override = SubResource("ShaderMaterial_5amor")
|
material_override = SubResource("ShaderMaterial_jrgbl")
|
||||||
mesh = SubResource("QuadMesh_i5pey")
|
mesh = SubResource("QuadMesh_si7x8")
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="CursorOptions/CircleCursor/Body" index="1"]
|
[node name="CollisionShape3D" parent="CursorOptions/CircleCursor/Body" index="1"]
|
||||||
shape = SubResource("BoxShape3D_01skh")
|
shape = SubResource("BoxShape3D_01skh")
|
||||||
|
@ -126,8 +126,8 @@ icon = true
|
||||||
toggleable = true
|
toggleable = true
|
||||||
|
|
||||||
[node name="Panel3D" parent="CursorOptions/RetroCursor/Body" index="0"]
|
[node name="Panel3D" parent="CursorOptions/RetroCursor/Body" index="0"]
|
||||||
material_override = SubResource("ShaderMaterial_dsrxt")
|
material_override = SubResource("ShaderMaterial_arcnd")
|
||||||
mesh = SubResource("QuadMesh_7pl3m")
|
mesh = SubResource("QuadMesh_ajawk")
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="CursorOptions/RetroCursor/Body" index="1"]
|
[node name="CollisionShape3D" parent="CursorOptions/RetroCursor/Body" index="1"]
|
||||||
shape = SubResource("BoxShape3D_01skh")
|
shape = SubResource("BoxShape3D_01skh")
|
||||||
|
|
|
@ -6,11 +6,11 @@ extends Node3D
|
||||||
func _ready():
|
func _ready():
|
||||||
|
|
||||||
save.on_button_down.connect(func():
|
save.on_button_down.connect(func():
|
||||||
House.body.save_all_entities()
|
App.house.save_all_entities()
|
||||||
Store.house.save_local()
|
Store.house.save_local()
|
||||||
)
|
)
|
||||||
|
|
||||||
clear_save.on_button_down.connect(func():
|
clear_save.on_button_down.connect(func():
|
||||||
Store.house.clear()
|
Store.house.clear()
|
||||||
House.body.update_house()
|
App.house.update_house()
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
const Miniature = preload ("res://content/system/house/mini/miniature.gd")
|
const Miniature = preload ("res://content/system/miniature/miniature.gd")
|
||||||
|
|
||||||
@onready var mini_view_button = $Content/MiniView
|
@onready var mini_view_button = $Content/MiniView
|
||||||
@onready var heat_map_button = $Content/HeatMap
|
@onready var heat_map_button = $Content/HeatMap
|
||||||
|
@ -13,81 +13,79 @@ const Miniature = preload ("res://content/system/house/mini/miniature.gd")
|
||||||
func _ready():
|
func _ready():
|
||||||
background.visible = false
|
background.visible = false
|
||||||
|
|
||||||
if !House.body.is_node_ready():
|
if App.miniature.is_node_ready() == false:
|
||||||
await House.body.ready
|
await App.miniature.ready
|
||||||
|
|
||||||
var mini_view = House.body.mini_view
|
|
||||||
|
|
||||||
mini_view_button.on_toggled.connect(func(active):
|
mini_view_button.on_toggled.connect(func(active):
|
||||||
mini_view.small.value=active
|
App.miniature.small.value=active
|
||||||
)
|
)
|
||||||
|
|
||||||
heat_map_button.on_toggled.connect(func(active):
|
heat_map_button.on_toggled.connect(func(active):
|
||||||
if active == false:
|
if active == false:
|
||||||
if mini_view.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE:
|
if App.miniature.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE:
|
||||||
mini_view.heatmap_type.value=Miniature.HeatmapType.NONE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.NONE
|
||||||
return
|
return
|
||||||
|
|
||||||
mini_view.heatmap_type.value=Miniature.HeatmapType.TEMPERATURE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.TEMPERATURE
|
||||||
)
|
)
|
||||||
|
|
||||||
humudity_map_button.on_toggled.connect(func(active):
|
humudity_map_button.on_toggled.connect(func(active):
|
||||||
if active == false:
|
if active == false:
|
||||||
if mini_view.heatmap_type.value == Miniature.HeatmapType.HUMIDITY:
|
if App.miniature.heatmap_type.value == Miniature.HeatmapType.HUMIDITY:
|
||||||
mini_view.heatmap_type.value=Miniature.HeatmapType.NONE
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.NONE
|
||||||
return
|
return
|
||||||
|
|
||||||
mini_view.heatmap_type.value=Miniature.HeatmapType.HUMIDITY
|
App.miniature.heatmap_type.value=Miniature.HeatmapType.HUMIDITY
|
||||||
)
|
)
|
||||||
|
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
heat_map_button.active=mini_view.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE
|
heat_map_button.active=App.miniature.heatmap_type.value == Miniature.HeatmapType.TEMPERATURE
|
||||||
humudity_map_button.active=mini_view.heatmap_type.value == Miniature.HeatmapType.HUMIDITY
|
humudity_map_button.active=App.miniature.heatmap_type.value == Miniature.HeatmapType.HUMIDITY
|
||||||
)
|
)
|
||||||
|
|
||||||
min_slider.on_value_changed.connect(func(value):
|
min_slider.on_value_changed.connect(func(value):
|
||||||
if value >= mini_view.selected_scale.value.y:
|
if value >= App.miniature.selected_scale.value.y:
|
||||||
min_slider.value=mini_view.selected_scale.value.y
|
min_slider.value=App.miniature.selected_scale.value.y
|
||||||
return
|
return
|
||||||
|
|
||||||
mini_view.selected_scale.value.x=value
|
App.miniature.selected_scale.value.x=value
|
||||||
)
|
)
|
||||||
|
|
||||||
max_slider.on_value_changed.connect(func(value):
|
max_slider.on_value_changed.connect(func(value):
|
||||||
if value <= mini_view.selected_scale.value.x:
|
if value <= App.miniature.selected_scale.value.x:
|
||||||
max_slider.value=mini_view.selected_scale.value.x
|
max_slider.value=App.miniature.selected_scale.value.x
|
||||||
return
|
return
|
||||||
|
|
||||||
mini_view.selected_scale.value.y=value
|
App.miniature.selected_scale.value.y=value
|
||||||
)
|
)
|
||||||
|
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
min_slider.value=mini_view.selected_scale.value.x
|
min_slider.value=App.miniature.selected_scale.value.x
|
||||||
max_slider.value=mini_view.selected_scale.value.y
|
max_slider.value=App.miniature.selected_scale.value.y
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update Slider
|
# Update Slider
|
||||||
R.effect(func(_arg):
|
R.effect(func(_arg):
|
||||||
var minmax=mini_view.get_base_scale()
|
var minmax=App.miniature.get_base_scale()
|
||||||
min_slider.min=minmax.x
|
min_slider.min=minmax.x
|
||||||
min_slider.max=minmax.y
|
min_slider.max=minmax.y
|
||||||
|
|
||||||
max_slider.min=minmax.x
|
max_slider.min=minmax.x
|
||||||
max_slider.max=minmax.y
|
max_slider.max=minmax.y
|
||||||
|
|
||||||
var sensor_minmax=mini_view.get_sensor_scale()
|
var sensor_minmax=App.miniature.get_sensor_scale()
|
||||||
|
|
||||||
sensor_minmax.x=floor(sensor_minmax.x)
|
sensor_minmax.x=floor(sensor_minmax.x)
|
||||||
sensor_minmax.y=ceil(sensor_minmax.y)
|
sensor_minmax.y=ceil(sensor_minmax.y)
|
||||||
|
|
||||||
mini_view.selected_scale.value=sensor_minmax
|
App.miniature.selected_scale.value=sensor_minmax
|
||||||
min_slider.value=sensor_minmax.x
|
min_slider.value=sensor_minmax.x
|
||||||
max_slider.value=sensor_minmax.y
|
max_slider.value=sensor_minmax.y
|
||||||
|
|
||||||
var unit=mini_view.get_sensor_unit()
|
var unit=App.miniature.get_sensor_unit()
|
||||||
|
|
||||||
min_slider.label_unit=unit
|
min_slider.label_unit=unit
|
||||||
max_slider.label_unit=unit
|
max_slider.label_unit=unit
|
||||||
)
|
)
|
||||||
|
|
||||||
R.bind(opacity_slider, "value", mini_view.opacity, opacity_slider.on_value_changed)
|
R.bind(opacity_slider, "value", App.miniature.opacity, opacity_slider.on_value_changed)
|
||||||
|
|
|
@ -2,7 +2,6 @@ extends Node3D
|
||||||
|
|
||||||
@onready var getting_started_button = $GettingStartedButton
|
@onready var getting_started_button = $GettingStartedButton
|
||||||
@onready var close_button = $CloseButton
|
@onready var close_button = $CloseButton
|
||||||
@onready var camera = $"/root/Main/XROrigin3D/XRCamera3D"
|
|
||||||
var next_new_position = null
|
var next_new_position = null
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -30,11 +29,11 @@ func close():
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
func _slow_tick(delta):
|
func _slow_tick(delta):
|
||||||
var new_position = camera.global_position + camera.global_transform.basis.z * - 0.5
|
var new_position = App.camera.global_position + App.camera.global_transform.basis.z * - 0.5
|
||||||
|
|
||||||
if next_new_position.distance_to(new_position) > 0.2:
|
if next_new_position.distance_to(new_position) > 0.2:
|
||||||
next_new_position = new_position
|
next_new_position = new_position
|
||||||
var new_direction = Basis.looking_at((camera.global_position - new_position) * - 1)
|
var new_direction = Basis.looking_at((App.camera.global_position - new_position) * - 1)
|
||||||
|
|
||||||
var tween = create_tween()
|
var tween = create_tween()
|
||||||
tween.set_parallel(true)
|
tween.set_parallel(true)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
const console_scene = preload ("res://content/ui/console.tscn")
|
|
||||||
@onready var main = $"/root/Main"
|
@onready var main = $"/root/Main"
|
||||||
@onready var console = $"/root/Main/Console"
|
@onready var console = $"/root/Main/Console"
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,19 @@ func notify(message: String, type:=EventNotify.Type.INFO):
|
||||||
event.type = type
|
event.type = type
|
||||||
emit("notify", event)
|
emit("notify", event)
|
||||||
|
|
||||||
|
## Helper for emitting controller actions
|
||||||
|
func emit_action(name: String, value, right_controller: bool=true):
|
||||||
|
var event = EventAction.new()
|
||||||
|
event.name = name
|
||||||
|
event.value = value
|
||||||
|
event.right_controller = right_controller
|
||||||
|
|
||||||
|
match typeof(value):
|
||||||
|
TYPE_BOOL:
|
||||||
|
EventSystem.emit("action_down" if value else "action_up", event)
|
||||||
|
TYPE_FLOAT, TYPE_VECTOR2:
|
||||||
|
EventSystem.emit("action_value", event)
|
||||||
|
|
||||||
## Returns true when the node is focused
|
## Returns true when the node is focused
|
||||||
func is_focused(node: Node):
|
func is_focused(node: Node):
|
||||||
return _active_node == node
|
return _active_node == node
|
||||||
|
|
|
@ -22,7 +22,6 @@ var api: Node
|
||||||
var reconnect_timer := Timer.new()
|
var reconnect_timer := Timer.new()
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
print("HomeApi ready")
|
|
||||||
start()
|
start()
|
||||||
|
|
||||||
reconnect_timer.wait_time = 60
|
reconnect_timer.wait_time = 60
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
extends Node
|
|
||||||
## Shortcut to get the House node from the Main scene
|
|
||||||
|
|
||||||
const HouseClass = preload ("res://content/system/house/house.gd")
|
|
||||||
|
|
||||||
@onready var body: HouseClass = get_node_or_null("/root/Main/House")
|
|
16
app/lib/globals/main.gd
Normal file
16
app/lib/globals/main.gd
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
const Main = preload ("res://content/main.gd")
|
||||||
|
const House = preload ("res://content/system/house/house.gd")
|
||||||
|
const Menu = preload ("res://content/ui/menu/menu.gd")
|
||||||
|
const Miniature = preload ("res://content/system/miniature/miniature.gd")
|
||||||
|
const ControllerLeft = preload ("res://content/system/controller_left/controller_left.gd")
|
||||||
|
const ControllerRight = preload ("res://content/system/controller_right/controller_right.gd")
|
||||||
|
|
||||||
|
@onready var main: Main = get_node_or_null("/root/Main")
|
||||||
|
@onready var house: House = get_node_or_null("/root/Main/House")
|
||||||
|
@onready var menu: Menu = get_node_or_null("/root/Main/Menu")
|
||||||
|
@onready var camera: XRCamera3D = get_node_or_null("/root/Main/XROrigin3D/XRCamera3D")
|
||||||
|
@onready var miniature: Miniature = get_node_or_null("/root/Main/Miniature")
|
||||||
|
@onready var controller_left: ControllerLeft = get_node_or_null("/root/Main/XROrigin3D/XRControllerLeft")
|
||||||
|
@onready var controller_right: ControllerRight = get_node_or_null("/root/Main/XROrigin3D/XRControllerRight")
|
|
@ -17,8 +17,9 @@ func _init(hand: Node3D, hand_mesh: MeshInstance3D, tip: Node3D):
|
||||||
func _ready():
|
func _ready():
|
||||||
var body_container = Node3D.new()
|
var body_container = Node3D.new()
|
||||||
body_container.name = "HandBodyContainer"
|
body_container.name = "HandBodyContainer"
|
||||||
|
body_container.top_level = true
|
||||||
|
|
||||||
get_node("/root/Main/").add_child.call_deferred(body_container)
|
add_child(body_container)
|
||||||
|
|
||||||
tip_body = TipCollider.instantiate()
|
tip_body = TipCollider.instantiate()
|
||||||
tip_body.global_position = tip.global_position
|
tip_body.global_position = tip.global_position
|
||||||
|
|
|
@ -22,10 +22,10 @@ driver/enable_input=true
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
XRToolsUserSettings="*res://addons/godot-xr-tools/user_settings/user_settings.gd"
|
XRToolsUserSettings="*res://addons/godot-xr-tools/user_settings/user_settings.gd"
|
||||||
|
App="*res://lib/globals/main.gd"
|
||||||
HomeApi="*res://lib/globals/home_api.gd"
|
HomeApi="*res://lib/globals/home_api.gd"
|
||||||
Store="*res://lib/globals/main_store.gd"
|
Store="*res://lib/globals/main_store.gd"
|
||||||
EventSystem="*res://lib/globals/event_system.gd"
|
EventSystem="*res://lib/globals/event_system.gd"
|
||||||
House="*res://lib/globals/house_body.gd"
|
|
||||||
Request="*res://lib/globals/request.gd"
|
Request="*res://lib/globals/request.gd"
|
||||||
TouchManager="*res://lib/utils/touch/touch.gd"
|
TouchManager="*res://lib/utils/touch/touch.gd"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user