Browse Source

Getting loading working, moving player to spawn, and adding signal clearing the world

pull/7/head
Ryan Reed 1 month ago
parent
commit
b7a1f2168d
9 changed files with 66 additions and 14 deletions
  1. +2
    -0
      autoloads/entity_manager.gd
  2. +11
    -0
      project.godot
  3. +12
    -4
      save_load/autoloads/save_game_manager.gd
  4. +1
    -4
      save_load/resources/node_types/block_data_resource.gd
  5. +1
    -1
      save_load/resources/node_types/player_data_resource.gd
  6. +6
    -1
      scenes/blocks/block.tscn
  7. +6
    -1
      scenes/player/player.tscn
  8. +22
    -0
      scenes/world/world.gd
  9. +5
    -3
      scenes/world/world.tscn

+ 2
- 0
autoloads/entity_manager.gd View File

@ -2,3 +2,5 @@ extends Node
signal create_block(id: String, position: Vector3)
signal drop_block(id: String, position: Vector3)
signal clear_blocks ## Used for signaling a deletion of all in the BlocksContainer and DroppedItemsContainer
signal spawn_player(position: Vector3)

+ 11
- 0
project.godot View File

@ -21,6 +21,7 @@ Globals="*res://autoloads/globals.gd"
EntityManager="*res://autoloads/entity_manager.gd"
InventoryManager="*res://autoloads/inventory_manager.gd"
DBItems="*res://autoloads/db_items.gd"
SaveGameManager="*res://save_load/autoloads/save_game_manager.gd"
[debug]
@ -139,6 +140,16 @@ open_inventory={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null)
]
}
quick_load={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194337,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
quick_save={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194336,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[layer_names]


+ 12
- 4
save_load/autoloads/save_game_manager.gd View File

@ -7,14 +7,18 @@
extends Node
signal game_saved
signal game_loaded
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("quick_save"):
save_game()
_save_game()
if event.is_action_pressed("quick_load"):
load_game()
_load_game()
func save_game() -> void:
func _save_game() -> void:
var save_level_data_component: SaveLevelDataComponent = get_tree().get_first_node_in_group("save_level_data_component")
if save_level_data_component == null:
@ -22,11 +26,15 @@ func save_game() -> void:
return
save_level_data_component.save_game()
game_saved.emit()
func _load_game() -> void:
EntityManager.clear_blocks.emit()
func load_game() -> void:
var save_level_data_component: SaveLevelDataComponent = get_tree().get_first_node_in_group("save_level_data_component")
if save_level_data_component == null: # Nothing to load
return
save_level_data_component.load_game()
game_loaded.emit()

+ 1
- 4
save_load/resources/node_types/block_data_resource.gd View File

@ -17,7 +17,4 @@ func _load_data(window: Window) -> void:
if scene_node == null: return
var block: Block = scene_node
block.transform = transform
block.set_id(block_id)
print("Loaded Block: ", block.name)
EntityManager.create_block.emit(block_id, transform.origin)

+ 1
- 1
save_load/resources/node_types/player_data_resource.gd View File

@ -13,4 +13,4 @@ func _load_data(window: Window) -> void:
if scene_node == null: return
#var player: Player = scene_node
EntityManager.spawn_player.emit(transform.origin)

+ 6
- 1
scenes/blocks/block.tscn View File

@ -1,8 +1,10 @@
[gd_scene load_steps=8 format=3 uid="uid://b8evbp40gnomt"]
[gd_scene load_steps=10 format=3 uid="uid://b8evbp40gnomt"]
[ext_resource type="Script" uid="uid://buvqmrrtmxs2h" path="res://scenes/blocks/block.gd" id="1_7fut1"]
[ext_resource type="Material" uid="uid://bgc6efqf8aiqo" path="res://assets/materials/block_highlight.tres" id="2_524ei"]
[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="3_qi7hx"]
[ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://save_load/components/save_data_component.tscn" id="4_60een"]
[ext_resource type="Resource" uid="uid://dfos8np8agysk" path="res://save_load/resources/node_types/block_data_resource.tres" id="5_60een"]
[sub_resource type="BoxShape3D" id="BoxShape3D_n5naa"]
@ -29,3 +31,6 @@ mesh = SubResource("BoxMesh_7fut1")
[node name="BlockMesh" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_e15ke")
surface_material_override/0 = SubResource("StandardMaterial3D_4e127")
[node name="SaveDataComponent" parent="." instance=ExtResource("4_60een")]
save_data_resource = ExtResource("5_60een")

+ 6
- 1
scenes/player/player.tscn View File

@ -1,7 +1,9 @@
[gd_scene load_steps=5 format=3 uid="uid://beu1b4leqwgh3"]
[gd_scene load_steps=7 format=3 uid="uid://beu1b4leqwgh3"]
[ext_resource type="Script" uid="uid://daly0bs0oat3j" path="res://scenes/player/player.gd" id="1_7sql3"]
[ext_resource type="Script" uid="uid://bruuttf8j7wet" path="res://scenes/player/ray_cast_look.gd" id="2_dovo2"]
[ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://save_load/components/save_data_component.tscn" id="3_lvxji"]
[ext_resource type="Resource" uid="uid://bvsurbn5xgchr" path="res://save_load/resources/node_types/player_data_resource.tres" id="4_p47bc"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_tv3cd"]
radius = 0.47
@ -39,3 +41,6 @@ script = ExtResource("2_dovo2")
[node name="RayCastCrouch" type="RayCast3D" parent="."]
editor_description = "Y should be just slightly higher than the height of the standing collision shape"
target_position = Vector3(0, 1.96, 0)
[node name="SaveDataComponent" parent="." instance=ExtResource("3_lvxji")]
save_data_resource = ExtResource("4_p47bc")

+ 22
- 0
scenes/world/world.gd View File

@ -2,17 +2,24 @@ class_name World
extends Node3D
@export var default_spawn_position: Vector3 = Vector3.ZERO
@export_group("Nodes and Scenes")
@export var blocks_container: Node3D
@export var dropped_items_container: Node3D
@export var player: PackedScene
func _ready() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
EntityManager.create_block.connect(_create_block.bind())
EntityManager.drop_block.connect(_create_dropped_block.bind())
EntityManager.clear_blocks.connect(_on_clear_blocks.bind())
EntityManager.spawn_player.connect(_spawn_player.bind())
_initialize_ground()
_create_test_blocks()
_spawn_player(default_spawn_position)
func _create_block(id: String, block_position: Vector3) -> void:
@ -35,6 +42,13 @@ func _create_test_blocks() -> void:
_create_block("00" + str(index), Vector3(index, 3, -5))
_create_dropped_block("00" + str(index), Vector3(index, 2, -3))
func _spawn_player(player_position: Vector3) -> void:
if has_node("Player"):
$Player.queue_free()
var _player: Player = player.instantiate()
_player.position = player_position
add_child(_player)
func _initialize_ground() -> void:
for x: int in range(-10, 11):
@ -47,3 +61,11 @@ func _initialize_ground() -> void:
EntityManager.create_block.emit("001", ground_position)
else:
EntityManager.create_block.emit("002", ground_position)
## Generally for resetting/emptying the world to allow for load_game
func _on_clear_blocks() -> void:
for block: Block in blocks_container.get_children():
block.queue_free()
for block: DroppedBlock in dropped_items_container.get_children():
block.queue_free()

+ 5
- 3
scenes/world/world.tscn View File

@ -1,7 +1,8 @@
[gd_scene load_steps=6 format=3 uid="uid://mkfitwqnerku"]
[gd_scene load_steps=7 format=3 uid="uid://mkfitwqnerku"]
[ext_resource type="Script" uid="uid://c0jbvki2cylct" path="res://scenes/world/world.gd" id="1_6m72w"]
[ext_resource type="PackedScene" uid="uid://beu1b4leqwgh3" path="res://scenes/player/player.tscn" id="2_sl2e5"]
[ext_resource type="PackedScene" uid="uid://c3pqilb6yh5kc" path="res://save_load/components/save_level_data_component.tscn" id="3_1fp7r"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_4rhad"]
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
@ -20,6 +21,7 @@ glow_enabled = true
script = ExtResource("1_6m72w")
blocks_container = NodePath("BlocksContainer")
dropped_items_container = NodePath("DroppedItemsContainer")
player = ExtResource("2_sl2e5")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_sl2e5")
@ -28,8 +30,8 @@ environment = SubResource("Environment_sl2e5")
transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75, -0.433013, 0, 0, 0)
shadow_enabled = true
[node name="Player" parent="." instance=ExtResource("2_sl2e5")]
[node name="BlocksContainer" type="Node3D" parent="."]
[node name="DroppedItemsContainer" type="Node3D" parent="."]
[node name="SaveLevelDataComponent" parent="." instance=ExtResource("3_1fp7r")]

Loading…
Cancel
Save