add light model and brightness slider
This commit is contained in:
parent
79e9d37295
commit
0208905123
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d9423ef5121871fe9f60a673f76728265d2618f318a14e73affb4257cb42f73d
|
oid sha256:991ebe1738a0621dd536436b99a7b5149d10e6b185008ec533eb2c5ca79fec0c
|
||||||
size 3906893
|
size 3087839
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://bertj8bp8b5l1"]
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:55d5f30db336a8f8f7633743c23e41077d5c1a1b900c475a6d3811746eba3d1b
|
||||||
[resource]
|
size 141
|
||||||
albedo_color = Color(0.286275, 0.309804, 0.439216, 1)
|
|
||||||
|
|
|
@ -2,22 +2,53 @@ extends StaticBody3D
|
||||||
|
|
||||||
@export var entity_id = "switch.plug_printer_2"
|
@export var entity_id = "switch.plug_printer_2"
|
||||||
@onready var sprite: AnimatedSprite3D = $Icon
|
@onready var sprite: AnimatedSprite3D = $Icon
|
||||||
|
@onready var animation: AnimationPlayer = $AnimationPlayer
|
||||||
|
@onready var shape = $CSGCombiner3D
|
||||||
|
@onready var rod_top = $RodTop
|
||||||
|
@onready var rod_bottom = $RodBottom
|
||||||
|
@onready var slider_knob = $Knob
|
||||||
|
var state = false
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready():
|
||||||
var stateInfo = await HomeAdapters.adapter.get_state(entity_id)
|
var stateInfo = await HomeAdapters.adapter.get_state(entity_id)
|
||||||
if stateInfo["state"] == "on":
|
set_state(stateInfo["state"] == "on")
|
||||||
sprite.set_frame(0)
|
|
||||||
else:
|
|
||||||
sprite.set_frame(1)
|
|
||||||
|
|
||||||
|
await HomeAdapters.adapter.watch_state(entity_id, func(new_state):
|
||||||
|
if (new_state["state"] == "on") == state:
|
||||||
|
return
|
||||||
|
set_state(new_state["state"] == "on")
|
||||||
|
)
|
||||||
|
|
||||||
|
func set_state(state: bool):
|
||||||
|
self.state = state
|
||||||
|
if state:
|
||||||
|
animation.play_backwards("light")
|
||||||
|
else:
|
||||||
|
animation.play("light")
|
||||||
|
|
||||||
func _on_click(event):
|
func _on_click(event):
|
||||||
HomeAdapters.adapter.set_state(entity_id, "off" if sprite.get_frame() == 0 else "on")
|
if event.target == self:
|
||||||
if sprite.get_frame() == 0:
|
HomeAdapters.adapter.set_state(entity_id, "on" if !state else "off")
|
||||||
sprite.set_frame(1)
|
set_state(!state)
|
||||||
else:
|
else:
|
||||||
sprite.set_frame(0)
|
_on_clickable_on_click(event)
|
||||||
|
|
||||||
func _on_request_completed():
|
func _on_request_completed():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func _on_clickable_on_click(event):
|
||||||
|
var click_pos: Vector3 = to_local(event.ray.get_collision_point())
|
||||||
|
var vec_bottom_to_top = rod_top.position - rod_bottom.position
|
||||||
|
|
||||||
|
var length_click = click_pos.y - rod_bottom.position.y
|
||||||
|
var length_total = vec_bottom_to_top.y
|
||||||
|
|
||||||
|
var ratio = length_click / length_total
|
||||||
|
|
||||||
|
var new_pos = rod_bottom.position.lerp(rod_top.position, ratio)
|
||||||
|
|
||||||
|
slider_knob.position = new_pos
|
||||||
|
|
||||||
|
HomeAdapters.adapter.set_state(entity_id, "on" if state else "off", {"brightness_pct": int(ratio * 100)})
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
[gd_scene load_steps=7 format=3 uid="uid://cw86rc42dv2d8"]
|
[gd_scene load_steps=14 format=3 uid="uid://cw86rc42dv2d8"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://content/entities/light/light.gd" id="1_ykxy3"]
|
[ext_resource type="Script" path="res://content/entities/light/light.gd" id="1_ykxy3"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b72vsbcvqqxg7" path="res://assets/materials/swich_on.png" id="2_6gn2e"]
|
[ext_resource type="Texture2D" uid="uid://b72vsbcvqqxg7" path="res://assets/materials/swich_on.png" id="2_6gn2e"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cvc0o6dsktnvl" path="res://assets/materials/switch_off.png" id="3_qlm62"]
|
[ext_resource type="Texture2D" uid="uid://cvc0o6dsktnvl" path="res://assets/materials/switch_off.png" id="3_qlm62"]
|
||||||
[ext_resource type="Script" path="res://content/functions/movable.gd" id="4_4sfxb"]
|
[ext_resource type="Script" path="res://content/functions/movable.gd" id="4_4sfxb"]
|
||||||
|
[ext_resource type="Material" uid="uid://vce66e7sbc3n" path="res://content/entities/light/light_on.tres" id="5_50gph"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_ukj14"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_ukj14"]
|
||||||
radius = 0.1
|
radius = 0.06
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_ldpuo"]
|
[sub_resource type="SpriteFrames" id="SpriteFrames_ldpuo"]
|
||||||
animations = [{
|
animations = [{
|
||||||
|
@ -22,6 +23,69 @@ animations = [{
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_7o31s"]
|
||||||
|
resource_name = "light"
|
||||||
|
length = 0.3
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("CSGCombiner3D:material_override:albedo_color")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.3),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(1, 0.85098, 0, 1), Color(0.231373, 0.231373, 0.231373, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_afofi"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("CSGCombiner3D:material_override:albedo_color")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(1, 0.85098, 0, 1)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("Knob:position")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0, 0.0492394, -0.0903599)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_8a76q"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_afofi"),
|
||||||
|
"light": SubResource("Animation_7o31s")
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_j3pn3"]
|
||||||
|
top_radius = 0.002
|
||||||
|
bottom_radius = 0.002
|
||||||
|
height = 0.1
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_tysib"]
|
||||||
|
height = 0.1
|
||||||
|
radius = 0.006
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_s8215"]
|
||||||
|
top_radius = 0.004
|
||||||
|
bottom_radius = 0.004
|
||||||
|
height = 0.002
|
||||||
|
|
||||||
[node name="Light" type="StaticBody3D"]
|
[node name="Light" type="StaticBody3D"]
|
||||||
script = ExtResource("1_ykxy3")
|
script = ExtResource("1_ykxy3")
|
||||||
|
|
||||||
|
@ -29,9 +93,50 @@ script = ExtResource("1_ykxy3")
|
||||||
shape = SubResource("SphereShape3D_ukj14")
|
shape = SubResource("SphereShape3D_ukj14")
|
||||||
|
|
||||||
[node name="Icon" type="AnimatedSprite3D" parent="."]
|
[node name="Icon" type="AnimatedSprite3D" parent="."]
|
||||||
|
visible = false
|
||||||
pixel_size = 0.0005
|
pixel_size = 0.0005
|
||||||
billboard = 1
|
billboard = 1
|
||||||
sprite_frames = SubResource("SpriteFrames_ldpuo")
|
sprite_frames = SubResource("SpriteFrames_ldpuo")
|
||||||
|
|
||||||
[node name="Movable" type="Node" parent="."]
|
[node name="Movable" type="Node" parent="."]
|
||||||
script = ExtResource("4_4sfxb")
|
script = ExtResource("4_4sfxb")
|
||||||
|
|
||||||
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]
|
||||||
|
transform = Transform3D(1, 9.69949e-05, 0.000589194, -9.77749e-05, 0.999999, 0.00135802, -0.000589065, -0.00135808, 0.999999, 0, 0, 0)
|
||||||
|
material_override = ExtResource("5_50gph")
|
||||||
|
|
||||||
|
[node name="CSGSphere3D" type="CSGSphere3D" parent="CSGCombiner3D"]
|
||||||
|
radius = 0.05
|
||||||
|
radial_segments = 36
|
||||||
|
rings = 12
|
||||||
|
|
||||||
|
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CSGCombiner3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0485739, 0)
|
||||||
|
radius = 0.02
|
||||||
|
height = 0.03
|
||||||
|
sides = 36
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_8a76q")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Rod" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.0903599)
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Rod"]
|
||||||
|
mesh = SubResource("CylinderMesh_j3pn3")
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Rod"]
|
||||||
|
shape = SubResource("CylinderShape3D_tysib")
|
||||||
|
|
||||||
|
[node name="Knob" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0492394, -0.0903599)
|
||||||
|
mesh = SubResource("CylinderMesh_s8215")
|
||||||
|
|
||||||
|
[node name="RodBottom" type="Marker3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0501399, -0.090675)
|
||||||
|
|
||||||
|
[node name="RodTop" type="Marker3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0498752, -0.090942)
|
||||||
|
|
3
content/entities/light/light_on.tres
Normal file
3
content/entities/light/light_on.tres
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:9a91a5382c57467807e4afe3a1d52a1ce762977812c0ed7822b73bf440f32b35
|
||||||
|
size 263
|
|
@ -5,6 +5,8 @@ var sky_passthrough = preload("res://assets/materials/sky_passthrough.material")
|
||||||
|
|
||||||
@onready var environment: WorldEnvironment = $WorldEnvironment
|
@onready var environment: WorldEnvironment = $WorldEnvironment
|
||||||
@onready var camera: XRCamera3D = $XROrigin3D/XRCamera3D
|
@onready var camera: XRCamera3D = $XROrigin3D/XRCamera3D
|
||||||
|
@onready var controller_left = $XROrigin3D/XRControllerLeft
|
||||||
|
@onready var controller_right = $XROrigin3D/XRControllerRight
|
||||||
@onready var house = $House
|
@onready var house = $House
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -26,7 +28,11 @@ func _process(delta):
|
||||||
camera_basis.x = camera_basis.x.normalized()
|
camera_basis.x = camera_basis.x.normalized()
|
||||||
camera_basis.z = camera_basis.z.normalized()
|
camera_basis.z = camera_basis.z.normalized()
|
||||||
|
|
||||||
camera.position += camera_basis * vector_key_mapping(KEY_D, KEY_A, KEY_S, KEY_W) * delta
|
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):
|
func vector_key_mapping(key_positive_x: int, key_negative_x: int, key_positive_y: int, key_negative_y: int):
|
||||||
|
|
|
@ -81,4 +81,4 @@ shadow_enabled = true
|
||||||
xr_origin = NodePath("../XROrigin3D")
|
xr_origin = NodePath("../XROrigin3D")
|
||||||
|
|
||||||
[node name="House" parent="." instance=ExtResource("8_qkrg7")]
|
[node name="House" parent="." instance=ExtResource("8_qkrg7")]
|
||||||
transform = Transform3D(0.999999, -1.39634e-11, 0, 9.48053e-12, 1, 0, 0, 0, 1, -1.83323, 0.000545101, 0.477467)
|
transform = Transform3D(0.404247, 0.000180645, 0.914648, 0.00017221, 0.999999, -0.000273614, -0.914648, 0.00026812, 0.404247, -0.343479, 0.000110551, 1.91547)
|
||||||
|
|
|
@ -113,7 +113,7 @@ func start_subscriptions():
|
||||||
if packet.event.c[entity]["+"].has("s"):
|
if packet.event.c[entity]["+"].has("s"):
|
||||||
entities[entity]["state"] = packet.event.c[entity]["+"]["s"]
|
entities[entity]["state"] = packet.event.c[entity]["+"]["s"]
|
||||||
if packet.event.c[entity]["+"].has("a"):
|
if packet.event.c[entity]["+"].has("a"):
|
||||||
entities[entity]["attributes"].merge(packet.event.c[entity]["+"]["a"])
|
entities[entity]["attributes"].merge(packet.event.c[entity]["+"]["a"], true)
|
||||||
entitiy_callbacks.call_key(entity, [entities[entity]])
|
entitiy_callbacks.call_key(entity, [entities[entity]])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user