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:
2025-04-06 18:07:29 -03:00
parent 909c385dee
commit db55b2af02
21 changed files with 202 additions and 70 deletions

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

@@ -1,12 +1,13 @@
extends Node
class_name GameScreen
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):
if (scenePath != null):
var progress = []
var loaderStatus = ResourceLoader.load_threaded_get_status(scenePath, progress)
# 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 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