first commit
This commit is contained in:
158
tests/solo_test.gd
Normal file
158
tests/solo_test.gd
Normal file
@@ -0,0 +1,158 @@
|
||||
extends Node
|
||||
var main
|
||||
var step := 0
|
||||
var wait := 0.0
|
||||
var ok := 0
|
||||
var fail := 0
|
||||
var m0 := 0
|
||||
|
||||
func chk(name: String, cond: bool, info := "") -> void:
|
||||
if cond:
|
||||
ok += 1
|
||||
print(" OK %s %s" % [name, info])
|
||||
else:
|
||||
fail += 1
|
||||
print(" FAIL %s %s" % [name, info])
|
||||
|
||||
func seated() -> int:
|
||||
var n := 0
|
||||
for p in main.passengers:
|
||||
if p.state == 2:
|
||||
n += 1
|
||||
return n
|
||||
|
||||
func _unchecked() -> int:
|
||||
var n := 0
|
||||
for p in main.passengers:
|
||||
if p.state == 2 and not p.ticket_checked:
|
||||
n += 1
|
||||
return n
|
||||
|
||||
func _key(code: int, down: bool) -> void:
|
||||
var e := InputEventKey.new()
|
||||
e.physical_keycode = code
|
||||
e.keycode = code
|
||||
e.pressed = down
|
||||
Input.parse_input_event(e)
|
||||
|
||||
func _process(d):
|
||||
if main == null:
|
||||
main = get_tree().current_scene
|
||||
return
|
||||
if not main.started:
|
||||
main._start_solo()
|
||||
return
|
||||
if wait > 0.0:
|
||||
wait -= d
|
||||
return
|
||||
match step:
|
||||
0:
|
||||
print("== Test start ==")
|
||||
chk("Zug gebaut", main.train.cars.size() == 3, "cars=%d" % main.train.cars.size())
|
||||
chk("Sitze", main.train.seat_count() == 8)
|
||||
chk("Ladekapazität", main.train.cargo_capacity() == 10)
|
||||
chk("Am Bahnhof", main.train.docked_at == main.stations[0])
|
||||
var wr = main.train.walk_range()
|
||||
chk("Begehbarer Bereich", wr.y - wr.x > 25.0, "%.1f m" % (wr.y - wr.x))
|
||||
chk("Spieler startet im Führerstand", main.train.locate(main.player.s)["index"] == 0)
|
||||
for i in 6:
|
||||
main.spawn_passenger(0, 2)
|
||||
chk("Wartende", main.stations[0].waiting.size() == 6)
|
||||
wait = 8.0
|
||||
1:
|
||||
chk("Eingestiegen", seated() == 6, "seated=%d" % seated())
|
||||
m0 = main.money
|
||||
for p in main.passengers:
|
||||
if p.state == 2:
|
||||
main._check_ticket(p, 1)
|
||||
chk("Ticketgeld", main.money > m0, "+%d €" % (main.money - m0))
|
||||
chk("Alle kontrolliert", _unchecked() == 0)
|
||||
2:
|
||||
m0 = main.money
|
||||
var st = main.stations[0]
|
||||
st.stock = 12.0
|
||||
for i in 10:
|
||||
main._srv_transfer_one(1)
|
||||
chk("Ladung aufgenommen", main.train.total_cargo() == 10)
|
||||
chk("Lager geleert", st.stock < 3.0, "stock=%.1f" % st.stock)
|
||||
3:
|
||||
main._park_at(main.stations[2])
|
||||
wait = 0.3
|
||||
4:
|
||||
chk("Am Eisenwerk", main.train.docked_at == main.stations[2])
|
||||
m0 = main.money
|
||||
for i in 12:
|
||||
main._srv_transfer_one(1)
|
||||
chk("Ware verkauft", main.train.total_cargo() == 0)
|
||||
chk("Erlös", main.money - m0 >= 100, "+%d €" % (main.money - m0))
|
||||
wait = 8.0
|
||||
5:
|
||||
var still := 0
|
||||
for p in main.passengers:
|
||||
if p.state == 2 and p.dest_station == 2:
|
||||
still += 1
|
||||
chk("Ausgestiegen", still == 0)
|
||||
chk("Ansehen gestiegen", main.reputation > 0, "rep=%d" % main.reputation)
|
||||
main.money = 20000
|
||||
main.reputation = 50
|
||||
var n0 = main.train.consist.size()
|
||||
main.buy_car("dining")
|
||||
chk("Speisewagen gekauft", main.train.consist.size() == n0 + 1)
|
||||
chk("Speisewagen erkannt", main.train.has_dining())
|
||||
main.buy_car("saloon")
|
||||
chk("Salonwagen gekauft", main.train.seat_count() == 22)
|
||||
wait = 0.2
|
||||
6:
|
||||
var v0 = main.train.max_speed()
|
||||
main.buy_loco("express")
|
||||
chk("Lok getauscht", main.train.loco_id == "express")
|
||||
chk("Schneller", main.train.max_speed() > v0)
|
||||
chk("Ausbau", main.buy_upgrade("scanner"))
|
||||
chk("Ausbau nicht doppelt", not main.buy_upgrade("scanner"))
|
||||
var before = main.train.consist.size()
|
||||
main.sell_car(0)
|
||||
chk("Wagen verkauft", main.train.consist.size() == before - 1)
|
||||
wait = 0.3
|
||||
7:
|
||||
chk("Spieler im Zug", main.train.locate(main.player.s)["index"] == 0)
|
||||
main._srv_toggle_drive(1)
|
||||
chk("Steuerung übernommen", main.driver_id == 1)
|
||||
_key(KEY_W, true)
|
||||
wait = 3.0
|
||||
8:
|
||||
chk("Zug fährt", main.train.speed > 3.0, "v=%.1f m/s" % main.train.speed)
|
||||
_key(KEY_W, false)
|
||||
_key(KEY_S, true)
|
||||
wait = 4.0
|
||||
9:
|
||||
chk("Zug bremst", main.train.speed < 0.01, "v=%.2f" % main.train.speed)
|
||||
_key(KEY_S, false)
|
||||
# Durch den ganzen Zug laufen: hinten anfangen, nach vorn gehen.
|
||||
main._srv_toggle_drive(1)
|
||||
chk("Steuerung abgegeben", main.driver_id == 0)
|
||||
var span = main.train.walk_range()
|
||||
main.player.s = span.x + 0.2
|
||||
main.player.x = 0.0
|
||||
main.player.yaw = 0.0
|
||||
_key(KEY_W, true)
|
||||
_key(KEY_SHIFT, true)
|
||||
wait = 25.0
|
||||
10:
|
||||
_key(KEY_W, false)
|
||||
_key(KEY_SHIFT, false)
|
||||
var span2 = main.train.walk_range()
|
||||
chk("Ganzer Zug begehbar", main.player.s > span2.y - 1.0,
|
||||
"s=%.1f von %.1f" % [main.player.s, span2.y])
|
||||
chk("Im Führerstand angekommen", main.train.locate(main.player.s)["index"] == 0)
|
||||
main.player.x = 0.0
|
||||
_key(KEY_D, true)
|
||||
wait = 3.0
|
||||
11:
|
||||
_key(KEY_D, false)
|
||||
chk("Wand hält den Spieler", absf(main.player.x) < 1.1, "x=%.2f" % main.player.x)
|
||||
main.money = 200
|
||||
chk("Kein Kauf ohne Geld", not main.buy_car("saloon"))
|
||||
chk("Kein Kauf ohne Ansehen", not main.buy_upgrade("trolley") or main.reputation >= 20)
|
||||
print("== %d ok, %d fail ==" % [ok, fail])
|
||||
get_tree().quit(1 if fail > 0 else 0)
|
||||
step += 1
|
||||
Reference in New Issue
Block a user