Skip to content

Commit 4cd4242

Browse files
committed
feat: continue work on orders menu in the new UI
FossilOrigin-Name: 8223ccaae57d7036dde5c9eeb8d63413d7067facc74a334578d885f6ba3f9344
1 parent aeaf4ab commit 4cd4242

File tree

1 file changed

+47
-24
lines changed

1 file changed

+47
-24
lines changed

src/newui/ordersmenu.nim

+47-24
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ proc setAsHome(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
226226
dialog = setQuestion(question = "Are you sure want to change your home base (it cost " &
227227
$price & " " & moneyName & ")?", qType = homeBase, data = $price)
228228

229-
proc askForEvents(dialog: var GameDialog) {.raises: [], tags: [RootEffect], contractual.} =
229+
proc askForEvents(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
230+
contractual.} =
230231
## Ask for known events
231232
##
232233
## * dialog - the current in-game dialog displayed on the screen
@@ -239,7 +240,8 @@ proc askForEvents(dialog: var GameDialog) {.raises: [], tags: [RootEffect], cont
239240
except:
240241
dialog = setError(message = "Can't ask for events.")
241242

242-
proc askForBases(dialog: var GameDialog) {.raises: [], tags: [RootEffect], contractual.} =
243+
proc askForBases(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
244+
contractual.} =
243245
## Ask for known bases
244246
##
245247
## * dialog - the current in-game dialog displayed on the screen
@@ -252,7 +254,9 @@ proc askForBases(dialog: var GameDialog) {.raises: [], tags: [RootEffect], contr
252254
except:
253255
dialog = setError(message = "Can't ask for bases.")
254256

255-
proc showDockedCommands(baseIndex: ExtendedBasesRange; haveTrader: bool; dialog: var GameDialog; state: var GameState) {.raises: [], tags: [RootEffect], contractual.} =
257+
proc showDockedCommands(baseIndex: ExtendedBasesRange; haveTrader: bool;
258+
dialog: var GameDialog; state: var GameState) {.raises: [], tags: [
259+
RootEffect], contractual.} =
256260
## Show the available orders when the player's ship is docked to a base
257261
##
258262
## * baseIndex - the index of the base to which the player's ship is docked
@@ -397,13 +401,17 @@ proc showDockedCommands(baseIndex: ExtendedBasesRange; haveTrader: bool; dialog:
397401
missionsLimit.dec
398402
if missionsLimit > 0:
399403
labelButton(title = "Missions"):
400-
discard
404+
state = baseMissions
405+
dialog = none
406+
closePopup()
401407
if playerShip.homeBase != baseIndex:
402408
labelButton(title = "Set as home"):
403409
setAsHome(dialog = dialog)
404410
if skyBases[baseIndex].population == 0:
405411
labelButton(title = "Loot"):
406-
discard
412+
state = loot
413+
dialog = none
414+
closePopup()
407415

408416
proc finishStory(): GameDialog {.raises: [], tags: [WriteIOEffect, TimeEffect,
409417
RootEffect], contractual.} =
@@ -419,11 +427,12 @@ proc finishStory(): GameDialog {.raises: [], tags: [WriteIOEffect, TimeEffect,
419427
except KeyError:
420428
result = setError(message = "Can't get the end text of the current story. ")
421429

422-
proc executeStory(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
423-
contractual.} =
430+
proc executeStory(dialog: var GameDialog; state: var GameState) {.raises: [],
431+
tags: [RootEffect], contractual.} =
424432
## Execute the current story step
425433
##
426434
## * dialog - the current in-game dialog displayed on the screen
435+
## * state - the current state of the game
427436
##
428437
## Returns the modified parameters dialog.
429438
closePopup()
@@ -448,12 +457,12 @@ proc executeStory(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
448457
try:
449458
if progressStory():
450459
let tokens: seq[string] = currentStory.data.split(sep = ';')
451-
case step.finishCondition
452-
of destroyShip:
460+
if step.finishCondition == destroyShip:
453461
if startCombat(enemyIndex = tokens[2].parseInt, newCombat = false):
462+
state = combat
463+
dialog = none
464+
closePopup()
454465
return
455-
else:
456-
discard
457466
if currentStory.currentStep > -3:
458467
step = (if currentStory.currentStep > -1: storiesList[
459468
currentStory.index].steps[currentStory.currentStep] else: storiesList[
@@ -471,8 +480,8 @@ proc executeStory(dialog: var GameDialog) {.raises: [], tags: [RootEffect],
471480
dialog = setError(message = "Can't progress the current story.")
472481

473482

474-
proc startMission(dialog: var GameDialog; state: var GameState) {.raises: [], tags: [RootEffect],
475-
contractual.} =
483+
proc startMission(dialog: var GameDialog; state: var GameState) {.raises: [],
484+
tags: [RootEffect], contractual.} =
476485
## Start the mission in the current map cell
477486
##
478487
## * dialog - the current in-game dialog displayed on the screen
@@ -518,6 +527,8 @@ proc startMission(dialog: var GameDialog; state: var GameState) {.raises: [], ta
518527
uMission = true
519528
if startsCombat:
520529
state = combat
530+
dialog = none
531+
closePopup()
521532
return
522533
if uMission:
523534
try:
@@ -586,8 +597,8 @@ proc deliverMedicines(dialog: var GameDialog; forFree: bool = true) {.raises: [
586597
except:
587598
dialog = setError(message = "Can't sell medicines to base.")
588599

589-
proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [], tags: [RootEffect],
590-
contractual.} =
600+
proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
601+
tags: [RootEffect], contractual.} =
591602
## Show the player's ship's orders menu
592603
##
593604
## * dialog - the current in-game dialog displayed on the screen
@@ -629,7 +640,7 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
629640
labelButton(title = "Ask for " & itemsList[getStepData(
630641
finishData = step.finishData,
631642
name = "item").parseInt].name):
632-
executeStory(dialog = dialog)
643+
executeStory(dialog = dialog, state = state)
633644
except:
634645
dialog = setError(message = "Can't add the story button.")
635646
return
@@ -641,7 +652,7 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
641652
try:
642653
labelButton(title = "Search for " & protoShipsList[parts[
643654
3].parseInt].name):
644-
executeStory(dialog = dialog)
655+
executeStory(dialog = dialog, state = state)
645656
except:
646657
dialog = setError(message = "Can't add the story button.")
647658
return
@@ -654,7 +665,7 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
654665
if playerShip.skyX == parts[0].parseInt and playerShip.skyY ==
655666
parts[1].parseInt:
656667
labelButton(title = "Search area"):
657-
executeStory(dialog = dialog)
668+
executeStory(dialog = dialog, state = state)
658669
except:
659670
dialog = setError(message = "Can't get the story step location.")
660671
return
@@ -671,15 +682,19 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
671682
case event
672683
of enemyShip, enemyPatrol:
673684
labelButton(title = "Attack"):
674-
discard
685+
state = combat
686+
dialog = none
687+
closePopup()
675688
of fullDocks:
676689
labelButton(title = "Wait (full docks)"):
677690
closePopup()
678691
dialog = waitDialog
679692
setDialog()
680693
of attackOnBase:
681694
labelButton(title = "Defend"):
682-
discard
695+
state = combat
696+
dialog = none
697+
closePopup()
683698
of disease:
684699
if haveTrader:
685700
let itemIndex: int = try:
@@ -761,7 +776,9 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
761776
of trader:
762777
if haveTrader:
763778
labelButton(title = "Trade"):
764-
discard
779+
state = trade
780+
dialog = none
781+
closePopup()
765782
labelButton(title = "Ask for events"):
766783
askForEvents(dialog = dialog)
767784
if dialog != none:
@@ -771,14 +788,18 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
771788
if dialog != none:
772789
return
773790
labelButton(title = "Attack"):
774-
discard
791+
state = combat
792+
dialog = none
793+
closePopup()
775794
of friendlyShip:
776795
if haveTrader:
777796
try:
778797
if tradersName in protoShipsList[eventsList[skyMap[
779798
playerShip.skyX][playerShip.skyY].eventIndex].shipIndex].name:
780799
labelButton(title = "Trade"):
781-
discard
800+
state = trade
801+
dialog = none
802+
closePopup()
782803
labelButton(title = "Ask for bases"):
783804
askForBases(dialog = dialog)
784805
if dialog != none:
@@ -791,7 +812,9 @@ proc showShipOrders*(dialog: var GameDialog; state: var GameState) {.raises: [],
791812
if dialog != none:
792813
return
793814
labelButton(title = "Attack"):
794-
discard
815+
state = combat
816+
dialog = none
817+
closePopup()
795818
labelButton(title = "Close"):
796819
closePopup()
797820
dialog = none

0 commit comments

Comments
 (0)