End of chapter 6. A lot of problems took to much time to solve. It was good to know better Godot internal mechanism.

This commit is contained in:
Penelope 2025-04-06 18:07:29 -03:00
parent 909c385dee
commit db55b2af02
21 changed files with 202 additions and 70 deletions

View File

@ -1,9 +1,10 @@
[gd_scene load_steps=5 format=3 uid="uid://c0b5w48jk67qd"]
[gd_scene load_steps=6 format=3 uid="uid://c0b5w48jk67qd"]
[ext_resource type="Script" uid="uid://c0uvlwmkm3r8o" path="res://scripts/game/game_screen.gd" id="1_uwrxv"]
[ext_resource type="Script" uid="uid://dcqqr8b42tn0x" path="res://scripts/game/CommandProcessor.gd" id="2_lbhrr"]
[ext_resource type="Texture2D" uid="uid://ccxs3ctob15es" path="res://gfx/ui/main_frame.png" id="2_lnu2h"]
[ext_resource type="FontFile" uid="uid://1u28cjgctsn7" path="res://fonts/alagard_by_pix3m-d6awiwp.ttf" id="3_lbhrr"]
[ext_resource type="Script" uid="uid://dv3fd112uj8o1" path="res://scripts/ui/Message Console.gd" id="5_iywne"]
[node name="Game" type="Node" node_paths=PackedStringArray("map")]
script = ExtResource("1_uwrxv")
@ -24,7 +25,7 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect" type="TextureRect" parent="UI"]
[node name="Background Frame" type="TextureRect" parent="UI"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -33,20 +34,50 @@ grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_lnu2h")
[node name="Left Panel" type="VBoxContainer" parent="UI"]
[node name="Left Display" type="MarginContainer" parent="UI"]
layout_mode = 0
offset_left = 13.0
offset_top = 15.0
offset_right = 166.0
offset_right = 167.0
offset_bottom = 216.0
[node name="Command Menu" type="VBoxContainer" parent="UI/Left Panel"]
[node name="Background" type="ColorRect" parent="UI/Left Display"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="Contents" type="VBoxContainer" parent="UI/Left Display"]
layout_mode = 2
[node name="Pass Button" type="Button" parent="UI/Left Panel/Command Menu"]
[node name="Command Menu" type="VBoxContainer" parent="UI/Left Display/Contents"]
layout_mode = 2
[node name="Pass Button" type="Button" parent="UI/Left Display/Contents/Command Menu"]
layout_mode = 2
theme_override_fonts/font = ExtResource("3_lbhrr")
text = "Pass"
[node name="Message Console" type="MarginContainer" parent="UI" node_paths=PackedStringArray("scrollContainer", "messages")]
layout_mode = 0
offset_left = 13.0
offset_top = 231.0
offset_right = 627.0
offset_bottom = 345.0
script = ExtResource("5_iywne")
scrollContainer = NodePath("ScrollContainer")
messages = NodePath("ScrollContainer/Messages")
[node name="Background" type="ColorRect" parent="UI/Message Console"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="ScrollContainer" type="ScrollContainer" parent="UI/Message Console"]
layout_mode = 2
horizontal_scroll_mode = 0
[node name="Messages" type="VBoxContainer" parent="UI/Message Console/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
[connection signal="BROADCAST_COMMAND" from="Command Processor" to="UI/Message Console" method="_on_command"]
[connection signal="timeout" from="Command Processor" to="Command Processor" method="_on_timeout"]
[connection signal="pressed" from="UI/Left Panel/Command Menu/Pass Button" to="." method="_on_pass_button_pressed"]
[connection signal="pressed" from="UI/Left Display/Contents/Command Menu/Pass Button" to="." method="_on_pass_button_pressed"]

View File

@ -0,0 +1,11 @@
[gd_scene load_steps=2 format=3 uid="uid://wbh5uji0cktb"]
[ext_resource type="Theme" uid="uid://dnxny0n7ti7eq" path="res://themes/default_theme.tres" id="1_re2k6"]
[node name="MessageLine" type="RichTextLabel"]
theme = ExtResource("1_re2k6")
text = "Enter Command:
"
fit_content = true
scroll_active = false

View File

@ -1,6 +1,5 @@
extends Timer
class_name CommandProcessor
signal BROADCAST_COMMAND(label)
var resumeWaiting:bool = true
@ -16,17 +15,15 @@ func processCommand(command:Command):
return
stop()
command.COMMAND_PROCESSED.connect(onCommandProcessed)
BROADCAST_COMMAND.emit(command.getCommandText())
emit_signal("BROADCAST_COMMAND", command.getCommandText())
command.execute()
func waitForCommand():
resumeWaiting = true
start()
CommandDispatcher.DISPLAY_COMMAND_PROMPT.emit()
func pauseProcessor():

View File

@ -1,7 +1,8 @@
extends Node
var defaultMapPath: String = "res://scenes/game/maps/world_map.tscn"
var currentMapPath: String = ""
var defaultMapPath:String = "res://scenes/game/maps/world_map.tscn"
var currentMapPath
func startNewGame():
currentMapPath = defaultMapPath

View File

@ -4,7 +4,6 @@ signal COMMAND_PROCESSED(label)
var commandLabel
func execute():
COMMAND_PROCESSED.emit(commandLabel)

View File

@ -3,3 +3,9 @@ extends Node
signal PROCESS_COMMAND(command)
signal WAIT_FOR_COMMAND
signal PAUSE_PROCESSOR
signal PLAYER_MOVE(direction)
signal DISPLAY_MESSAGE(message)
signal DISPLAY_COMMAND_PROMPT
signal DISPLAY_CLEAR

View File

@ -0,0 +1,22 @@
extends Command
class_name MoveCommand
var direction
func _init(dir):
commandLabel = "Move"
direction = dir
func execute():
CommandDispatcher.PLAYER_MOVE.emit(direction)
emit_signal("COMMAND_PROCESSED", getCommandText())
func getDirectionString() -> String:
return Map.Direction.keys()[direction]
func getCommandText():
return "%s %s" % [commandLabel, getDirectionString()]

View File

@ -0,0 +1 @@
uid://c136g73lrccts

View File

@ -2,9 +2,10 @@ extends Command
class_name PassCommand
func _init() -> void:
func _init():
commandLabel = "Pass"
func execute():
print("Player passed.")
COMMAND_PROCESSED.emit(commandLabel)

View File

@ -2,11 +2,12 @@ extends Node
class_name GameScreen
@export var map: Node
@export var map:Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
func _ready():
map.add_child(load(GameManager.currentMapPath).instantiate())
CommandDispatcher.WAIT_FOR_COMMAND.emit()
func _on_pass_button_pressed() -> void:
func _on_pass_button_pressed():
CommandDispatcher.PROCESS_COMMAND.emit(PassCommand.new())

5
scripts/game/maps/map.gd Normal file
View File

@ -0,0 +1,5 @@
extends TileMap
class_name Map
enum Direction { North, East, South, West }

View File

@ -0,0 +1 @@
uid://dg5n82oyi536p

View File

@ -1,27 +1,26 @@
extends TileMap
extends Map
class_name Map2d
enum TerrainDataTypes { TerrainType }
func getTerrainDataForTile(layer, data, x, y):
var tile: TileData = get_cell_tile_data(layer, Vector2i(x, y))
if tile != null:
var tile:TileData = get_cell_tile_data(layer, Vector2i(x, y))
if (tile != null):
return tile.get_custom_data(TerrainDataTypes.keys()[data])
else:
return null
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 39, 17))
print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 0, 0))
print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 11, 11))
print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 6, 9))
print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 22, 22))
#func _ready() -> void:
# print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 39, 17))
# print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 0, 0))
# print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 11, 11))
# print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 6, 9))
# print(getTerrainDataForTile(0, TerrainDataTypes.TerrainType, 22, 22))
#
#
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
#func _process(delta: float) -> void:
# pass

View File

@ -1,6 +1,4 @@
extends Map2d
func _ready() -> void:
super._ready()
#func _ready() -> void:
# super._ready()

View File

@ -1,36 +1,32 @@
extends Node
signal LOADING_PROGRESS_UPDATED
@export var loadingScene: Node = preload("res://scenes/ui/loading_screen.tscn").instantiate()
signal LOADING_PROGRESS_UPDATED(percentage)
var scenePath: String
@export var loadingScene = preload("res://scenes/ui/loading_screen.tscn").instantiate()
func loadScene(caller: Node, path: String):
var scenePath
func loadScene(caller, path):
scenePath = path
get_tree().root.add_child(loadingScene)
ResourceLoader.load_threaded_request(scenePath)
#print(scenePath)
caller.queue_free()
func _process(delta):
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
if scenePath:
var progress: Array = []
var loaderStatus: ResourceLoader.ThreadLoadStatus = ResourceLoader.load_threaded_get_status(scenePath, progress)
if (scenePath != null):
var progress = []
var loaderStatus = ResourceLoader.load_threaded_get_status(scenePath, progress)
if loaderStatus == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_LOADED:
LOADING_PROGRESS_UPDATED.emit(progress[0])
if (loaderStatus == ResourceLoader.THREAD_LOAD_LOADED):
var loadedScene = ResourceLoader.load_threaded_get(scenePath).instantiate()
get_tree().root.remove_child(loadingScene)
get_tree().root.add_child(loadedScene)
scenePath = ""
elif loaderStatus == ResourceLoader.ThreadLoadStatus.THREAD_LOAD_IN_PROGRESS:
LOADING_PROGRESS_UPDATED.emit(progress[0])
else:
pass
scenePath = null

View File

@ -1,7 +1,7 @@
extends Control
func _on_new_game_button_pressed() -> void:
func _on_new_game_button_pressed():
GameManager.startNewGame()
Loader.loadScene(self, "res://scenes/game.tscn")

View File

@ -1,6 +1,4 @@
extends Label
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
func _ready():
text += ProjectSettings.get_setting("application/config/version")

View File

@ -0,0 +1,63 @@
extends MarginContainer
@export var scrollContainer:ScrollContainer
@export var messages:VBoxContainer
@export var messageHistory := 10
var messageLinePrefab = preload("res://scenes/ui/MessageLine.tscn")
func _ready():
CommandDispatcher.DISPLAY_MESSAGE.connect(_onMessageReceived)
CommandDispatcher.DISPLAY_COMMAND_PROMPT.connect(displayCommandPrompt)
CommandDispatcher.DISPLAY_CLEAR.connect(clearWindow)
func _on_command(text):
displayCommand(text)
func _onMessageReceived(message):
displayMessage(message)
func displayCommandPrompt():
messages.add_child(messageLinePrefab.instantiate())
func clearWindow():
for item in messages.get_children():
messages.remove_child(item)
item.queue_free()
func scrollToEnd():
await scrollContainer.get_v_scroll_bar().changed
if (messages.get_child_count() > messageHistory):
messages.get_child(0).queue_free()
scrollContainer.scroll_vertical = scrollContainer.get_v_scroll_bar().max_value
func displayMessage(message):
var messageLine = messageLinePrefab.instantiate()
messageLine.text = "%s\n" % message
messages.add_child(messageLine)
scrollToEnd()
func displayCommand(message):
var currentMessageLine:RichTextLabel
if (messages.get_child_count() == 0):
displayCommandPrompt()
currentMessageLine = messages.get_children()[messages.get_children().size() - 1]
currentMessageLine.text = currentMessageLine.text.insert(currentMessageLine.text.length() - 2, message)
scrollToEnd()

View File

@ -0,0 +1 @@
uid://dv3fd112uj8o1

View File

@ -1,11 +1,11 @@
extends Control
@export var loadingBar: TextureProgressBar
@export var loadingBar:TextureProgressBar
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
func _ready():
Loader.LOADING_PROGRESS_UPDATED.connect(_on_progress_updated)
func _on_progress_updated(percentage: float) -> void:
loadingBar.value = percentage
func _on_progress_updated(percentage):
loadingBar.value = percentage * 100

View File

@ -40,3 +40,4 @@ Button/styles/hover = SubResource("StyleBoxTexture_r3xux")
Button/styles/normal = SubResource("StyleBoxTexture_oxkhk")
Button/styles/pressed = SubResource("StyleBoxTexture_pvobe")
Label/fonts/font = ExtResource("1_lkf7m")
RichTextLabel/fonts/normal_font = ExtResource("1_lkf7m")