Commit 17c59756b85a41b5f45353ac9b7b0906cad4bb1b
1 parent
269dad49
Exists in
master
allow custom nicnames when changing generations and refactoring
- requires testing - also change time interval of showpopup procedure
Showing
1 changed file
with
78 additions
and
57 deletions
Show diff stats
units/game_control.pas
| ... | ... | @@ -52,8 +52,8 @@ type |
| 52 | 52 | procedure SetRowBase(AValue: integer); |
| 53 | 53 | private |
| 54 | 54 | function AskQuestion(AQuestion:string):UTF8string; |
| 55 | - procedure ShowPopUp(AText:string); | |
| 56 | - procedure ShowConsequenceMessage(AID,S:string;ForGroup:Boolean); | |
| 55 | + function ShowConsequence(AID,S:string;ForGroup:Boolean;ShowPopUp : Boolean = True) : string; | |
| 56 | + procedure ShowPopUp(AText:string;AInterval : integer = 5000); | |
| 57 | 57 | procedure DisableConfirmationButton; |
| 58 | 58 | procedure CleanMatrix(AEnabled : Boolean); |
| 59 | 59 | procedure NextConditionSetup(S : string); |
| ... | ... | @@ -120,7 +120,7 @@ const |
| 120 | 120 | |
| 121 | 121 | implementation |
| 122 | 122 | |
| 123 | -uses ButtonPanel,Controls,ExtCtrls,StdCtrls,LazUTF8, Forms, strutils | |
| 123 | +uses ButtonPanel,Controls,ExtCtrls,StdCtrls,LazUTF8, Forms, Dialogs, strutils | |
| 124 | 124 | , zhelpers |
| 125 | 125 | , form_matrixgame |
| 126 | 126 | , presentation_classes |
| ... | ... | @@ -247,17 +247,10 @@ begin |
| 247 | 247 | // wait some time, we just sent a message earlier |
| 248 | 248 | Sleep(5); |
| 249 | 249 | |
| 250 | + // gui setup | |
| 250 | 251 | // enable matrix grid for the first player |
| 251 | 252 | FZMQActor.SendMessage([K_START]); |
| 252 | 253 | |
| 253 | - // | |
| 254 | - Start; | |
| 255 | -end; | |
| 256 | - | |
| 257 | -procedure TGameControl.Start; | |
| 258 | -begin | |
| 259 | - // basic gui setup | |
| 260 | - | |
| 261 | 254 | // points |
| 262 | 255 | //FormMatrixGame.GBIndividualAB.Visible := FExperiment.ABPoints; |
| 263 | 256 | //FormMatrixGame.GBIndividual.Visible:= not FormMatrixGame.GBIndividualAB.Visible; |
| ... | ... | @@ -283,8 +276,14 @@ begin |
| 283 | 276 | // wait for players |
| 284 | 277 | end; |
| 285 | 278 | |
| 279 | +procedure TGameControl.Start; | |
| 280 | +begin | |
| 281 | + // check if experiment is running | |
| 282 | +end; | |
| 283 | + | |
| 286 | 284 | procedure TGameControl.Pause; |
| 287 | 285 | begin |
| 286 | + //FExperiment.State:=xsPaused; | |
| 288 | 287 | // save to file |
| 289 | 288 | |
| 290 | 289 | // inform players |
| ... | ... | @@ -292,6 +291,7 @@ end; |
| 292 | 291 | |
| 293 | 292 | procedure TGameControl.Resume; |
| 294 | 293 | begin |
| 294 | + //FExperiment.State:=xsRunning; | |
| 295 | 295 | // load from file |
| 296 | 296 | |
| 297 | 297 | // wait for players |
| ... | ... | @@ -299,6 +299,8 @@ end; |
| 299 | 299 | |
| 300 | 300 | procedure TGameControl.Stop; |
| 301 | 301 | begin |
| 302 | + // Pause | |
| 303 | + | |
| 302 | 304 | // cleaning |
| 303 | 305 | end; |
| 304 | 306 | |
| ... | ... | @@ -457,41 +459,46 @@ var |
| 457 | 459 | begin |
| 458 | 460 | Prompt:=TForm.CreateNew(nil); |
| 459 | 461 | try |
| 460 | - with Prompt do begin | |
| 461 | - BorderStyle:=bsNone; | |
| 462 | - Position:=poScreenCenter; | |
| 463 | - ButtonPanel:=TButtonPanel.Create(Prompt); | |
| 464 | - with ButtonPanel do begin | |
| 465 | - ButtonOrder:=boCloseOKCancel; | |
| 466 | - OKButton.Caption:='Sim'; | |
| 467 | - CancelButton.Caption:='Não'; | |
| 468 | - ShowButtons:=[pbOK, pbCancel]; | |
| 469 | - ShowBevel:=True; | |
| 470 | - ShowGlyphs:=[]; | |
| 471 | - Parent:=Prompt; | |
| 472 | - end; | |
| 473 | - LabelQuestion:=TLabel.Create(Prompt); | |
| 474 | - with LabelQuestion do begin | |
| 475 | - Align:=alClient; | |
| 476 | - Caption:= AQuestion; | |
| 477 | - Alignment := taCenter; | |
| 478 | - Anchors := [akLeft,akRight]; | |
| 479 | - Layout := tlCenter; | |
| 480 | - WordWrap := True; | |
| 481 | - Parent:=Prompt; | |
| 482 | - end; | |
| 462 | + with Prompt do | |
| 463 | + begin | |
| 464 | + BorderStyle:=bsNone; | |
| 465 | + Position:=poScreenCenter; | |
| 466 | + ButtonPanel:=TButtonPanel.Create(Prompt); | |
| 467 | + with ButtonPanel do | |
| 468 | + begin | |
| 469 | + ButtonOrder:=boCloseOKCancel; | |
| 470 | + OKButton.Caption:='Sim'; | |
| 471 | + CancelButton.Caption:='Não'; | |
| 472 | + ShowButtons:=[pbOK, pbCancel]; | |
| 473 | + ShowBevel:=True; | |
| 474 | + ShowGlyphs:=[]; | |
| 475 | + Parent:=Prompt; | |
| 476 | + end; | |
| 483 | 477 | |
| 484 | - mr:=ShowModal; | |
| 485 | - if mr = mrOK then | |
| 486 | - Result := 'S' | |
| 487 | - else Result := 'N'; | |
| 488 | - end; | |
| 478 | + LabelQuestion:=TLabel.Create(Prompt); | |
| 479 | + with LabelQuestion do | |
| 480 | + begin | |
| 481 | + Align:=alClient; | |
| 482 | + Caption:= AQuestion; | |
| 483 | + Alignment := taCenter; | |
| 484 | + Anchors := [akLeft,akRight]; | |
| 485 | + Layout := tlCenter; | |
| 486 | + WordWrap := True; | |
| 487 | + Parent:=Prompt; | |
| 488 | + end; | |
| 489 | + | |
| 490 | + mr:=ShowModal; | |
| 491 | + if mr = mrOK then | |
| 492 | + Result := 'S' | |
| 493 | + else | |
| 494 | + Result := 'N'; | |
| 495 | + end; | |
| 489 | 496 | finally |
| 490 | 497 | Prompt.Free; |
| 491 | 498 | end; |
| 492 | 499 | end; |
| 493 | 500 | |
| 494 | -procedure TGameControl.ShowPopUp(AText: string); | |
| 501 | +procedure TGameControl.ShowPopUp(AText: string; AInterval: integer); | |
| 495 | 502 | var PopUpPos : TPoint; |
| 496 | 503 | begin |
| 497 | 504 | PopUpPos.X := FormMatrixGame.GBIndividualAB.Left-110; |
| ... | ... | @@ -501,15 +508,19 @@ begin |
| 501 | 508 | FormMatrixGame.PopupNotifier.Text:=AText; |
| 502 | 509 | FormMatrixGame.PopupNotifier.ShowAtPos(PopUpPos.X,PopUpPos.Y); |
| 503 | 510 | FormMatrixGame.Timer.OnTimer:=@FormMatrixGame.TimerTimer; |
| 511 | + FormMatrixGame.Timer.Interval:=AInterval; | |
| 504 | 512 | FormMatrixGame.Timer.Enabled:=True; |
| 505 | 513 | end; |
| 506 | 514 | |
| 507 | -procedure TGameControl.ShowConsequenceMessage(AID, S: string; ForGroup: Boolean); | |
| 515 | +function TGameControl.ShowConsequence(AID, S: string; | |
| 516 | + ForGroup: Boolean; ShowPopUp: Boolean):string; | |
| 508 | 517 | var |
| 509 | 518 | LConsequence : TConsequence; |
| 510 | 519 | begin |
| 520 | + Result := ''; | |
| 511 | 521 | LConsequence := TConsequence.Create(nil,S); |
| 512 | - LConsequence.GenerateMessage(ForGroup); | |
| 522 | + Result := LConsequence.GenerateMessage(ForGroup); | |
| 523 | + if ShowPopUp then | |
| 513 | 524 | LConsequence.PresentMessage(FormMatrixGame.GBIndividualAB); |
| 514 | 525 | case FActor of |
| 515 | 526 | gaPlayer: |
| ... | ... | @@ -981,20 +992,24 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); |
| 981 | 992 | var |
| 982 | 993 | i : integer; |
| 983 | 994 | MID : string; |
| 995 | + LQConsequence : string; | |
| 984 | 996 | begin |
| 985 | 997 | if AMessage[2] <> #27 then |
| 986 | 998 | begin |
| 987 | 999 | if AMessage.Count > 1 then |
| 988 | 1000 | begin |
| 1001 | + // present only one popup with all messages | |
| 1002 | + LQConsequence := ''; | |
| 989 | 1003 | for i := 3 to AMessage.Count -1 do |
| 990 | 1004 | begin |
| 991 | 1005 | MID := ExtractDelimited(1,AMessage[i],['+']); |
| 992 | - ShowConsequenceMessage(MID, ExtractDelimited(2,AMessage[i],['+']),MID = 'M'); | |
| 993 | - // TODO: QMESSAGE present only one message with all information... | |
| 1006 | + LQConsequence += ShowConsequence(MID, ExtractDelimited(2,AMessage[i],['+']),MID = 'M',False)+' '; | |
| 1007 | + | |
| 994 | 1008 | {$IFDEF DEBUG} |
| 995 | 1009 | WriteLn('A Prompt consequence should have shown.'); |
| 996 | 1010 | {$ENDIF} |
| 997 | 1011 | end; |
| 1012 | + ShowPopUp(LQConsequence); | |
| 998 | 1013 | end; |
| 999 | 1014 | ResumeNextTurn; |
| 1000 | 1015 | if AMessage[2] <> #32 then |
| ... | ... | @@ -1007,7 +1022,7 @@ begin |
| 1007 | 1022 | if MHas(K_ARRIVED) then ReceiveActor; |
| 1008 | 1023 | if MHas(K_CHAT_M) then ReceiveChat; |
| 1009 | 1024 | if MHas(K_CHOICE) then ReceiveChoice; |
| 1010 | - if MHas(K_MESSAGE) then ShowConsequenceMessage(AMessage[1],AMessage[2],StrToBool(AMessage[3])); | |
| 1025 | + if MHas(K_MESSAGE) then ShowConsequence(AMessage[1],AMessage[2],StrToBool(AMessage[3])); | |
| 1011 | 1026 | if MHas(K_START) then NotifyPlayers; |
| 1012 | 1027 | if MHas(K_QUESTION) then ShowQuestion; |
| 1013 | 1028 | if MHas(K_MOVQUEUE) then MovePlayerQueue; |
| ... | ... | @@ -1166,17 +1181,17 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); |
| 1166 | 1181 | ARequest.Append(LEndGeneration); // 9, #32 resume, else NextGeneration = PlayerToKick AID |
| 1167 | 1182 | LEndCondition := ShouldEndCondition; |
| 1168 | 1183 | if IsLastCondition and LEndCondition then // 10 |
| 1169 | - // end experiment envelop | |
| 1184 | + // end experiment envelop item | |
| 1170 | 1185 | ARequest.Append(#27) |
| 1171 | 1186 | else |
| 1172 | 1187 | if LEndCondition then |
| 1173 | 1188 | begin |
| 1174 | 1189 | FExperiment.NextCondition; |
| 1175 | - // end condition envelop | |
| 1190 | + // end condition envelop item | |
| 1176 | 1191 | ARequest.Append(FExperiment.CurrentConditionAsString); |
| 1177 | 1192 | end |
| 1178 | 1193 | else |
| 1179 | - // do nothing envelop | |
| 1194 | + // do nothing envelop item | |
| 1180 | 1195 | ARequest.Append(#32); |
| 1181 | 1196 | end; |
| 1182 | 1197 | end; |
| ... | ... | @@ -1231,10 +1246,12 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); |
| 1231 | 1246 | begin |
| 1232 | 1247 | P := FExperiment.PlayerFromID[ARequest[0]]; |
| 1233 | 1248 | ARequest[2] := K_RESUME+K_ARRIVED; |
| 1234 | - if AskQuestion( | |
| 1235 | - 'Um novo participante entrou no lugar do participante mais antigo. Criar um novo apelido para o novo participante?' | |
| 1236 | - ) = 'S' then | |
| 1237 | - P.Nicname := GenResourceName(-1); | |
| 1249 | + P.Nicname := InputBox | |
| 1250 | + ( | |
| 1251 | + 'Mudança de geração', | |
| 1252 | + 'Um novo participante entrou no lugar do participante mais antigo.Qual o apelido do novo participante?', | |
| 1253 | + GenResourceName(-1) | |
| 1254 | + ); | |
| 1238 | 1255 | |
| 1239 | 1256 | S := FExperiment.PlayerAsString[P]; |
| 1240 | 1257 | ARequest.Append(S); // 3 |
| ... | ... | @@ -1242,10 +1259,13 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); |
| 1242 | 1259 | end; |
| 1243 | 1260 | |
| 1244 | 1261 | begin |
| 1245 | - if MHas(K_LOGIN) then ReplyLoginRequest; | |
| 1246 | - if MHas(K_RESUME) then ReplyResume; | |
| 1247 | - if MHas(K_CHOICE) then ValidateChoice; | |
| 1248 | - if MHas(K_QUESTION) then ValidateQuestionResponse; | |
| 1262 | + if FExperiment.State = xsRunning then | |
| 1263 | + begin | |
| 1264 | + if MHas(K_LOGIN) then ReplyLoginRequest; | |
| 1265 | + if MHas(K_RESUME) then ReplyResume; | |
| 1266 | + if MHas(K_CHOICE) then ValidateChoice; | |
| 1267 | + if MHas(K_QUESTION) then ValidateQuestionResponse; | |
| 1268 | + end; | |
| 1249 | 1269 | end; |
| 1250 | 1270 | |
| 1251 | 1271 | // Here FActor is garanted to be a TZMQPlayer, replying by: |
| ... | ... | @@ -1286,7 +1306,8 @@ procedure TGameControl.ReceiveReply(AReply: TStringList); |
| 1286 | 1306 | else |
| 1287 | 1307 | begin |
| 1288 | 1308 | {$IFDEF DEBUG} |
| 1289 | - WriteLn(Self.ID +' sent but' + AReply[0] +' received. <<<<<<<<<<<<<<<<<<<<<<< This must not occur >>>>>>>>>>>>>>>>>>>>>>>>>>'); | |
| 1309 | + WriteLn(Self.ID + ' sent but' + AReply[0] + | |
| 1310 | + ' received. <<<<<<<<<<<<<<<<<<<<<<< This must never occur >>>>>>>>>>>>>>>>>>>>>>>>>>'); | |
| 1290 | 1311 | {$ENDIF} |
| 1291 | 1312 | end; |
| 1292 | 1313 | end; | ... | ... |