Add sleeping

This commit is contained in:
Daniel Snider 2022-08-17 05:46:36 -07:00
parent 22e2fc0067
commit 30f171f3d9
28 changed files with 1677 additions and 221 deletions

BIN
assets/level/Level.glb Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

14
assets/level/Level.tscn Normal file
View File

@ -0,0 +1,14 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://assets/level/Level.glb" type="PackedScene" id=1]
[sub_resource type="CylinderShape" id=1]
height = 6.30212
radius = 2.14679
[node name="Level" instance=ExtResource( 1 )]
[node name="RTG" type="StaticBody" parent="." index="81"]
[node name="CollisionShape" type="CollisionShape" parent="RTG" index="0"]
shape = SubResource( 1 )

Binary file not shown.

Binary file not shown.

View File

@ -45,7 +45,8 @@
"timeline-1660444277.json",
"timeline-1660454153.json",
"timeline-1660463789.json",
"timeline-1660696967.json"
"timeline-1660696967.json",
"timeline-1660738067.json"
],
"folders": {

View File

@ -17,3 +17,7 @@ timeline_file="timeline-1660443870.json"
[animations]
default_join_animation_length=0.5
[dialog]
propagate_input=false

View File

@ -1,10 +1,15 @@
{
"events": [
{
"character": "character-1660444172.json",
"event_id": "dialogic_001",
"portrait": "",
"text": "I should put this item down somewhere before going to bed."
}
],
"metadata": {
"dialogic-version": "1.4.4",
"file": "timeline-1660444277.json",
"name": "whatever"
"name": "item_in_bed"
}
}

View File

@ -5,17 +5,6 @@
"event_id": "dialogic_001",
"portrait": "",
"text": "Oh boy! I gotta go to bed. That was tiring!"
},
{
"event_id": "dialogic_023",
"hide_dialogbox": true,
"wait_seconds": 1
},
{
"character": "character-1660444172.json",
"event_id": "dialogic_001",
"portrait": "",
"text": "*yawn* Ah! What a good day it is to be stranded on this moon."
}
],
"metadata": {

View File

@ -0,0 +1,15 @@
{
"events": [
{
"character": "character-1660444172.json",
"event_id": "dialogic_001",
"portrait": "",
"text": "*yawn* Ah! What a good day it is to be stranded on this moon."
}
],
"metadata": {
"dialogic-version": "1.4.4",
"file": "timeline-1660738067.json",
"name": "wake_up"
}
}

View File

@ -99,17 +99,13 @@ _global_script_class_icons={
[application]
config/name="project-dung"
run/main_scene="res://scenes/main.tscn"
run/main_scene="res://scenes/dev-daniel.tscn"
config/icon="res://icon.png"
[debug]
settings/stdout/print_fps=true
[display]
window/size/width=2048
window/size/height=1200
window/size/width=1920
window/size/height=1080
window/dpi/allow_hidpi=true
[editor_plugins]

31
scenes/bed.tscn Normal file
View File

@ -0,0 +1,31 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://scripts/bed.gd" type="Script" id=1]
[sub_resource type="CubeMesh" id=2]
size = Vector3( 1.7, 0.5, 1 )
[sub_resource type="BoxShape" id=1]
extents = Vector3( 0.85, 2, 0.5 )
[node name="bed" type="Area"]
collision_layer = 8
collision_mask = 4
script = ExtResource( 1 )
[node name="MeshInstance" type="MeshInstance" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0 )
mesh = SubResource( 2 )
[node name="StaticBody" type="StaticBody" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0 )
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
shape = SubResource( 1 )
[node name="CollisionShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0 )
shape = SubResource( 1 )
[node name="hop_position" type="Position3D" parent="." groups=["bed_hop_position"]]
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0.919234 )

View File

@ -2,31 +2,31 @@
[ext_resource path="res://scripts/camera_room.gd" type="Script" id=1]
[sub_resource type="BoxShape" id=1]
extents = Vector3( 2.39087, 1.93969, 2.08096 )
[sub_resource type="BoxShape" id=8]
extents = Vector3( 2.39087, 1.93969, 2.6586 )
[sub_resource type="CapsuleShape" id=2]
radius = 2.07384
height = 8.68195
radius = 4.16005
height = 5.24756
[node name="camera_room0" type="Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 15.4075, 0, 0 )
[node name="camera_galley" type="Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16.3042 )
script = ExtResource( 1 )
[node name="camera" type="Camera" parent="."]
transform = Transform( 0.054985, 0.806829, -0.588221, 0, 0.589112, 0.808052, 0.998487, -0.0444307, 0.0323923, -6.51055, 9.74907, 0 )
fov = 49.8
transform = Transform( 1, 0, 0, 0, 0.642788, 0.766044, 0, -0.766044, 0.642788, 0, 8.562, 6.501 )
fov = 40.0
[node name="hitbox" type="Area" parent="."]
collision_layer = 16
collision_mask = 2
[node name="CollisionShape" type="CollisionShape" parent="hitbox"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.12314, 2.07098, 0.535633 )
shape = SubResource( 1 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00713015, 2.07098, 1.38972 )
shape = SubResource( 8 )
[node name="CollisionShape2" type="CollisionShape" parent="hitbox"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0097599, 0, -0.487964 )
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, -0.099 )
shape = SubResource( 2 )
[connection signal="area_entered" from="hitbox" to="." method="_on_hitbox_area_entered"]

View File

@ -75,6 +75,11 @@ margin_right = 12.0
margin_bottom = 20.0
text = "Damage Random Object"
[node name="timer_2_s" type="Button" parent="TabContainer/Events"]
margin_right = 12.0
margin_bottom = 20.0
text = "Day Timer 00:02"
[connection signal="pressed" from="TabContainer/Player/charge" to="." method="_on_charge_pressed"]
[connection signal="pressed" from="TabContainer/Player/charge_5" to="." method="_on_charge_5_pressed"]
[connection signal="pressed" from="TabContainer/Player/raw_yam" to="." method="_on_raw_yam_pressed"]
@ -83,3 +88,4 @@ text = "Damage Random Object"
[connection signal="pressed" from="TabContainer/Player/repair_kit" to="." method="_on_repair_kit_pressed"]
[connection signal="pressed" from="TabContainer/Player/clear" to="." method="_on_clear_pressed"]
[connection signal="pressed" from="TabContainer/Events/random_damage" to="." method="_on_random_damage_pressed"]
[connection signal="pressed" from="TabContainer/Events/timer_2_s" to="." method="_on_timer_2_s_pressed"]

View File

@ -2,7 +2,7 @@
[ext_resource path="res://scripts/game_manager.gd" type="Script" id=1]
[node name="game_manager" type="Node"]
[node name="game_manager" type="Node" groups=["game_manager"]]
script = ExtResource( 1 )
[node name="UI" type="Control" parent="."]

View File

@ -1,16 +1,17 @@
[gd_scene load_steps=14 format=2]
[gd_scene load_steps=15 format=2]
[ext_resource path="res://assets/moonbase_whitebox/Moonbase_Whitebox.tscn" type="PackedScene" id=1]
[ext_resource path="res://assets/level/Level.tscn" type="PackedScene" id=1]
[ext_resource path="res://scripts/cameras.gd" type="Script" id=2]
[ext_resource path="res://scenes/player.tscn" type="PackedScene" id=3]
[ext_resource path="res://scenes/camera_room.tscn" type="PackedScene" id=4]
[ext_resource path="res://scripts/camera_room.gd" type="Script" id=5]
[ext_resource path="res://scripts/tracking_camera.gd" type="Script" id=6]
[ext_resource path="res://scenes/game_manager.tscn" type="PackedScene" id=7]
[ext_resource path="res://scripts/dof_focus.gd" type="Script" id=8]
[sub_resource type="CylinderShape" id=1]
height = 5.22615
radius = 8.72145
radius = 12.052
[sub_resource type="BoxShape" id=4]
extents = Vector3( 1.78436, 2.33105, 6.04815 )
@ -30,8 +31,7 @@ tracks/0/keys = {
"values": [ 0.0 ]
}
[sub_resource type="Animation" id=2]
resource_name = "switch_camera"
[sub_resource type="Animation" id=9]
length = 0.3
tracks/0/type = "value"
tracks/0/path = NodePath(".:camera_lerp")
@ -51,20 +51,27 @@ sky_top_color = Color( 0.486275, 0.486275, 0.486275, 1 )
sky_horizon_color = Color( 0.180392, 0.180392, 0.180392, 1 )
ground_bottom_color = Color( 0.545098, 0.545098, 0.545098, 1 )
ground_horizon_color = Color( 0.8, 0.8, 0.8, 1 )
sun_color = Color( 0, 0, 0, 1 )
[sub_resource type="Environment" id=6]
background_mode = 2
background_sky = SubResource( 7 )
ss_reflections_enabled = true
ambient_light_sky_contribution = 0.5
tonemap_mode = 4
ssao_enabled = true
ssao_radius = 3.86
ssao_intensity = 0.69
dof_blur_far_enabled = true
dof_blur_far_amount = 0.15
dof_blur_near_enabled = true
dof_blur_near_amount = 0.15
adjustment_contrast = 1.97
[node name="main" type="Spatial"]
[node name="Moonbase_Whitebox" parent="." instance=ExtResource( 1 )]
[node name="Level" parent="." instance=ExtResource( 1 )]
[node name="Player" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5.27448 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 4.35996 )
[node name="cameras" type="Spatial" parent="."]
script = ExtResource( 2 )
@ -78,7 +85,7 @@ current = true
script = ExtResource( 5 )
[node name="camera" type="Camera" parent="cameras/camera_room_center"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12, 0 )
transform = Transform( -1, 7.57103e-08, -4.37114e-08, 0, 0.5, 0.866025, 8.74228e-08, 0.866025, -0.5, 0, 12, 0 )
script = ExtResource( 6 )
target = NodePath("../../../Player")
@ -90,8 +97,20 @@ collision_mask = 2
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.52689, 0 )
shape = SubResource( 1 )
[node name="camera_galley" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16.3 )
[node name="camera_ore_conveyor" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 11.526, 0, -11.526 )
[node name="camera_storage" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 16.3, 0, 0 )
[node name="camera_crafting" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, -0.707107, 11.526, 0, 11.526 )
[node name="camera_room_hallway" type="Spatial" parent="cameras"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0726166, 0, 17.4284 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 16.3 )
script = ExtResource( 5 )
[node name="camera" type="Camera" parent="cameras/camera_room_hallway"]
@ -105,94 +124,84 @@ collision_mask = 2
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.52689, -1.44831 )
shape = SubResource( 4 )
[node name="camera_room0" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 15.408, 0, 0 )
[node name="camera_rover" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, -0.707107, -11.526, 0, 11.526 )
[node name="camera_room1" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, 0.707107, 10.653, 0, -10.485 )
[node name="camera_comms" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -16.3, 0, 0 )
[node name="camera_room2" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.0170336, 0, 0.999855, 0, 1, 0, -0.999855, 0, -0.0170336, -0.079, 0, -15.007 )
[node name="camera_room3" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.70219, 0, 0.711989, 0, 1, 0, -0.711989, 0, -0.70219, -10.6346, 0, -10.3156 )
[node name="camera_room4" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.999986, 0, 0.00521851, 0, 1, 0, -0.00521851, 0, -0.999986, -15.0328, 0, 0.198143 )
[node name="camera_room5" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( -0.661796, 0, -0.749684, 0, 1, 0, 0.749684, 0, -0.661796, -10.4671, 0, 10.8794 )
[node name="camera_room6" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 0.696427, 0, -0.717628, 0, 1, 0, 0.717628, 0, 0.696427, 10.8827, 0, 10.7342 )
[node name="camera_hydroponics" parent="cameras" instance=ExtResource( 4 )]
transform = Transform( 0.707106, 0, 0.707106, 0, 1, 0, -0.707106, 0, 0.707106, -11.526, 0, -11.526 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="cameras"]
anims/RESET = SubResource( 3 )
anims/switch_camera = SubResource( 2 )
anims/switch_camera = SubResource( 9 )
[node name="lights" type="Spatial" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 4.14791, 0, 6.48126 )
[node name="Hub1" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.11319, 4.20288, -1.73099 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0224032, 4.20288, 4.77208 )
shadow_enabled = true
omni_range = 10.7698
[node name="Hub2" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.059, 4.20288, -11.3228 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0765934, 4.20288, -4.81973 )
shadow_enabled = true
omni_range = 10.7698
[node name="OmniLight20" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9024, 3.329, -6.67066 )
[node name="light_galley" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.329, -16.3 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight21" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.06107, 3.329, -17.2136 )
[node name="light_ore_conveyor" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 11.526, 3.329, -11.526 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight22" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.23606, 3.329, -21.2439 )
[node name="light_storage" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 16.3, 3.329, 0 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight23" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.8527, 3.329, -16.8695 )
[node name="light_crafting" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 11.526, 3.329, 11.526 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight24" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -19.2271, 3.329, -6.05627 )
[node name="light_hallway" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.329, 16.3 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight25" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.2271, 3.329, 4.94373 )
[node name="light_rover" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.526, 3.329, 11.526 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight26" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 7.64507, 3.329, 3.88698 )
[node name="light_comms" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -16.3, 3.329, 0 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="OmniLight27" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.20031, 3.329, 9.61307 )
[node name="light_hydroponics" type="OmniLight" parent="lights"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -11.526, 3.329, -11.526 )
shadow_enabled = true
omni_range = 5.893
omni_attenuation = 2.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 6 )
script = ExtResource( 8 )
target = NodePath("../Player")
size = 4.0
[node name="game_manager" parent="." instance=ExtResource( 7 )]
@ -200,21 +209,21 @@ environment = SubResource( 6 )
[connection signal="player_exited" from="cameras/camera_room_center" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="area_entered" from="cameras/camera_room_center/hitbox" to="cameras/camera_room_center" method="_on_hitbox_area_entered"]
[connection signal="area_exited" from="cameras/camera_room_center/hitbox" to="cameras/camera_room_center" method="_on_hitbox_area_exited"]
[connection signal="player_entered" from="cameras/camera_galley" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_galley" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_ore_conveyor" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_ore_conveyor" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_storage" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_storage" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_crafting" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_crafting" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room_hallway" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room_hallway" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="area_entered" from="cameras/camera_room_hallway/hitbox" to="cameras/camera_room_hallway" method="_on_hitbox_area_entered"]
[connection signal="area_exited" from="cameras/camera_room_hallway/hitbox" to="cameras/camera_room_hallway" method="_on_hitbox_area_exited"]
[connection signal="player_entered" from="cameras/camera_room0" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room0" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room1" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room1" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room2" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room2" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room3" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room3" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room4" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room4" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room5" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room5" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_room6" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_room6" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_rover" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_rover" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_comms" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_comms" to="cameras" method="_on_camera_room_player_exited"]
[connection signal="player_entered" from="cameras/camera_hydroponics" to="cameras" method="_on_camera_room_player_entered"]
[connection signal="player_exited" from="cameras/camera_hydroponics" to="cameras" method="_on_camera_room_player_exited"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=2]
[gd_scene load_steps=8 format=2]
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=1]
[ext_resource path="res://scripts/oven/oven.gd" type="Script" id=2]
@ -7,58 +7,13 @@
[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=5]
[ext_resource path="res://item_types/repair_kit.tres" type="Resource" id=6]
[sub_resource type="SpatialMaterial" id=1]
albedo_color = Color( 0, 0, 0, 1 )
[sub_resource type="CylinderMesh" id=2]
material = SubResource( 1 )
top_radius = 0.5
bottom_radius = 0.5
height = 0.1
radial_segments = 9
[sub_resource type="BoxShape" id=4]
extents = Vector3( 0.648623, 1, 0.516904 )
[sub_resource type="CubeMesh" id=3]
size = Vector3( 1.362, 0.49, 0.081 )
[node name="oven" type="Spatial" groups=["damageable"]]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0063355, 0.00319374, -0.00456095 )
script = ExtResource( 2 )
[node name="CSGBox" type="CSGBox" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.497031, 0 )
use_collision = true
width = 1.36825
height = 1.04121
depth = 1.24388
[node name="CSGBox2" type="CSGBox" parent="CSGBox"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000755012, -0.038668, 0.154754 )
operation = 2
width = 1.20449
height = 0.784214
depth = 1.29741
[node name="coil" type="MeshInstance" parent="CSGBox"]
unique_name_in_owner = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00424552, 0.556925, -0.00761187 )
mesh = SubResource( 2 )
skeleton = NodePath("../..")
[node name="item_holder" parent="CSGBox/coil" instance=ExtResource( 1 )]
unique_name_in_owner = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00424552, 0.0865635, 0.00761187 )
[node name="CollisionShape" type="CollisionShape" parent="CSGBox/coil/item_holder"]
shape = SubResource( 4 )
[node name="backsplash" type="MeshInstance" parent="CSGBox"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00424552, 0.556925, -0.575066 )
mesh = SubResource( 3 )
skeleton = NodePath("../..")
[node name="coin_machine" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.621351, 0 )
@ -69,13 +24,20 @@ collision_mask = 0
item_type_0 = ExtResource( 6 )
item_count_0 = 1
[node name="item_holder" parent="." instance=ExtResource( 1 )]
unique_name_in_owner = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14052, 0 )
[node name="CollisionShape" type="CollisionShape" parent="item_holder"]
shape = SubResource( 4 )
[node name="status_light" parent="." instance=ExtResource( 5 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.232042, 0.967385 )
[node name="cook_timer" type="Timer" parent="."]
one_shot = true
[connection signal="item_changed" from="CSGBox/coil/item_holder" to="." method="_on_item_holder_item_changed"]
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
[connection signal="item_dump_completed" from="item_dump" to="." method="_on_item_dump_completed"]
[connection signal="item_changed" from="item_holder" to="." method="_on_item_holder_item_changed"]
[connection signal="timeout" from="cook_timer" to="." method="_on_cook_timer_timeout"]

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=27 format=2]
[gd_scene load_steps=30 format=2]
[ext_resource path="res://scripts/Player.gd" type="Script" id=1]
[ext_resource path="res://scripts/player/player.gd" type="Script" id=1]
[ext_resource path="res://assets/dungman/DungMan.tscn" type="PackedScene" id=2]
[ext_resource path="res://assets/icons/stomach.png" type="Texture" id=3]
[ext_resource path="res://assets/dungman/Dungee_MAT.material" type="Material" id=4]
@ -533,9 +533,147 @@ node_connections = [ "Activate", 0, "Blink", "Activate", 1, "Animation 2", "Blin
[sub_resource type="BoxShape" id=18]
extents = Vector3( 0.25, 0.25, 1 )
[sub_resource type="Animation" id=24]
length = 0.001
tracks/0/type = "value"
tracks/0/path = NodePath("model_transform/DungMan:translation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector3( 0, 0, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("model_transform/DungMan:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector3( 0, 0, 0 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("UI/blackout:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 0 ) ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("UI/ZZZ:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 0 ) ]
}
[sub_resource type="Animation" id=25]
resource_name = "hop_into_bed"
length = 1.2
step = 0.05
tracks/0/type = "value"
tracks/0/path = NodePath("model_transform/DungMan:translation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.15, 0.25, 0.35 ),
"transitions": PoolRealArray( 1, 1, 1, 1 ),
"update": 0,
"values": [ Vector3( 0, 0, 0 ), Vector3( 0.221, 0.971, 0.407456 ), Vector3( 0.451327, 0.829876, 1.25712 ), Vector3( 0.681653, 0.688752, 1.43758 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("model_transform/DungMan:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.35 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector3( 0, 0, 0 ), Vector3( -90, 90, 0 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("UI/blackout:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0, 0.4, 1 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 0, 0, 0, 0 ), Color( 0, 0, 0, 0 ), Color( 0, 0, 0, 1 ) ]
}
tracks/3/type = "value"
tracks/3/path = NodePath("UI/ZZZ:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0, 1.1, 1.2 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ]
}
[sub_resource type="Animation" id=26]
resource_name = "hop_out_of_bed"
tracks/0/type = "value"
tracks/0/path = NodePath("UI/blackout:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.1, 0.4 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 0, 0, 0, 1 ), Color( 0, 0, 0, 1 ), Color( 0, 0, 0, 0 ) ]
}
tracks/1/type = "transform"
tracks/1/path = NodePath("model_transform/DungMan")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = PoolRealArray( 0.4, 1, 0.681653, 0.688752, 1.43758, -0.5, 0.5, 0.5, 0.5, 1, 1, 1, 0.61, 1, 0.681653, 0.688752, 1.43758, -0.5, 0.5, -0.5, -0.5, 1, 1, 1, 0.9, 1, 0.0956602, 0.688752, 0.907396, 0.707106, 1.54543e-08, -1.54543e-08, 0.707107, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 )
tracks/2/type = "value"
tracks/2/path = NodePath("UI/ZZZ:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0, 0.1 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
}
[sub_resource type="CapsuleShape" id=19]
radius = 0.210213
height = 0.85525
radius = 0.535552
height = 0.565073
[sub_resource type="Gradient" id=20]
offsets = PoolRealArray( 0, 0.776119, 1 )
@ -550,28 +688,30 @@ axis_lock_motion_y = true
move_lock_y = true
script = ExtResource( 1 )
[node name="DungMan" parent="." instance=ExtResource( 2 )]
[node name="model_transform" type="Spatial" parent="."]
[node name="Dungee" parent="DungMan/Armature/Skeleton" index="0"]
[node name="DungMan" parent="model_transform" instance=ExtResource( 2 )]
[node name="Dungee" parent="model_transform/DungMan/Armature/Skeleton" index="0"]
mesh = SubResource( 1 )
skin = SubResource( 2 )
[node name="head_bone" type="BoneAttachment" parent="DungMan/Armature/Skeleton" index="1"]
transform = Transform( 1, -2.21202e-16, -1.47006e-17, 1.22694e-18, -0.0607882, 0.998151, -2.21687e-16, -0.998151, -0.0607882, -3.31341e-16, -0.0494913, -1.50713 )
[node name="head_bone" type="BoneAttachment" parent="model_transform/DungMan/Armature/Skeleton" index="1"]
transform = Transform( 1, -2.21502e-16, 1.62129e-17, -2.37146e-19, 0.0719347, 0.997409, -2.22095e-16, -0.997409, 0.0719347, -3.31708e-16, -0.0484204, -1.49945 )
bone_name = "Item"
[node name="ItemSpawn" type="Spatial" parent="DungMan/Armature/Skeleton/head_bone"]
[node name="ItemSpawn" type="Spatial" parent="model_transform/DungMan/Armature/Skeleton/head_bone"]
unique_name_in_owner = true
transform = Transform( 1, 1.48483e-18, -3.14288e-18, -1.61955e-18, 0.999062, -0.0432985, 3.07563e-18, 0.0432985, 0.999062, 0, 0, 0.107 )
[node name="AnimationPlayer" parent="DungMan" index="1"]
[node name="AnimationPlayer" parent="model_transform/DungMan" index="1"]
anims/Blink = SubResource( 3 )
anims/Dungee = SubResource( 4 )
anims/Idle-loop = SubResource( 5 )
anims/Reset = SubResource( 6 )
anims/Run-loop = SubResource( 7 )
[node name="AnimationTree" type="AnimationTree" parent="DungMan"]
[node name="AnimationTree" type="AnimationTree" parent="model_transform/DungMan"]
tree_root = SubResource( 9 )
anim_player = NodePath("../AnimationPlayer")
active = true
@ -579,21 +719,28 @@ parameters/Activate/active = false
parameters/Blink/active = false
parameters/Move/playback = SubResource( 17 )
[node name="TriggerVolume" type="Area" parent="DungMan"]
[node name="TriggerVolume" type="Area" parent="model_transform/DungMan"]
unique_name_in_owner = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.630386 )
collision_layer = 4
collision_mask = 8
[node name="CollisionShape" type="CollisionShape" parent="DungMan/TriggerVolume"]
[node name="CollisionShape" type="CollisionShape" parent="model_transform/DungMan/TriggerVolume"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.778807, 0.291356 )
shape = SubResource( 18 )
[node name="blink_timer" type="Timer" parent="DungMan"]
[node name="blink_timer" type="Timer" parent="model_transform/DungMan"]
unique_name_in_owner = true
autostart = true
[node name="node_animations" type="AnimationPlayer" parent="model_transform"]
root_node = NodePath("../..")
anims/RESET = SubResource( 24 )
anims/hop_into_bed = SubResource( 25 )
anims/hop_out_of_bed = SubResource( 26 )
[node name="CollisionShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.641703, 0 )
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.827727, 0.0411353 )
shape = SubResource( 19 )
[node name="hitbox" type="Area" parent="."]
@ -601,9 +748,11 @@ collision_layer = 2
collision_mask = 16
[node name="CollisionShape" type="CollisionShape" parent="hitbox"]
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.824963, 0.0301657 )
shape = SubResource( 19 )
[node name="UI" type="CanvasLayer" parent="."]
pause_mode = 2
[node name="Control" type="Control" parent="UI"]
margin_right = 40.0
@ -651,10 +800,33 @@ margin_right = 524.0
margin_bottom = 128.0
texture = ExtResource( 3 )
[node name="blackout" type="ColorRect" parent="UI"]
modulate = Color( 1, 1, 1, 0 )
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 1 )
[node name="ZZZ" type="Label" parent="UI"]
modulate = Color( 1, 1, 1, 0 )
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -90.0
margin_top = -20.0
margin_right = 90.0
margin_bottom = 20.0
custom_colors/font_color = Color( 1, 1, 1, 1 )
text = "ZZZZZZZZZZZZZ
Press the action input to continue..."
align = 1
valign = 1
[node name="hunger_timer" type="Timer" parent="."]
unique_name_in_owner = true
[connection signal="timeout" from="DungMan/blink_timer" to="." method="_on_blink_timer_timeout"]
[connection signal="timeout" from="model_transform/DungMan/blink_timer" to="." method="_on_blink_timer_timeout"]
[connection signal="timeout" from="hunger_timer" to="." method="_on_hunger_timer_timeout"]
[editable path="DungMan"]
[editable path="model_transform/DungMan"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=6 format=2]
[gd_scene load_steps=5 format=2]
[ext_resource path="res://scripts/power_station.gd" type="Script" id=1]
[ext_resource path="res://assets/sound/forceField_004.ogg" type="AudioStream" id=3]
@ -6,8 +6,6 @@
[sub_resource type="BoxShape" id=2]
[sub_resource type="CubeMesh" id=1]
[node name="power_station" type="Area"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
collision_layer = 8
@ -19,9 +17,6 @@ time_to_generate = 1.0
transform = Transform( 1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, 0, 0, 0 )
shape = SubResource( 2 )
[node name="MeshInstance" type="MeshInstance" parent="."]
mesh = SubResource( 1 )
[node name="CointCount" type="Label3D" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0275149, 0.721019, 1.58046 )
billboard = 1

5
scripts/bed.gd Normal file
View File

@ -0,0 +1,5 @@
extends Area
func on_player_interact(player: Spatial) -> bool:
player.sleep(true, $hop_position)
return true

View File

@ -31,9 +31,15 @@ func _on_clear_pressed():
if player.has_item():
player.drop_item_in_hand()
func _on_random_damage_pressed():
var damageable = get_tree().get_nodes_in_group("damageable")
if damageable.empty():
return
damageable[randi() % damageable.size()].take_damage()
func _on_timer_2_s_pressed():
var game_manager = get_tree().get_nodes_in_group("game_manager")[0]
var day_timer = game_manager.get_node("day_timer")
day_timer.start(2.0)
day_timer.wait_time = game_manager.time_per_day

14
scripts/dof_focus.gd Normal file
View File

@ -0,0 +1,14 @@
extends WorldEnvironment
export var target: NodePath
export var size: float = 1.0
onready var target_node: Spatial = get_node(target)
func _ready():
environment.dof_blur_far_enabled = true
environment.dof_blur_near_enabled = true
func _process(delta):
var dist := get_viewport().get_camera().global_transform.origin.distance_to(target_node.global_transform.origin)
environment.dof_blur_near_distance = dist - size / 2.0
environment.dof_blur_far_distance = dist + size / 2.0

View File

@ -26,15 +26,8 @@ func _on_player_starved_to_death():
get_tree().paused = false
get_tree().quit() # go back to main menu when such a thing exists
func _on_day_timer_timeout():
player.health -= 1
if player.health <= 0:
_on_player_starved_to_death()
return
var node = Dialogic.start("day_end")
node.pause_mode = PAUSE_MODE_PROCESS
add_child(node)
get_tree().paused = true
yield(node, "timeline_end")
get_tree().paused = false
func reset_day_timer():
day_timer.start()
func _on_day_timer_timeout():
player.sleep(false, null)

View File

@ -16,12 +16,11 @@ func enter_from(state):
ctx.get_node("%item_holder").remove_enabled = false
ctx.get_node("cook_timer").start()
ctx.get_node("%coil").set_surface_material(0, mat)
ctx.get_node("status_light").light_color = Color.green
ctx.get_node("status_light").activate()
func exit_to(state):
ctx.get_node("%coil").set_surface_material(0, null)
pass
func on_coin_machine_coin_requirement_met(player):
assert(false, "coin machine should be disabled while growing")

View File

@ -2,7 +2,10 @@ extends KinematicBody
signal starved_to_death
const EPSILON = 0.0001
const StateDefault = preload("res://scripts/player/state/default.gd")
const StateInteracting = preload("res://scripts/player/state/interacting.gd")
const StateSleeping = preload("res://scripts/player/state/sleeping.gd")
const SPEED = 10.0
const MAX_HEALTH = 4
@ -13,27 +16,31 @@ var health: int = 4 setget set_health
var item_in_hand
var move_enabled: bool = true
onready var move_playback = $DungMan/AnimationTree["parameters/Move/playback"]
onready var anim_tree = $model_transform/DungMan/AnimationTree
onready var move_playback = anim_tree["parameters/Move/playback"]
onready var hunger_timer = $"%hunger_timer"
# Called when the node enters the scene tree for the first time.
var state = null
func _ready():
$hitbox.set_meta("owner", self)
move_playback.travel("idle")
hunger_timer.wait_time = hunger_tick_time
hunger_timer.start()
state = StateDefault.new()
state.ctx = self
state.enter_from(null)
print("player: NULL -> ", state.NAME)
func change_state(new_state):
print("player: ", state.NAME, " -> ", new_state.NAME)
new_state.ctx = self
state.exit_to(new_state)
new_state.enter_from(state)
state = new_state
func _physics_process(delta):
if not move_enabled:
return
var input = Vector3(Input.get_axis("left", "right"), 0.0, Input.get_axis("up", "down"))
var motion = Plane.PLANE_XZ.project(get_viewport().get_camera().global_transform.basis.xform(input)).normalized() * SPEED
if motion.length_squared() > EPSILON:
$DungMan.look_at(global_transform.origin - motion, Vector3.UP)
move_playback.travel("run")
else:
move_playback.travel("idle")
move_and_slide(motion)
state.physics_process(delta)
func _on_hunger_timer_timeout():
set_health(health - 1)
@ -81,32 +88,8 @@ func modify_inventory(item_name, item_amount):
return true
func _unhandled_input(event):
if event.is_action_pressed("action"):
$DungMan/AnimationTree["parameters/Activate/active"] = true
move_enabled = false
yield(get_tree().create_timer(0.2), "timeout")
for area in $"%TriggerVolume".get_overlapping_areas():
if try_trigger_interact(area):
break
move_enabled = true
state.unhandled_input(event)
func try_trigger_interact(area):
var owner = area
if area.has_meta("owner"):
owner = area.get_meta("owner")
if not owner.has_method("on_player_interact"):
return false
var result = owner.on_player_interact(self)
if not result:
print("player failed to interacted with ", owner)
return
print("player interacted with ", owner)
return true
func drop_item_in_hand():
print("player dropped ", item_in_hand.item_name)
var item_dropped = item_in_hand
@ -132,7 +115,10 @@ func get_item_in_hand():
item_to_return = drop_item_in_hand()
return item_to_return
func _on_blink_timer_timeout():
$DungMan/AnimationTree["parameters/Blink/active"] = true
$DungMan/blink_timer.wait_time = rand_range(0.5, 3.0)
anim_tree["parameters/Blink/active"] = true
$"%blink_timer".wait_time = rand_range(0.5, 3.0)
func sleep(made_it_to_bed: bool, hop_position: Spatial):
state.on_sleep(made_it_to_bed, hop_position)

View File

@ -0,0 +1,36 @@
extends Reference
const NAME = "default"
const EPSILON = 0.0001
var ctx = null
var anim_tree: AnimationTree
var move_playback
func _init():
pass
func enter_from(state):
anim_tree = ctx.get_node("model_transform/DungMan/AnimationTree")
move_playback = anim_tree["parameters/Move/playback"]
func exit_to(state):
pass
func physics_process(delta):
var input = Vector3(Input.get_axis("left", "right"), 0.0, Input.get_axis("up", "down"))
var motion = Plane.PLANE_XZ.project(ctx.get_viewport().get_camera().global_transform.basis.xform(input)).normalized() * ctx.SPEED
if motion.length_squared() > EPSILON:
ctx.get_node("model_transform").look_at(ctx.global_transform.origin - motion, Vector3.UP)
ctx.move_playback.travel("run")
else:
ctx.move_playback.travel("idle")
ctx.move_and_slide(motion)
func unhandled_input(event):
if event.is_action_pressed("action"):
ctx.get_tree().set_input_as_handled()
ctx.change_state(ctx.StateInteracting.new())
func on_sleep(made_it_to_bed: bool, hop_position: Spatial):
ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position))

View File

@ -0,0 +1,54 @@
extends Reference
const NAME = "interacting"
var ctx: KinematicBody = null
var anim_tree: AnimationTree
var timer: SceneTreeTimer
func _init():
pass
func enter_from(state):
anim_tree = ctx.get_node("model_transform/DungMan/AnimationTree")
anim_tree["parameters/Move/playback"].travel("idle")
anim_tree["parameters/Activate/active"] = true
timer = ctx.get_tree().create_timer(0.2)
timer.connect("timeout", self, "_on_timeout", [], CONNECT_ONESHOT)
func exit_to(state):
pass
func physics_process(delta):
pass
func unhandled_input(event):
pass
func _on_timeout():
for area in ctx.get_node("%TriggerVolume").get_overlapping_areas():
if try_trigger_interact(area):
break
if ctx.state == self:
ctx.change_state(ctx.StateDefault.new())
func try_trigger_interact(area) -> bool:
var owner = area
if area.has_meta("owner"):
owner = area.get_meta("owner")
if not owner.has_method("on_player_interact"):
return false
var result = owner.on_player_interact(ctx)
if not result:
print("player failed to interacted with ", owner)
return false
print("player interacted with ", owner)
return true
func on_sleep(made_it_to_bed: bool, hop_position: Spatial):
timer.disconnect("timeout", self, "_on_timeout")
ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position))

View File

@ -0,0 +1,99 @@
extends Reference
const NAME = "sleeping"
var ctx: KinematicBody = null
var hop_position: Spatial
var made_it_to_bed: bool
var model_transform: Spatial
var anim_player: AnimationPlayer
var old_model_origin: Vector3
var waiting := false
func _init(p_made_it_to_bed: bool, p_hop_position: Spatial = null):
hop_position = p_hop_position
made_it_to_bed = p_made_it_to_bed
func enter_from(state):
hop_position = hop_position if hop_position else ctx.get_tree().get_nodes_in_group("bed_hop_position")[0]
model_transform = ctx.get_node("model_transform")
anim_player = ctx.get_node("model_transform/node_animations")
# Pause everything but the player
ctx.get_tree().paused = true
ctx.get_node("hunger_timer").pause_mode = ctx.PAUSE_MODE_STOP
ctx.pause_mode = ctx.PAUSE_MODE_PROCESS
# Drop any carried item
if ctx.has_item():
ctx.drop_item_in_hand()
# Prepare to play animation
if made_it_to_bed:
# Slide the player to the front of the bed
old_model_origin = model_transform.global_transform.origin
var tween = model_transform.create_tween()
tween.tween_property(model_transform, "global_transform:origin", hop_position.global_transform.origin, .1)
yield(tween, "finished")
# Warp the player to the right position & orientation
model_transform.global_transform = hop_position.global_transform
else:
# Harm the player and show message
ctx.set_health(ctx.health - 1)
var node = Dialogic.start("day_end")
node.pause_mode = ctx.PAUSE_MODE_PROCESS
ctx.add_child(node)
yield(node, "timeline_end")
# Warp the player to the right position & orientation
ctx.global_transform.origin = hop_position.global_transform.origin
model_transform.global_transform = hop_position.global_transform
old_model_origin = model_transform.global_transform.origin
# Play hop animation
ctx.get_node("model_transform/DungMan/AnimationTree")["parameters/Move/playback"].travel("idle")
anim_player.call_deferred("play", "hop_into_bed")
yield(anim_player, "animation_finished")
waiting = true
# Reset the day timer
for game_manager in ctx.get_tree().get_nodes_in_group("game_manager"):
game_manager.reset_day_timer()
func exit_to(state):
ctx.pause_mode = ctx.PAUSE_MODE_INHERIT
ctx.get_node("hunger_timer").pause_mode = ctx.PAUSE_MODE_INHERIT
ctx.get_tree().paused = false
func physics_process(delta):
pass
func unhandled_input(event: InputEvent):
if not waiting:
return
if not event.is_action_pressed("action"):
return
ctx.get_tree().set_input_as_handled()
# Play hop out animation
anim_player.call_deferred("play", "hop_out_of_bed")
yield(anim_player, "animation_finished")
# Slide the player back to the front of the bed
var tween = model_transform.create_tween()
tween.tween_property(model_transform, "global_transform:origin", old_model_origin, .1)
yield(tween, "finished")
# Show message
var node = Dialogic.start("wake_up")
node.pause_mode = ctx.PAUSE_MODE_PROCESS
ctx.add_child(node)
yield(node, "timeline_end")
ctx.change_state(ctx.StateDefault.new())
func on_sleep(made_it_to_bed: bool, hop_position: Spatial):
assert(false, "shouldn't be able to sleep while sleeping")