Commit 81caf87805425d65a2dbef91380432961597df22
1 parent
21d23065
Exists in
master
cleaning, admin feedback and dumps
Showing
10 changed files
with
294 additions
and
94 deletions
Show diff stats
cultural_matrix.lpi
| ... | ... | @@ -25,7 +25,7 @@ |
| 25 | 25 | </Target> |
| 26 | 26 | <SearchPaths> |
| 27 | 27 | <IncludeFiles Value="$(ProjOutDir)"/> |
| 28 | - <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9"/> | |
| 28 | + <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9/"/> | |
| 29 | 29 | <OtherUnitFiles Value="units;../../dependency/delphizmq;../../units"/> |
| 30 | 30 | <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> |
| 31 | 31 | </SearchPaths> |
| ... | ... | @@ -46,7 +46,7 @@ |
| 46 | 46 | </Target> |
| 47 | 47 | <SearchPaths> |
| 48 | 48 | <IncludeFiles Value="$(ProjOutDir)"/> |
| 49 | - <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9"/> | |
| 49 | + <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9/"/> | |
| 50 | 50 | <OtherUnitFiles Value="units;../../dependency/delphizmq;../../units"/> |
| 51 | 51 | <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> |
| 52 | 52 | </SearchPaths> |
| ... | ... | @@ -147,6 +147,7 @@ |
| 147 | 147 | <Filename Value="form_chooseactor.pas"/> |
| 148 | 148 | <IsPartOfProject Value="True"/> |
| 149 | 149 | <ComponentName Value="FormChooseActor"/> |
| 150 | + <HasResources Value="True"/> | |
| 150 | 151 | <ResourceBaseClass Value="Form"/> |
| 151 | 152 | </Unit13> |
| 152 | 153 | <Unit14> |
| ... | ... | @@ -162,7 +163,7 @@ |
| 162 | 163 | </Target> |
| 163 | 164 | <SearchPaths> |
| 164 | 165 | <IncludeFiles Value="$(ProjOutDir)"/> |
| 165 | - <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9"/> | |
| 166 | + <Libraries Value="/usr/lib/gcc/x86_64-linux-gnu/4.9/"/> | |
| 166 | 167 | <OtherUnitFiles Value="units;../../dependency/delphizmq;../../units"/> |
| 167 | 168 | <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> |
| 168 | 169 | </SearchPaths> | ... | ... |
form_matrixgame.lfm
| 1 | 1 | object FormMatrixGame: TFormMatrixGame |
| 2 | - Left = 0 | |
| 3 | - Height = 565 | |
| 4 | - Top = 124 | |
| 5 | - Width = 1278 | |
| 6 | - HorzScrollBar.Page = 1278 | |
| 2 | + Left = 54 | |
| 3 | + Height = 612 | |
| 4 | + Top = 80 | |
| 5 | + Width = 1164 | |
| 6 | + HorzScrollBar.Page = 1164 | |
| 7 | 7 | VertScrollBar.Page = 542 |
| 8 | 8 | AutoScroll = True |
| 9 | 9 | Caption = 'FormMatrixGame' |
| 10 | - ClientHeight = 555 | |
| 11 | - ClientWidth = 1278 | |
| 10 | + ClientHeight = 602 | |
| 11 | + ClientWidth = 1164 | |
| 12 | 12 | Font.Name = 'Monospace' |
| 13 | 13 | OnActivate = FormActivate |
| 14 | 14 | LCLVersion = '1.6.2.0' |
| ... | ... | @@ -184,7 +184,7 @@ object FormMatrixGame: TFormMatrixGame |
| 184 | 184 | AnchorSideBottom.Side = asrBottom |
| 185 | 185 | Left = 0 |
| 186 | 186 | Height = 17 |
| 187 | - Top = 538 | |
| 187 | + Top = 585 | |
| 188 | 188 | Width = 1632 |
| 189 | 189 | Anchors = [akLeft, akRight, akBottom] |
| 190 | 190 | AutoSize = True |
| ... | ... | @@ -211,10 +211,10 @@ object FormMatrixGame: TFormMatrixGame |
| 211 | 211 | TabOrder = 4 |
| 212 | 212 | Visible = False |
| 213 | 213 | object GBExperiment: TGroupBox |
| 214 | - Left = 8 | |
| 215 | - Height = 277 | |
| 214 | + Left = 16 | |
| 215 | + Height = 197 | |
| 216 | 216 | Top = 60 |
| 217 | - Width = 188 | |
| 217 | + Width = 228 | |
| 218 | 218 | AutoSize = True |
| 219 | 219 | Caption = 'Experimento' |
| 220 | 220 | ChildSizing.LeftRightSpacing = 10 |
| ... | ... | @@ -224,19 +224,19 @@ object FormMatrixGame: TFormMatrixGame |
| 224 | 224 | ChildSizing.EnlargeHorizontal = crsHomogenousChildResize |
| 225 | 225 | ChildSizing.Layout = cclLeftToRightThenTopToBottom |
| 226 | 226 | ChildSizing.ControlsPerLine = 2 |
| 227 | - ClientHeight = 260 | |
| 228 | - ClientWidth = 184 | |
| 227 | + ClientHeight = 180 | |
| 228 | + ClientWidth = 224 | |
| 229 | 229 | TabOrder = 0 |
| 230 | 230 | object LabelExpCond: TLabel |
| 231 | 231 | Left = 10 |
| 232 | 232 | Height = 15 |
| 233 | 233 | Top = 20 |
| 234 | - Width = 128 | |
| 234 | + Width = 168 | |
| 235 | 235 | Caption = 'Condição:' |
| 236 | 236 | ParentColor = False |
| 237 | 237 | end |
| 238 | 238 | object LabelExpCountCondition: TLabel |
| 239 | - Left = 158 | |
| 239 | + Left = 198 | |
| 240 | 240 | Height = 15 |
| 241 | 241 | Top = 20 |
| 242 | 242 | Width = 16 |
| ... | ... | @@ -247,12 +247,12 @@ object FormMatrixGame: TFormMatrixGame |
| 247 | 247 | Left = 10 |
| 248 | 248 | Height = 15 |
| 249 | 249 | Top = 45 |
| 250 | - Width = 128 | |
| 250 | + Width = 168 | |
| 251 | 251 | Caption = 'Geração:' |
| 252 | 252 | ParentColor = False |
| 253 | 253 | end |
| 254 | 254 | object LabelExpCountGeneration: TLabel |
| 255 | - Left = 158 | |
| 255 | + Left = 198 | |
| 256 | 256 | Height = 15 |
| 257 | 257 | Top = 45 |
| 258 | 258 | Width = 16 |
| ... | ... | @@ -263,12 +263,12 @@ object FormMatrixGame: TFormMatrixGame |
| 263 | 263 | Left = 10 |
| 264 | 264 | Height = 15 |
| 265 | 265 | Top = 70 |
| 266 | - Width = 128 | |
| 266 | + Width = 168 | |
| 267 | 267 | Caption = 'Ciclo:' |
| 268 | 268 | ParentColor = False |
| 269 | 269 | end |
| 270 | 270 | object LabelExpCountCycle: TLabel |
| 271 | - Left = 158 | |
| 271 | + Left = 198 | |
| 272 | 272 | Height = 15 |
| 273 | 273 | Top = 70 |
| 274 | 274 | Width = 16 |
| ... | ... | @@ -279,12 +279,12 @@ object FormMatrixGame: TFormMatrixGame |
| 279 | 279 | Left = 10 |
| 280 | 280 | Height = 15 |
| 281 | 281 | Top = 95 |
| 282 | - Width = 128 | |
| 282 | + Width = 168 | |
| 283 | 283 | Caption = 'Turno:' |
| 284 | 284 | ParentColor = False |
| 285 | 285 | end |
| 286 | 286 | object LabelExpCountTurn: TLabel |
| 287 | - Left = 158 | |
| 287 | + Left = 198 | |
| 288 | 288 | Height = 15 |
| 289 | 289 | Top = 95 |
| 290 | 290 | Width = 16 |
| ... | ... | @@ -295,74 +295,69 @@ object FormMatrixGame: TFormMatrixGame |
| 295 | 295 | Left = 10 |
| 296 | 296 | Height = 15 |
| 297 | 297 | Top = 120 |
| 298 | - Width = 128 | |
| 298 | + Width = 168 | |
| 299 | 299 | Caption = 'Entrelaçamentos:' |
| 300 | 300 | ParentColor = False |
| 301 | 301 | end |
| 302 | 302 | object LabelExpCountInterlocks: TLabel |
| 303 | - Left = 158 | |
| 303 | + Left = 198 | |
| 304 | 304 | Height = 15 |
| 305 | 305 | Top = 120 |
| 306 | 306 | Width = 16 |
| 307 | 307 | Caption = 'NA' |
| 308 | 308 | ParentColor = False |
| 309 | 309 | end |
| 310 | - object ButtonExpStart: TButton | |
| 310 | + object LabelExpTInterlocks: TLabel | |
| 311 | 311 | Left = 10 |
| 312 | - Height = 25 | |
| 313 | - Top = 145 | |
| 314 | - Width = 128 | |
| 315 | - Caption = 'Começar' | |
| 316 | - OnClick = ButtonExpStartClick | |
| 317 | - TabOrder = 0 | |
| 318 | - end | |
| 319 | - object LabelUnseen1: TLabel | |
| 320 | - Left = 158 | |
| 321 | - Height = 25 | |
| 312 | + Height = 15 | |
| 322 | 313 | Top = 145 |
| 323 | - Width = 16 | |
| 324 | - ParentColor = False | |
| 325 | - end | |
| 326 | - object ButtonExpPause: TButton | |
| 327 | - Left = 10 | |
| 328 | - Height = 25 | |
| 329 | - Top = 180 | |
| 330 | - Width = 128 | |
| 331 | - Caption = 'Pausar' | |
| 332 | - Enabled = False | |
| 333 | - OnClick = ButtonExpPauseClick | |
| 334 | - TabOrder = 1 | |
| 335 | - end | |
| 336 | - object LabelUnseen2: TLabel | |
| 337 | - Left = 158 | |
| 338 | - Height = 25 | |
| 339 | - Top = 180 | |
| 340 | - Width = 16 | |
| 314 | + Width = 168 | |
| 315 | + Caption = 'Entrelaçamentos Alvo:' | |
| 341 | 316 | ParentColor = False |
| 342 | 317 | end |
| 343 | - object ButtonExpCancel: TButton | |
| 344 | - Left = 10 | |
| 345 | - Height = 25 | |
| 346 | - Top = 215 | |
| 347 | - Width = 128 | |
| 348 | - Caption = 'Cancelar' | |
| 349 | - Enabled = False | |
| 350 | - OnClick = ButtonExpCancelClick | |
| 351 | - TabOrder = 2 | |
| 352 | - end | |
| 353 | - object LabelUnseen3: TLabel | |
| 354 | - Left = 158 | |
| 355 | - Height = 25 | |
| 356 | - Top = 215 | |
| 318 | + object LabelExpCountTInterlocks: TLabel | |
| 319 | + Left = 198 | |
| 320 | + Height = 15 | |
| 321 | + Top = 145 | |
| 357 | 322 | Width = 16 |
| 323 | + Caption = 'NA' | |
| 358 | 324 | ParentColor = False |
| 359 | 325 | end |
| 360 | 326 | end |
| 327 | + object ButtonExpStart: TButton | |
| 328 | + Left = 16 | |
| 329 | + Height = 25 | |
| 330 | + Top = 16 | |
| 331 | + Width = 128 | |
| 332 | + Caption = 'Começar' | |
| 333 | + OnClick = ButtonExpStartClick | |
| 334 | + TabOrder = 1 | |
| 335 | + end | |
| 336 | + object ButtonExpPause: TButton | |
| 337 | + Left = 168 | |
| 338 | + Height = 25 | |
| 339 | + Top = 16 | |
| 340 | + Width = 128 | |
| 341 | + Caption = 'Pausar' | |
| 342 | + Enabled = False | |
| 343 | + OnClick = ButtonExpPauseClick | |
| 344 | + TabOrder = 2 | |
| 345 | + end | |
| 346 | + object ButtonExpCancel: TButton | |
| 347 | + Left = 320 | |
| 348 | + Height = 25 | |
| 349 | + Top = 16 | |
| 350 | + Width = 128 | |
| 351 | + Caption = 'Cancelar' | |
| 352 | + Enabled = False | |
| 353 | + OnClick = ButtonExpCancelClick | |
| 354 | + TabOrder = 3 | |
| 355 | + end | |
| 361 | 356 | end |
| 362 | 357 | object btnConfirmRow: TButton |
| 363 | 358 | Left = 712 |
| 364 | 359 | Height = 26 |
| 365 | - Top = 319 | |
| 360 | + Top = 152 | |
| 366 | 361 | Width = 86 |
| 367 | 362 | Caption = 'Confirmar' |
| 368 | 363 | OnClick = btnConfirmRowClick | ... | ... |
form_matrixgame.pas
| ... | ... | @@ -28,23 +28,22 @@ type |
| 28 | 28 | |
| 29 | 29 | TFormMatrixGame = class(TForm) |
| 30 | 30 | btnConfirmRow: TButton; |
| 31 | - ButtonExpStart: TButton; | |
| 32 | - ButtonExpPause: TButton; | |
| 33 | 31 | ButtonExpCancel: TButton; |
| 32 | + ButtonExpPause: TButton; | |
| 33 | + ButtonExpStart: TButton; | |
| 34 | 34 | GBIndividual: TGroupBox; |
| 35 | 35 | GBLastChoice: TGroupBox; |
| 36 | 36 | GBIndividualAB: TGroupBox; |
| 37 | 37 | GBGrupo: TGroupBox; |
| 38 | 38 | GBAdmin: TGroupBox; |
| 39 | 39 | GBExperiment: TGroupBox; |
| 40 | - LabelUnseen1: TLabel; | |
| 41 | - LabelUnseen2: TLabel; | |
| 42 | - LabelUnseen3: TLabel; | |
| 43 | 40 | LabelExpCountCondition: TLabel; |
| 41 | + LabelExpCountTInterlocks: TLabel; | |
| 44 | 42 | LabelExpGen: TLabel; |
| 45 | 43 | LabelExpCountGeneration: TLabel; |
| 46 | 44 | LabelExpCycle: TLabel; |
| 47 | 45 | LabelExpCountCycle: TLabel; |
| 46 | + LabelExpTInterlocks: TLabel; | |
| 48 | 47 | LabelExpTurn: TLabel; |
| 49 | 48 | LabelExpCountTurn: TLabel; |
| 50 | 49 | LabelExpInterlocks: TLabel; |
| ... | ... | @@ -222,6 +221,8 @@ procedure TFormMatrixGame.SetGameActor(AValue: TGameActor); |
| 222 | 221 | procedure SetZMQAdmin; |
| 223 | 222 | begin |
| 224 | 223 | FGameControl := TGameControl.Create(TZMQAdmin.Create(Self,FID),ExtractFilePath(Application.ExeName)); |
| 224 | + GBIndividual.Visible:=False; | |
| 225 | + GBIndividualAB.Visible:=False; | |
| 225 | 226 | GBAdmin.Visible:= True; |
| 226 | 227 | end; |
| 227 | 228 | ... | ... |
| ... | ... | @@ -0,0 +1,135 @@ |
| 1 | +unit presentation_classes; | |
| 2 | + | |
| 3 | +{$mode objfpc}{$H+} | |
| 4 | + | |
| 5 | +interface | |
| 6 | + | |
| 7 | +uses | |
| 8 | + Classes, SysUtils, ExtCtrls; | |
| 9 | + | |
| 10 | +type | |
| 11 | + | |
| 12 | + { TAnnouncerStartEvent } | |
| 13 | + | |
| 14 | + TAnnouncerStartEvent = procedure (AMessage : array of UTF8String) of object; | |
| 15 | + | |
| 16 | + { TAnnoucerMessages } | |
| 17 | + | |
| 18 | + TAnnoucerMessages = array of array of UTF8String; | |
| 19 | + | |
| 20 | + { TIntervalarAnnouncer } | |
| 21 | + | |
| 22 | + TIntervalarAnnouncer = class(TComponent) | |
| 23 | + private | |
| 24 | + FMessages: TAnnoucerMessages; | |
| 25 | + FTimer : TTimer; | |
| 26 | + FOnStart: TAnnouncerStartEvent; | |
| 27 | + function GetEnabled: Boolean; | |
| 28 | + function GetInterval: integer; | |
| 29 | + procedure NextMessage; | |
| 30 | + procedure SetEnabled(AValue: Boolean); | |
| 31 | + procedure SelfDestroy(Sender: TObject); | |
| 32 | + procedure SetInterval(AValue: integer); | |
| 33 | + procedure StartTimer(Sender:TObject); | |
| 34 | + public | |
| 35 | + constructor Create(AOwner : TComponent); override; | |
| 36 | + procedure Append(M : array of UTF8String); | |
| 37 | + procedure Reversed; | |
| 38 | + property Messages : TAnnoucerMessages read FMessages write FMessages; | |
| 39 | + property OnStart : TAnnouncerStartEvent read FOnStart write FOnStart; | |
| 40 | + property Interval : integer read GetInterval write SetInterval; | |
| 41 | + property Enabled : Boolean read GetEnabled write SetEnabled; | |
| 42 | + end; | |
| 43 | + | |
| 44 | +implementation | |
| 45 | + | |
| 46 | +{ TIntervalarAnnouncer } | |
| 47 | + | |
| 48 | +procedure TIntervalarAnnouncer.SetEnabled(AValue: Boolean); | |
| 49 | +begin | |
| 50 | + if FTimer.Enabled=AValue then Exit; | |
| 51 | + FTimer.Enabled:= AValue; | |
| 52 | +end; | |
| 53 | + | |
| 54 | +function TIntervalarAnnouncer.GetEnabled: Boolean; | |
| 55 | +begin | |
| 56 | + Result := FTimer.Enabled; | |
| 57 | +end; | |
| 58 | + | |
| 59 | +function TIntervalarAnnouncer.GetInterval: integer; | |
| 60 | +begin | |
| 61 | + Result := FTimer.Interval; | |
| 62 | +end; | |
| 63 | + | |
| 64 | +procedure TIntervalarAnnouncer.NextMessage; | |
| 65 | +begin | |
| 66 | + SetLength(FMessages,Length(FMessages)-1); | |
| 67 | +end; | |
| 68 | + | |
| 69 | +procedure TIntervalarAnnouncer.SelfDestroy(Sender : TObject); | |
| 70 | +var LAnnouncer : TIntervalarAnnouncer; | |
| 71 | +begin | |
| 72 | + if Length(FMessages) > 0 then | |
| 73 | + begin | |
| 74 | + LAnnouncer := TIntervalarAnnouncer.Create(nil); | |
| 75 | + LAnnouncer.Messages := FMessages; | |
| 76 | + LAnnouncer.OnStart:= FOnStart; | |
| 77 | + LAnnouncer.Enabled:=True; | |
| 78 | + end; | |
| 79 | + Free; | |
| 80 | +end; | |
| 81 | + | |
| 82 | +procedure TIntervalarAnnouncer.SetInterval(AValue: integer); | |
| 83 | +begin | |
| 84 | + if FTimer.Interval=AValue then Exit; | |
| 85 | + FTimer.Interval:= AValue; | |
| 86 | +end; | |
| 87 | + | |
| 88 | +procedure TIntervalarAnnouncer.StartTimer(Sender: TObject); | |
| 89 | +var M : array of UTF8String; | |
| 90 | +begin | |
| 91 | + M := FMessages[High(FMessages)]; | |
| 92 | + NextMessage; | |
| 93 | + if Assigned(FOnStart) then FOnStart(M); | |
| 94 | +end; | |
| 95 | + | |
| 96 | +constructor TIntervalarAnnouncer.Create(AOwner: TComponent); | |
| 97 | +begin | |
| 98 | + inherited Create(AOwner); | |
| 99 | + FTimer := TTimer.Create(Self); | |
| 100 | + FTimer.Enabled := False; | |
| 101 | + FTimer.Interval := 5000; | |
| 102 | + FTimer.OnTimer:=@SelfDestroy; | |
| 103 | + //FTimer.OnStopTimer:=@SelfDestroy; | |
| 104 | + FTimer.OnStartTimer:=@StartTimer; | |
| 105 | +end; | |
| 106 | + | |
| 107 | +procedure TIntervalarAnnouncer.Append(M: array of UTF8String); | |
| 108 | +var | |
| 109 | + H : TAnnoucerMessages; | |
| 110 | + i: Integer; | |
| 111 | +begin | |
| 112 | + SetLength(H,1,Length(M)); | |
| 113 | + | |
| 114 | + for i := Low(M) to High(M) do | |
| 115 | + H[0,i] := M[i]; | |
| 116 | + | |
| 117 | + SetLength(FMessages,Length(FMessages)+1); | |
| 118 | + FMessages[High(FMessages)] := H[0]; | |
| 119 | +end; | |
| 120 | + | |
| 121 | +procedure TIntervalarAnnouncer.Reversed; | |
| 122 | +var | |
| 123 | + i : integer; | |
| 124 | + M : TAnnoucerMessages; | |
| 125 | +begin | |
| 126 | + for i := High(FMessages) downto Low(FMessages) do | |
| 127 | + begin | |
| 128 | + SetLength(M,Length(M)+1); | |
| 129 | + M[High(M)] := FMessages[i] | |
| 130 | + end; | |
| 131 | + FMessages := M; | |
| 132 | +end; | |
| 133 | + | |
| 134 | +end. | |
| 135 | + | ... | ... |
units/game_actors.pas
| ... | ... | @@ -15,7 +15,7 @@ interface |
| 15 | 15 | |
| 16 | 16 | uses |
| 17 | 17 | Classes, SysUtils, Forms,PopupNotifier, ExtCtrls |
| 18 | - , game_actors_point | |
| 18 | + , game_actors_point, game_visual_elements | |
| 19 | 19 | ; |
| 20 | 20 | type |
| 21 | 21 | |
| ... | ... | @@ -42,7 +42,7 @@ type |
| 42 | 42 | //TGameOperator = (goNONE, goAND, goOR); |
| 43 | 43 | TGameStyle = (gtNone, gtRowsOnly, gtColorsOnly, gtRowsAndColors, gtRowsOrColors); |
| 44 | 44 | |
| 45 | - TGameConsequenceStyle = (gscNone, gscMessage, gscBroadcastMessage, gscPoints, gscVariablePoints, gscA, gscB,gscG); | |
| 45 | + TGameConsequenceStyle = (gscNone, gscMessage, gscBroadcastMessage, gscPoints, gscVariablePoints, gscA, gscB,gscG,gscI); | |
| 46 | 46 | TConsequenceStyle = set of TGameConsequenceStyle; |
| 47 | 47 | |
| 48 | 48 | TGamePromptStyle = (gsYes, gsNo, gsAll, gsMetacontingency, gsContingency, gsBasA, gsRevertPoints); |
| ... | ... | @@ -109,6 +109,7 @@ type |
| 109 | 109 | procedure Clean; virtual; |
| 110 | 110 | procedure PresentMessage; |
| 111 | 111 | procedure PresentPoints; |
| 112 | + procedure PresentPoints(APlayerBox : TPlayerBox); overload; | |
| 112 | 113 | property ShouldPublishMessage : Boolean read GetShouldPublishMessage; |
| 113 | 114 | property PlayerNicname : string read FNicname write FNicname; |
| 114 | 115 | property AppendiceSingular : string read FAppendiceSingular; |
| ... | ... | @@ -127,6 +128,7 @@ type |
| 127 | 128 | FCriteria : TCriteria; |
| 128 | 129 | FName: string; |
| 129 | 130 | FOnCriteria: TNotifyEvent; |
| 131 | + FOnTargetCriteria : TNotifyEvent; | |
| 130 | 132 | function RowMod(R:TGameRow):TGameRow; |
| 131 | 133 | procedure CriteriaEvent; |
| 132 | 134 | public |
| ... | ... | @@ -137,6 +139,7 @@ type |
| 137 | 139 | function ConsequenceFromPlayerID(AID:string):string; |
| 138 | 140 | procedure Clean; |
| 139 | 141 | property OnCriteria : TNotifyEvent read FOnCriteria write FOncriteria; |
| 142 | + property OnTargetCriteria : TNotifyEvent read FOnTargetCriteria write FOnTargetCriteria; | |
| 140 | 143 | property Fired : Boolean read FFired; |
| 141 | 144 | property Consequence : TConsequence read FConsequence; |
| 142 | 145 | property Criteria : TCriteria read FCriteria; |
| ... | ... | @@ -184,10 +187,10 @@ type |
| 184 | 187 | TCondition = record |
| 185 | 188 | ConditionName : string; |
| 186 | 189 | Contingencies : TContingencies; // for producing points during the condition |
| 187 | - Interlocks : record | |
| 188 | - Count : integer; // culturant, | |
| 189 | - History: array of Boolean; // to calculate interlock porcentage in the last cycles. sync with OnCycles | |
| 190 | - end; | |
| 190 | + //Interlocks : record | |
| 191 | + // Count : integer; // culturant, | |
| 192 | + // History: array of Boolean; // to calculate interlock porcentage in the last cycles. sync with OnCycles | |
| 193 | + //end; | |
| 191 | 194 | |
| 192 | 195 | Points : record |
| 193 | 196 | Count : TPoints; // sum of points produced during the condition |
| ... | ... | @@ -235,6 +238,7 @@ procedure TContingency.CriteriaEvent; |
| 235 | 238 | begin |
| 236 | 239 | FFired:=True; |
| 237 | 240 | if Assigned(FOnCriteria) then FOnCriteria(Self); |
| 241 | + if Assigned(FOnTargetCriteria) then FOnTargetCriteria(Self); | |
| 238 | 242 | end; |
| 239 | 243 | |
| 240 | 244 | constructor TContingency.Create(AOwner:TComponent;AConsequence:TConsequence;ACriteria:TCriteria;IsMeta:Boolean); |
| ... | ... | @@ -646,6 +650,9 @@ end; |
| 646 | 650 | procedure TConsequence.PresentPoints; |
| 647 | 651 | begin |
| 648 | 652 | //is gscPoints in FStyle then just in case... |
| 653 | + if gscI in FStyle then | |
| 654 | + FormMatrixGame.LabelIndACount.Caption := IntToStr(StrToInt(FormMatrixGame.LabelIndACount.Caption) + FP.ResultAsInteger); | |
| 655 | + | |
| 649 | 656 | if gscA in FStyle then |
| 650 | 657 | FormMatrixGame.LabelIndACount.Caption := IntToStr(StrToInt(FormMatrixGame.LabelIndACount.Caption) + FP.ResultAsInteger); |
| 651 | 658 | |
| ... | ... | @@ -656,6 +663,14 @@ begin |
| 656 | 663 | FormMatrixGame.LabelGroupCount.Caption:= IntToStr(StrToInt(FormMatrixGame.LabelGroupCount.Caption) + FP.ResultAsInteger); |
| 657 | 664 | end; |
| 658 | 665 | |
| 666 | +procedure TConsequence.PresentPoints(APlayerBox: TPlayerBox); | |
| 667 | +begin | |
| 668 | + if gscG in FStyle then | |
| 669 | + FormMatrixGame.LabelGroupCount.Caption:= IntToStr(StrToInt(FormMatrixGame.LabelGroupCount.Caption) + FP.ResultAsInteger) | |
| 670 | + else | |
| 671 | + APlayerBox.LabelPointsCount.Caption := IntToStr(StrToInt(APlayerBox.LabelPointsCount.Caption) + FP.ResultAsInteger); | |
| 672 | +end; | |
| 673 | + | |
| 659 | 674 | function TConsequence.GetShouldPublishMessage: Boolean; // for players only |
| 660 | 675 | begin |
| 661 | 676 | Result := gscBroadcastMessage in FStyle; | ... | ... |
units/game_experiment.pas
| ... | ... | @@ -85,6 +85,7 @@ type |
| 85 | 85 | procedure SetResearcherCanPlay(AValue: Boolean); |
| 86 | 86 | procedure SetSendChatHistoryForNewPlayers(AValue: Boolean); |
| 87 | 87 | procedure SetState(AValue: TExperimentState); |
| 88 | + procedure SetTargetInterlocking; | |
| 88 | 89 | private |
| 89 | 90 | FABPoints: Boolean; |
| 90 | 91 | FChangeGeneration: string; |
| ... | ... | @@ -95,9 +96,11 @@ type |
| 95 | 96 | FOnEndCycle: TNotifyEvent; |
| 96 | 97 | FOnEndExperiment: TNotifyEvent; |
| 97 | 98 | FOnEndGeneration: TNotifyEvent; |
| 99 | + FOnTargetInterlocking: TNotifyEvent; | |
| 98 | 100 | procedure Consequence(Sender : TObject); |
| 99 | 101 | function GetPlayerToKick: string; |
| 100 | 102 | procedure Interlocking(Sender : TObject); |
| 103 | + procedure TargetInterlocking(Sender : TObject); | |
| 101 | 104 | procedure SetPlayersQueue(AValue: string); |
| 102 | 105 | procedure WriteReportHeader; |
| 103 | 106 | procedure WriteReportRowNames; |
| ... | ... | @@ -136,6 +139,7 @@ type |
| 136 | 139 | property CurrentCondition : integer read FCurrentCondition write FCurrentCondition; |
| 137 | 140 | property Contingency[C, I : integer] : TContingency read GetContingency write SetContingency; |
| 138 | 141 | property ContingenciesCount[C:integer]:integer read GetContingenciesCount; |
| 142 | + property Cycles : integer read GetCurrentAbsoluteCycle; | |
| 139 | 143 | property Player[I : integer] : TPlayer read GetPlayer write SetPlayer; |
| 140 | 144 | property PlayerFromID[S : UTF8string ] : TPlayer read GetPlayer write SetPlayer; |
| 141 | 145 | property PlayersCount : integer read GetPlayersCount; |
| ... | ... | @@ -161,6 +165,7 @@ type |
| 161 | 165 | property OnEndExperiment : TNotifyEvent read FOnEndExperiment write SetOnEndExperiment; |
| 162 | 166 | property OnConsequence : TNotifyEvent read FOnConsequence write SetOnConsequence; |
| 163 | 167 | property OnInterlocking : TNotifyEvent read FOnInterlocking write SetOnInterlocking; |
| 168 | + property OnTargetInterlocking : TNotifyEvent read FOnTargetInterlocking write FOnTargetInterlocking; | |
| 164 | 169 | end; |
| 165 | 170 | |
| 166 | 171 | resourcestring |
| ... | ... | @@ -246,7 +251,7 @@ var |
| 246 | 251 | begin |
| 247 | 252 | if Assigned(FOnEndCondition) then FOnEndCondition(Self); |
| 248 | 253 | Inc(FCurrentCondition); |
| 249 | - if FCurrentCondition = ConditionsCount-1 then | |
| 254 | + if FCurrentCondition = ConditionsCount then | |
| 250 | 255 | begin |
| 251 | 256 | EndExperiment; |
| 252 | 257 | Exit; |
| ... | ... | @@ -264,13 +269,13 @@ begin |
| 264 | 269 | case FConditions[CurrentCondition].EndCriterium.Style of |
| 265 | 270 | gecWhichComeFirst: |
| 266 | 271 | begin |
| 267 | - if (GetCurrentAbsoluteCycle = FConditions[CurrentCondition].EndCriterium.AbsoluteCycles) or | |
| 272 | + if (GetCurrentAbsoluteCycle = FConditions[CurrentCondition].EndCriterium.AbsoluteCycles-1) or | |
| 268 | 273 | (LInterlocks >= FConditions[CurrentCondition].EndCriterium.InterlockingPorcentage) then |
| 269 | 274 | EndCondition; |
| 270 | 275 | |
| 271 | 276 | end; |
| 272 | 277 | gecAbsoluteCycles: |
| 273 | - if GetCurrentAbsoluteCycle = FConditions[CurrentCondition].EndCriterium.AbsoluteCycles then | |
| 278 | + if GetCurrentAbsoluteCycle = FConditions[CurrentCondition].EndCriterium.AbsoluteCycles-1 then | |
| 274 | 279 | EndCondition; |
| 275 | 280 | |
| 276 | 281 | gecInterlockingPorcentage: |
| ... | ... | @@ -288,6 +293,9 @@ var c:integer; |
| 288 | 293 | begin |
| 289 | 294 | c := CurrentCondition; |
| 290 | 295 | Result := (Condition[c].Cycles.Value*Condition[c].Cycles.Generation)+Condition[c].Cycles.Count; |
| 296 | + {$IFDEF DEBUG} | |
| 297 | + WriteLn('TExperiment.GetCurrentAbsoluteCycle:',Result); | |
| 298 | + {$ENDIF} | |
| 291 | 299 | end; |
| 292 | 300 | |
| 293 | 301 | function TExperiment.GetPlayer(I : integer): TPlayer; |
| ... | ... | @@ -382,6 +390,9 @@ begin |
| 382 | 390 | // return result in porcentage |
| 383 | 391 | Result := (i*100)/LContingencyResults.Count; |
| 384 | 392 | end; |
| 393 | + {$IFDEF DEBUG} | |
| 394 | + WriteLn('TExperiment.GetInterlockingPorcentageInLastCycles:',Result); | |
| 395 | + {$ENDIF} | |
| 385 | 396 | end; |
| 386 | 397 | |
| 387 | 398 | function TExperiment.GetConsequenceStringFromChoice(P: TPlayer): Utf8string; |
| ... | ... | @@ -542,14 +553,25 @@ begin |
| 542 | 553 | FState:=AValue; |
| 543 | 554 | end; |
| 544 | 555 | |
| 556 | +procedure TExperiment.SetTargetInterlocking; | |
| 557 | +var i : integer; | |
| 558 | +begin | |
| 559 | + for i:= 0 to ContingenciesCount[CurrentCondition] do | |
| 560 | + if Condition[CurrentCondition].Contingencies[i].Meta then | |
| 561 | + begin | |
| 562 | + Condition[CurrentCondition].Contingencies[i].OnTargetCriteria:=@TargetInterlocking; | |
| 563 | + Break; | |
| 564 | + end; | |
| 565 | +end; | |
| 566 | + | |
| 545 | 567 | procedure TExperiment.Consequence(Sender: TObject); |
| 546 | 568 | begin |
| 547 | 569 | if Assigned(FOnConsequence) then FOnConsequence(Sender); |
| 548 | 570 | end; |
| 549 | 571 | |
| 550 | -procedure TExperiment.Interlocking(Sender: TObject); | |
| 572 | +procedure TExperiment.TargetInterlocking(Sender: TObject); | |
| 551 | 573 | begin |
| 552 | - if Assigned(FOnInterlocking) then FOnInterlocking(Sender); | |
| 574 | + if Assigned(FOnTargetInterlocking) then FOnTargetInterlocking(Sender); | |
| 553 | 575 | end; |
| 554 | 576 | |
| 555 | 577 | procedure TExperiment.SetPlayersQueue(AValue: string); |
| ... | ... | @@ -573,6 +595,11 @@ begin |
| 573 | 595 | Result := FPlayers[0].ID; |
| 574 | 596 | end; |
| 575 | 597 | |
| 598 | +procedure TExperiment.Interlocking(Sender: TObject); | |
| 599 | +begin | |
| 600 | + if Assigned(FOnInterlocking) then FOnInterlocking(Sender); | |
| 601 | +end; | |
| 602 | + | |
| 576 | 603 | |
| 577 | 604 | procedure TExperiment.WriteReportHeader; |
| 578 | 605 | var |
| ... | ... | @@ -715,10 +742,15 @@ begin |
| 715 | 742 | end; |
| 716 | 743 | |
| 717 | 744 | constructor TExperiment.Create(AOwner: TComponent;AppPath:string); |
| 745 | +var i : integer; | |
| 718 | 746 | begin |
| 719 | 747 | inherited Create(AOwner); |
| 720 | 748 | FTurnsRandom := TStringList.Create; |
| 721 | 749 | LoadExperimentFromResource(Self); |
| 750 | + | |
| 751 | + // TODO: Allow custom target interlocking. Now just taking the first meta, as usual in the lab. | |
| 752 | + SetTargetInterlocking; | |
| 753 | + | |
| 722 | 754 | CheckNeedForRandomTurns; |
| 723 | 755 | |
| 724 | 756 | FReportReader := TReportReader.Create; | ... | ... |
units/game_resources.pas
| ... | ... | @@ -216,10 +216,10 @@ const |
| 216 | 216 | ( |
| 217 | 217 | ConditionName : ''; |
| 218 | 218 | Contingencies : nil; |
| 219 | - Interlocks : ( | |
| 220 | - Count : 0; | |
| 221 | - History : nil; | |
| 222 | - ); | |
| 219 | + //Interlocks : ( | |
| 220 | + // Count : 0; | |
| 221 | + // History : nil; | |
| 222 | + //); | |
| 223 | 223 | |
| 224 | 224 | Points : ( |
| 225 | 225 | Count : ( A:0; B:0; G:0; ); | ... | ... |
units/game_visual_elements.pas
| ... | ... | @@ -25,16 +25,19 @@ type |
| 25 | 25 | PanelLastColor : TPanel; |
| 26 | 26 | LabelLastRow : TLabel; |
| 27 | 27 | LabelLastRowCount : TLabel; |
| 28 | + LabelPoints : TLabel; | |
| 29 | + LabelPointsCount : TLabel; | |
| 28 | 30 | private |
| 29 | 31 | FID: string; |
| 30 | 32 | public |
| 31 | - constructor Create(AOwner: TComponent;AID:string); reintroduce; | |
| 33 | + constructor Create(AOwner: TComponent;AID:string;Admin:Boolean=False); reintroduce; | |
| 32 | 34 | property ID : string read FID write FID; |
| 33 | 35 | end; |
| 34 | 36 | |
| 35 | 37 | resourcestring |
| 36 | 38 | CAP_ROW = 'Linha:'; |
| 37 | 39 | CAP_COLOR = 'Cor:'; |
| 40 | + CAP_POINTS = 'Pontos:'; | |
| 38 | 41 | CAP_NA = 'NA'; |
| 39 | 42 | CAP_WAINTING_FOR_PLAYER = 'Esperando Jogador...'; |
| 40 | 43 | |
| ... | ... | @@ -42,7 +45,7 @@ implementation |
| 42 | 45 | |
| 43 | 46 | { TPlayerBox } |
| 44 | 47 | |
| 45 | -constructor TPlayerBox.Create(AOwner: TComponent; AID: string); | |
| 48 | +constructor TPlayerBox.Create(AOwner: TComponent; AID: string; Admin: Boolean); | |
| 46 | 49 | begin |
| 47 | 50 | inherited Create(AOwner); |
| 48 | 51 | FID := AID; |
| ... | ... | @@ -74,6 +77,17 @@ begin |
| 74 | 77 | LabelLastRowCount.Caption:=CAP_NA; |
| 75 | 78 | LabelLastRowCount.Parent := Self; |
| 76 | 79 | Enabled:= False; |
| 80 | + | |
| 81 | + if Admin then | |
| 82 | + begin | |
| 83 | + LabelPoints:= TLabel.Create(Self); | |
| 84 | + LabelPoints.Caption:=CAP_POINTS; | |
| 85 | + LabelPoints.Parent := Self; | |
| 86 | + | |
| 87 | + LabelPointsCount:= TLabel.Create(Self); | |
| 88 | + LabelPointsCount.Caption:='0'; | |
| 89 | + LabelPointsCount.Parent := Self; | |
| 90 | + end; | |
| 77 | 91 | //LabelLastRow.AutoSize := False; |
| 78 | 92 | end; |
| 79 | 93 | ... | ... |
units/game_zmq_actors.pas
units/string_methods.pas
| ... | ... | @@ -234,6 +234,10 @@ begin |
| 234 | 234 | 'MENSAGEM A TODOS' : Result:= gscBroadcastMessage; |
| 235 | 235 | 'PONTOS' : Result:= gscPoints; |
| 236 | 236 | 'PONTOS COM VARIAÇÃO' : Result:= gscVariablePoints; |
| 237 | + 'PONTOS A' : Result:= gscA; | |
| 238 | + 'PONTOS B' : Result:= gscB; | |
| 239 | + 'PONTOS G' : Result:= gscG; | |
| 240 | + 'PONTOS I' : Result:= gscI; | |
| 237 | 241 | end; |
| 238 | 242 | end; |
| 239 | 243 | |
| ... | ... | @@ -245,6 +249,10 @@ begin |
| 245 | 249 | gscBroadcastMessage : Result:= 'MENSAGEM A TODOS'; |
| 246 | 250 | gscPoints : Result:= 'PONTOS' ; |
| 247 | 251 | gscVariablePoints : Result:= 'PONTOS COM VARIAÇÃO'; |
| 252 | + gscA : Result:= 'PONTOS A'; | |
| 253 | + gscB : Result:= 'PONTOS B'; | |
| 254 | + gscG : Result:= 'PONTOS G'; | |
| 255 | + gscI : Result:= 'PONTOS I'; | |
| 248 | 256 | end; |
| 249 | 257 | end; |
| 250 | 258 | |
| ... | ... | @@ -358,6 +366,7 @@ begin |
| 358 | 366 | gscA:Result += 'A'; |
| 359 | 367 | gscB:Result += 'B'; |
| 360 | 368 | gscG:Result += 'G'; |
| 369 | + gscI:Result += 'I'; | |
| 361 | 370 | end; |
| 362 | 371 | Result += ','; |
| 363 | 372 | end; | ... | ... |