Startmenü, fremde Figuren und Statuszeile
Das Startmenü fragt nach dem Namen und bietet allein spielen, die Welt öffnen oder beitreten. Die Figuren der anderen Spieler gleiten zu ihrer neuesten Position und tragen ihren Namen. Die Anzeige füllt Werte in Meldungen ein und hat eine Statuszeile. Die Texte für Menü und Netzwerk gibt es auf Deutsch und Englisch. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
extends TestCase
|
||||
|
||||
|
||||
func test_a_figure_appears_where_it_is_first_placed() -> void:
|
||||
var figures := Figures.new()
|
||||
check_eq(figures.shown_at(2), Vector2.INF, "nobody is shown at first")
|
||||
figures.place(2, Vector2(10.0, 20.0))
|
||||
check_eq(figures.shown_at(2), Vector2(10.0, 20.0), "at once at its first position")
|
||||
figures.free()
|
||||
|
||||
|
||||
func test_a_figure_glides_toward_its_latest_position() -> void:
|
||||
var figures := Figures.new()
|
||||
figures.place(1, Vector2.ZERO)
|
||||
figures.place(1, Vector2(100.0, 0.0))
|
||||
figures._process(0.02)
|
||||
var halfway := figures.shown_at(1).x
|
||||
check(halfway > 0.0 and halfway < 100.0, "part of the way after a frame: %s" % halfway)
|
||||
for frame in 60:
|
||||
figures._process(0.02)
|
||||
check(figures.shown_at(1).distance_to(Vector2(100.0, 0.0)) < 0.01, "there after a second")
|
||||
figures.free()
|
||||
|
||||
|
||||
func test_figures_can_be_forgotten() -> void:
|
||||
var figures := Figures.new()
|
||||
figures.place(1, Vector2.ZERO)
|
||||
figures.place(3, Vector2.ONE)
|
||||
figures.forget(1)
|
||||
check_eq(figures.shown_at(1), Vector2.INF, "one is gone")
|
||||
check_eq(figures.shown_at(3), Vector2.ONE, "the other stays")
|
||||
figures.clear()
|
||||
check_eq(figures.shown_at(3), Vector2.INF, "all are gone")
|
||||
figures.free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://x5pqgp2p1hku
|
||||
@@ -0,0 +1,32 @@
|
||||
extends TestCase
|
||||
|
||||
|
||||
func _hud() -> Hud:
|
||||
I18n.install()
|
||||
var hud := Hud.new()
|
||||
tree.root.add_child(hud)
|
||||
return hud
|
||||
|
||||
|
||||
func _free(hud: Hud) -> void:
|
||||
tree.root.remove_child(hud)
|
||||
hud.free()
|
||||
|
||||
|
||||
func test_a_message_can_carry_values() -> void:
|
||||
var hud := _hud()
|
||||
hud.flash("PLAYER_JOINED", ["Grace"])
|
||||
check_eq(hud.message(), tr("PLAYER_JOINED") % "Grace", "the name is filled in")
|
||||
hud.flash("SAVED")
|
||||
check_eq(hud.message(), tr("SAVED"), "a message without values")
|
||||
_free(hud)
|
||||
|
||||
|
||||
func test_the_status_line_stays_until_it_is_replaced() -> void:
|
||||
var hud := _hud()
|
||||
hud.show_status(tr("STATUS_HOST") % [24680, 2])
|
||||
hud.flash("SAVED")
|
||||
hud._process(10.0)
|
||||
check_eq(hud.message(), "", "the message is gone after a while")
|
||||
check_eq(hud.status_text(), tr("STATUS_HOST") % [24680, 2], "the status line is not")
|
||||
_free(hud)
|
||||
@@ -0,0 +1 @@
|
||||
uid://8e4vlt0gnipa
|
||||
@@ -0,0 +1,37 @@
|
||||
extends TestCase
|
||||
|
||||
|
||||
func _menu() -> Menu:
|
||||
I18n.install()
|
||||
var menu := Menu.new()
|
||||
tree.root.add_child(menu)
|
||||
return menu
|
||||
|
||||
|
||||
func _free(menu: Menu) -> void:
|
||||
tree.root.remove_child(menu)
|
||||
menu.free()
|
||||
|
||||
|
||||
func test_the_buttons_say_what_the_player_chose() -> void:
|
||||
var menu := _menu()
|
||||
var chosen: Array = []
|
||||
menu.play_chosen.connect(func(open: bool) -> void: chosen.append(["play", open]))
|
||||
menu.join_chosen.connect(func(address: String) -> void: chosen.append(["join", address]))
|
||||
menu.address_field.text = " 192.168.178.20:25000 "
|
||||
menu.solo_button.pressed.emit()
|
||||
menu.host_button.pressed.emit()
|
||||
menu.join_button.pressed.emit()
|
||||
menu.address_field.text_submitted.emit(menu.address_field.text)
|
||||
check_eq(chosen, [["play", false], ["play", true], ["join", "192.168.178.20:25000"], ["join", "192.168.178.20:25000"]], "in order")
|
||||
_free(menu)
|
||||
|
||||
|
||||
func test_the_name_and_the_status_line() -> void:
|
||||
var menu := _menu()
|
||||
menu.name_field.text = " Ada "
|
||||
check_eq(menu.player_name(), "Ada", "without the spaces around it")
|
||||
menu.show_status("Verbinde …")
|
||||
check_eq(menu.status(), "Verbinde …", "the status is shown")
|
||||
check_eq(menu.solo_button.text, tr("MENU_SOLO"), "the labels come from the texts")
|
||||
_free(menu)
|
||||
@@ -0,0 +1 @@
|
||||
uid://dh6uogkq28wa4
|
||||
Reference in New Issue
Block a user