Changeset 671
- Timestamp:
- Jul 16, 2025, 11:09:53 AM (13 hours ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LocalPlayer/Select.pas
r670 r671 17 17 kStealTech, kGov, kMission); 18 18 19 TLayer = (laImprovements, laWonders, laClasses); 19 TLayerIndex = (laImprovements, laWonders, laClasses); 20 21 { TLayer } 22 23 TLayer = class 24 Index: TLayerIndex; 25 Lines: Integer; 26 FirstShrinkedLine: Integer; 27 Code: array [0..4095] of Integer; 28 procedure SwapCode(I, J: Integer); 29 constructor Create(AIndex: TLayerIndex); 30 procedure AddCode(Value: Integer); 31 end; 20 32 21 33 { TListDlg } … … 58 70 ScienceNation: Integer; 59 71 ScrollBar: TPVScrollbar; 60 Lines: array [TLayer] of Integer; 61 FirstShrinkedLine: array [TLayer] of Integer; 62 Code: array [TLayer, 0 .. 4095] of Integer; 72 Layers: array [TLayerIndex] of TLayer; 63 73 Column: array [0 .. nPl - 1] of Integer; 64 74 Closable: Boolean; … … 108 118 MustChooseKind = [kTribe, kStealTech, kGov]; 109 119 120 { TLayer } 121 122 procedure TLayer.SwapCode(I, J: Integer); 123 var 124 Temp: Integer; 125 begin 126 Temp := Code[I]; 127 Code[I] := Code[J]; 128 Code[J] := Code[I]; 129 end; 130 131 constructor TLayer.Create(AIndex: TLayerIndex); 132 begin 133 Index := AIndex; 134 end; 135 136 procedure TLayer.AddCode(Value: Integer); 137 begin 138 Code[Lines] := Value; 139 Inc(Lines); 140 end; 141 110 142 procedure TListDlg.FormCreate(Sender: TObject); 111 143 begin 112 144 inherited; 145 Layers[laImprovements] := TLayer.Create(laImprovements); 146 Layers[laWonders] := TLayer.Create(laWonders); 147 Layers[laClasses] := TLayer.Create(laClasses); 113 148 Canvas.Font.Assign(UniFont[ftNormal]); 114 149 ScrollBar := TPVScrollbar.Create(Self); … … 130 165 FreeAndNil(ScrollBar); 131 166 FreeAndNil(ScienceNationDotBuffer); 167 FreeAndNil(Layers[laImprovements]); 168 FreeAndNil(Layers[laWonders]); 169 FreeAndNil(Layers[laClasses]); 132 170 end; 133 171 … … 245 283 CanGrow: Boolean; 246 284 begin 247 lix := Code[Layer,ScrollBar.Position + L];285 lix := Layer.Code[ScrollBar.Position + L]; 248 286 y0 := 2 + (L + 1) * LineDistance; 249 if ScrollBar.Position + L >= FirstShrinkedLine[Layer]then250 ofs := (ScrollBar.Position + L - FirstShrinkedLine[Layer]) and 1 * 33287 if ScrollBar.Position + L >= Layer.FirstShrinkedLine then 288 ofs := (ScrollBar.Position + L - Layer.FirstShrinkedLine) and 1 * 33 251 289 else { if FirstShrinkedLine[Layer] < Lines[Layer] then } 252 290 ofs := 33; … … 480 518 begin 481 519 S := Tribe[mox.Owner].ModelName[mox.mix]; 482 if (Kind = kAllEModels) and ( Code[laWonders,ScrollBar.Position + L] = 0) then520 if (Kind = kAllEModels) and (Layers[laWonders].Code[ScrollBar.Position + L] = 0) then 483 521 S := Format(Tribe[mox.Owner].TPhrase('OWNED'), [S]); 484 522 end … … 692 730 case Kind of 693 731 kTribe, kMission: // center text 694 if L ines[laImprovements]> MaxLines then732 if Layers[laImprovements].Lines > MaxLines then 695 733 X := (InnerWidth - GetSystemMetrics(SM_CXVSCROLL)) div 2 - 696 734 BiColorTextWidth(ca, S) div 2 … … 765 803 766 804 for I := -1 to DispLines do 767 if (I + ScrollBar.Position >= 0) and (I + ScrollBar.Position < L ines[Layer]) then805 if (I + ScrollBar.Position >= 0) and (I + ScrollBar.Position < Layer.Lines) then 768 806 Self.Line(Offscreen.Canvas, I, True, False); 769 807 end; … … 787 825 Selected := -2; 788 826 if (Selected < -1) or (Selected > DispLines) or (Selected + i0 < 0) or 789 (Selected + i0 >= L ines[Layer]) then827 (Selected + i0 >= Layer.Lines) then 790 828 Selected := -2; 791 829 if Selected <> Sel0 then begin … … 914 952 begin 915 953 if ScrollBar.Position + Selected >= 0 then 916 lix := Code[Layer,ScrollBar.Position + Selected];954 lix := Layer.Code[ScrollBar.Position + Selected]; 917 955 if Kind in [kScience, kCities, kCityEvents, kModels, kEModels, kAllEModels] 918 956 then … … 941 979 kEModels: 942 980 MainScreen.UnitStatDlg.ShowNewContent_EnemyModel(wmPersistent, 943 Code[laWonders,ScrollBar.Position + Selected]);981 Layers[laWonders].Code[ScrollBar.Position + Selected]); 944 982 kAllEModels, kChooseEModel: 945 983 if lix <> mixAll then … … 995 1033 then 996 1034 begin 997 Code[Layer, Lines[Layer]] := Project;998 Inc(L ines[Layer]);1035 Layer.Code[Layer.Lines] := Project; 1036 Inc(Layer.Lines); 999 1037 end; 1000 1038 end; … … 1002 1040 procedure SortTechs; 1003 1041 var 1004 I, J , Swap: Integer;1042 I, J: Integer; 1005 1043 begin // sort by advancedness 1006 for I := 0 to Lines[laImprovements] - 2 do 1007 if Code[laImprovements, I] < adMilitary then 1008 for J := I + 1 to Lines[laImprovements] - 1 do 1009 if AdvValue[Code[laImprovements, I]] * nAdv + Code[laImprovements, I] < AdvValue[Code[laImprovements, J]] * 1010 nAdv + Code[laImprovements, J] then 1011 begin 1012 Swap := Code[laImprovements, I]; 1013 Code[laImprovements, I] := Code[laImprovements, J]; 1014 Code[laImprovements, J] := Swap; 1044 for I := 0 to Layers[laImprovements].Lines - 2 do 1045 if Layers[laImprovements].Code[I] < adMilitary then 1046 for J := I + 1 to Layers[laImprovements].Lines - 1 do 1047 if AdvValue[Layers[laImprovements].Code[I]] * nAdv + Layers[laImprovements].Code[I] < AdvValue[Layers[laImprovements].Code[J]] * 1048 nAdv + Layers[laImprovements].Code[J] then 1049 begin 1050 Layers[laImprovements].SwapCode(I, J); 1015 1051 end; 1016 1052 end; … … 1018 1054 procedure SortCities; 1019 1055 var 1020 I, J , Swap: Integer;1021 begin 1022 for I := 0 to L ines[laImprovements]- 2 do1023 for J := I + 1 to L ines[laImprovements]- 1 do1024 if CityName(MyCity[ Code[laImprovements, I]].ID) > CityName(MyCity[Code[laImprovements,J]].ID)1056 I, J: Integer; 1057 begin 1058 for I := 0 to Layers[laImprovements].Lines - 2 do 1059 for J := I + 1 to Layers[laImprovements].Lines - 1 do 1060 if CityName(MyCity[Layers[laImprovements].Code[I]].ID) > CityName(MyCity[Layers[laImprovements].Code[J]].ID) 1025 1061 then 1026 begin 1027 Swap := Code[laImprovements, I]; 1028 Code[laImprovements, I] := Code[laImprovements, J]; 1029 Code[laImprovements, J] := Swap; 1030 end; 1062 Layers[laImprovements].SwapCode(I, J); 1031 1063 end; 1032 1064 … … 1043 1075 I, J, Swap: Integer; 1044 1076 begin // sort by code[2] 1045 for I := 0 to Lines[laImprovements] - 2 do 1046 for J := I + 1 to Lines[laImprovements] - 1 do 1047 if Code[laClasses, I] > Code[laClasses, J] then 1048 begin 1049 Swap := Code[laImprovements, I]; 1050 Code[laImprovements, I] := Code[laImprovements, J]; 1051 Code[laImprovements, J] := Swap; 1052 Swap := Code[laWonders, I]; 1053 Code[laWonders, I] := Code[laWonders, J]; 1054 Code[laWonders, J] := Swap; 1055 Swap := Code[laClasses, I]; 1056 Code[laClasses, I] := Code[laClasses, J]; 1057 Code[laClasses, J] := Swap; 1077 for I := 0 to Layers[laImprovements].Lines - 2 do 1078 for J := I + 1 to Layers[laImprovements].Lines - 1 do 1079 if Layers[laClasses].Code[I] > Layers[laClasses].Code[J] then 1080 begin 1081 Layers[laImprovements].SwapCode(I, J); 1082 Layers[laWonders].SwapCode(I, J); 1083 Layers[laClasses].SwapCode(I, J); 1058 1084 end; 1059 1085 end; … … 1072 1098 1073 1099 var 1074 L: TLayer ;1100 L: TLayerIndex; 1075 1101 Loc1, I, J, p1, dx, dy, mix, emix, EnemyType, TestEnemyType: Integer; 1076 1102 mi: TModelInfo; … … 1079 1105 Ok: Boolean; 1080 1106 begin 1081 for L := Low(TLayer) to High(TLayer) do 1082 begin 1083 Lines[L] := 0; 1084 FirstShrinkedLine[L] := MaxInt; 1085 end; 1107 for L := Low(TLayerIndex) to High(TLayerIndex) do 1108 begin 1109 Layers[L].Lines := 0; 1110 Layers[L].FirstShrinkedLine := MaxInt; 1111 end; 1112 1086 1113 case Kind of 1087 1114 kProject: 1088 1115 begin 1089 1116 // improvements 1090 Code[laImprovements, 0] := cpImp + imTrGoods; 1091 Lines[laImprovements] := 1; 1117 Layers[laImprovements].AddCode(cpImp + imTrGoods); 1092 1118 for I := nWonder to nImp - 1 do 1093 1119 if Imp[I].Kind = ikCommon then 1094 TryAddImpLine( laImprovements, I + cpImp);1120 TryAddImpLine(Layers[laImprovements], I + cpImp); 1095 1121 for I := nWonder to nImp - 1 do 1096 1122 if not (Imp[I].Kind in [ikCommon, ikTrGoods]) and 1097 1123 ((MyRO.NatBuilt[I] = 0) or (Imp[I].Kind = ikNatLocal)) then 1098 TryAddImpLine( laImprovements, I + cpImp);1124 TryAddImpLine(Layers[laImprovements], I + cpImp); 1099 1125 for I := 0 to nCityType - 1 do 1100 1126 if MyData.ImpOrder[I, 0] >= 0 then 1101 begin 1102 Code[laImprovements, Lines[laImprovements]] := cpType + I; 1103 Inc(Lines[laImprovements]); 1104 end; 1127 Layers[laImprovements].AddCode(cpType + I); 1105 1128 1106 1129 // wonders 1107 1130 for I := 0 to nWonder - 1 do 1108 TryAddImpLine( laWonders, I + cpImp);1131 TryAddImpLine(Layers[laWonders], I + cpImp); 1109 1132 1110 1133 // units … … 1135 1158 if MyModel[I].Status and msObsolete = 0 then 1136 1159 begin 1137 Code[laClasses, Lines[laClasses]] := I; 1138 Inc(Lines[laClasses]); 1160 Layers[laClasses].AddCode(I); 1139 1161 end; 1140 1162 if MyModel[I].Status and msAllowConscripts <> 0 then 1141 1163 begin 1142 Code[laClasses, Lines[laClasses]] := I + cpConscripts; 1143 Inc(Lines[laClasses]); 1164 Layers[laClasses].AddCode(I + cpConscripts); 1144 1165 end; 1145 1166 end; 1146 1167 end; 1147 FirstShrinkedLine[laClasses]:= 0;1168 Layers[laClasses].FirstShrinkedLine := 0; 1148 1169 end; 1149 1170 kAdvance: … … 1160 1181 ((MyData.FarTech = adNone) or (Required[I] > 0)) then 1161 1182 begin 1162 Code[laImprovements, Lines[laImprovements]] := I; 1163 Inc(Lines[laImprovements]); 1183 Layers[laImprovements].AddCode(I); 1164 1184 end; 1165 1185 SortTechs; 1166 if Lines[laImprovements] = 0 then // no more techs -- offer nexus 1167 begin 1168 Code[laImprovements, Lines[laImprovements]] := adNexus; 1169 Inc(Lines[laImprovements]); 1170 end; 1186 if Layers[laImprovements].Lines = 0 then // no more techs -- offer nexus 1187 Layers[laImprovements].AddCode(adNexus); 1171 1188 Ok := False; 1172 1189 for I := 0 to nDomains - 1 do … … 1177 1194 end; 1178 1195 if Ok then { new unit class } 1179 begin 1180 Code[laImprovements, Lines[laImprovements]] := adMilitary; 1181 Inc(Lines[laImprovements]); 1182 end; 1196 Layers[laImprovements].AddCode(adMilitary); 1183 1197 end; 1184 1198 kFarAdvance: 1185 1199 begin 1186 Code[laImprovements, Lines[laImprovements]] := adNone; 1187 Inc(Lines[laImprovements]); 1200 Layers[laImprovements].AddCode(adNone); 1188 1201 for I := 0 to nAdv - 1 do 1189 1202 if not (I in FutureTech) and (MyRO.Tech[I] < tsApplicable) and … … 1191 1204 ((AdvValue[I] < 1000) or (MyRO.Tech[adScience] > tsNA)) then 1192 1205 begin 1193 Code[laImprovements, Lines[laImprovements]] := I; 1194 Inc(Lines[laImprovements]); 1206 Layers[laImprovements].AddCode(I); 1195 1207 end; 1196 1208 SortTechs; … … 1202 1214 (MyRO.EnemyReport[DipMem[Me].pContact].Tech[I] < tsSeen) then 1203 1215 begin 1204 Code[laImprovements, Lines[laImprovements]] := I; 1205 Inc(Lines[laImprovements]); 1216 Layers[laImprovements].AddCode(I); 1206 1217 end; 1207 1218 SortTechs; 1208 // if Lines[0]>1 then 1209 begin 1210 Code[laImprovements, Lines[laImprovements]] := adAll; 1211 Inc(Lines[laImprovements]); 1219 // if Lines[0] > 1 then 1220 begin 1221 Layers[laImprovements].AddCode(adAll); 1212 1222 end; 1213 1223 end; … … 1218 1228 (MyRO.EnemyReport[DipMem[Me].pContact].Tech[I] >= tsApplicable) then 1219 1229 begin 1220 Code[laImprovements, Lines[laImprovements]] := I; 1221 Inc(Lines[laImprovements]); 1230 Layers[laImprovements].AddCode(I); 1222 1231 end; 1223 1232 SortTechs; 1224 1233 // if Lines[0] > 1 then 1225 1234 begin 1226 Code[laImprovements, Lines[laImprovements]] := adAll; 1227 Inc(Lines[laImprovements]); 1235 Layers[laImprovements].AddCode(adAll); 1228 1236 end; 1229 1237 end; … … 1233 1241 if Server(sStealTech - sExecute, Me, I, nil^) >= rExecuted then 1234 1242 begin 1235 Code[laImprovements, Lines[laImprovements]] := I; 1236 Inc(Lines[laImprovements]); 1243 Layers[laImprovements].AddCode(I); 1237 1244 end; 1238 1245 SortTechs; … … 1270 1277 Ok := True; 1271 1278 if Ok then 1272 begin 1273 Code[laImprovements, Lines[laImprovements]] := I; 1274 Inc(Lines[laImprovements]); 1275 end; 1279 Layers[laImprovements].AddCode(I); 1276 1280 end; 1277 1281 SortTechs; … … 1286 1290 end; 1287 1291 if Ok then 1288 begin 1289 Code[laImprovements, Lines[laImprovements]] := adMilitary; 1290 Inc(Lines[laImprovements]); 1291 end 1292 Layers[laImprovements].AddCode(adMilitary); 1292 1293 end; 1293 1294 kCities { , kChooseCity } : … … 1297 1298 if MyCity[I].Loc >= 0 then 1298 1299 begin 1299 Code[laImprovements, Lines[laImprovements]] := I; 1300 Inc(Lines[laImprovements]); 1300 Layers[laImprovements].AddCode(I); 1301 1301 end; 1302 1302 SortCities; 1303 FirstShrinkedLine[laImprovements]:= 0;1303 Layers[laImprovements].FirstShrinkedLine := 0; 1304 1304 end; 1305 1305 kCityEvents: … … 1307 1307 for I := 0 to MyRO.nCity - 1 do 1308 1308 if (MyCity[I].Loc >= 0) and (MyCity[I].Flags and CityRepMask <> 0) 1309 then 1310 begin 1311 Code[laImprovements, Lines[laImprovements]] := I; 1312 Inc(Lines[laImprovements]); 1309 then begin 1310 Layers[laImprovements].AddCode(I); 1313 1311 end; 1314 1312 SortCities; 1315 FirstShrinkedLine[laImprovements]:= 0;1313 Layers[laImprovements].FirstShrinkedLine := 0; 1316 1314 end; 1317 1315 { kChooseECity: … … 1321 1319 and (MyRO.EnemyCity[I].Owner = DipMem[Me].pContact) then 1322 1320 begin 1323 Code[laImprovements, Lines[laImprovements]] := I; 1324 Inc(Lines[laImprovements]); 1325 end; 1326 FirstShrinkedLine := 0; 1321 Layers[laImprovements].AddCode(I); 1322 end; 1323 Layers[laImprovements].FirstShrinkedLine := 0; 1327 1324 end; } 1328 1325 kModels: … … 1330 1327 for mix := 0 to MyRO.nModel - 1 do 1331 1328 begin 1332 Code[laImprovements,mix] := mix;1329 Layers[laImprovements].Code[mix] := mix; 1333 1330 MakeModelInfo(Me, mix, MyModel[mix], mi); 1334 Code[laClasses,mix] := ModelSortValue(mi);1335 end; 1336 L ines[laImprovements]:= MyRO.nModel;1331 Layers[laClasses].Code[mix] := ModelSortValue(mi); 1332 end; 1333 Layers[laImprovements].Lines := MyRO.nModel; 1337 1334 SortModels; 1338 FirstShrinkedLine[laImprovements]:= 0;1335 Layers[laImprovements].FirstShrinkedLine := 0; 1339 1336 end; 1340 1337 kChooseModel: … … 1352 1349 if Ok then 1353 1350 begin 1354 Code[laImprovements, Lines[laImprovements]] := mix;1351 Layers[laImprovements].Code[Layers[laImprovements].Lines] := mix; 1355 1352 MakeModelInfo(Me, mix, MyModel[mix], mi); 1356 Code[laClasses, Lines[laImprovements]] := ModelSortValue(mi);1357 Inc(L ines[laImprovements]);1353 Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(mi); 1354 Inc(Layers[laImprovements].Lines); 1358 1355 end; 1359 1356 end; 1360 1357 SortModels; 1361 // if Lines[0]>1 then 1362 begin 1363 Code[laImprovements, Lines[laImprovements]] := mixAll; 1364 Inc(Lines[laImprovements]); 1365 end; 1366 FirstShrinkedLine[laImprovements] := 0; 1358 Layers[laImprovements].AddCode(mixAll); 1359 Layers[laImprovements].FirstShrinkedLine := 0; 1367 1360 end; 1368 1361 kChooseEModel: … … 1385 1378 [MyRO.EnemyModel[emix].mix].HGr) then 1386 1379 InitEnemyModel(emix); 1387 Code[laImprovements, Lines[laImprovements]] := emix;1388 Code[laClasses, Lines[laImprovements]] := ModelSortValue(MyRO.EnemyModel[emix]);1389 Inc(L ines[laImprovements]);1380 Layers[laImprovements].Code[Layers[laImprovements].Lines] := emix; 1381 Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(MyRO.EnemyModel[emix]); 1382 Inc(Layers[laImprovements].Lines); 1390 1383 end; 1391 1384 SortModels; 1392 // if not IsMilReportNew(DipMem[me].pContact) or (Lines[laImprovements] > 1) then 1393 begin 1394 Code[laImprovements, Lines[laImprovements]] := mixAll; 1395 Inc(Lines[laImprovements]); 1396 end; 1397 FirstShrinkedLine[laImprovements] := 0; 1385 // if not IsMilReportNew(DipMem[me].pContact) or (Layers[laImprovements].Lines > 1) then 1386 begin 1387 Layers[laImprovements].AddCode(mixAll); 1388 end; 1389 Layers[laImprovements].FirstShrinkedLine := 0; 1398 1390 end; 1399 1391 kEModels: … … 1401 1393 for I := 0 to MyRO.EnemyReport[pView].nModelCounted - 1 do 1402 1394 begin 1403 Code[laWonders, Lines[laImprovements]] := MyRO.nEnemyModel - 1;1404 while ( Code[laWonders, Lines[laImprovements]] >= 0) and1405 not ((MyRO.EnemyModel[ Code[laWonders, Lines[laImprovements]]].Owner = pView) and1406 (MyRO.EnemyModel[ Code[laWonders, Lines[laImprovements]]].mix = I)) do1407 Dec( Code[laWonders, Lines[laImprovements]]);1395 Layers[laWonders].Code[Layers[laImprovements].Lines] := MyRO.nEnemyModel - 1; 1396 while (Layers[laWonders].Code[Layers[laImprovements].Lines] >= 0) and 1397 not ((MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]].Owner = pView) and 1398 (MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]].mix = I)) do 1399 Dec(Layers[laWonders].Code[Layers[laImprovements].Lines]); 1408 1400 if not Assigned(Tribe[pView].ModelPicture[I].HGr) then 1409 InitEnemyModel( Code[laWonders, Lines[laImprovements]]);1410 Code[laImprovements, Lines[laImprovements]] := I;1411 Code[laClasses, Lines[laImprovements]] :=1412 ModelSortValue(MyRO.EnemyModel[ Code[laWonders, Lines[laImprovements]]]);1413 Inc(L ines[laImprovements]);1401 InitEnemyModel(Layers[laWonders].Code[Layers[laImprovements].Lines]); 1402 Layers[laImprovements].Code[Layers[laImprovements].Lines] := I; 1403 Layers[laClasses].Code[Layers[laImprovements].Lines] := 1404 ModelSortValue(MyRO.EnemyModel[Layers[laWonders].Code[Layers[laImprovements].Lines]]); 1405 Inc(Layers[laImprovements].Lines); 1414 1406 end; 1415 1407 SortModels; 1416 FirstShrinkedLine[laImprovements]:= 0;1408 Layers[laImprovements].FirstShrinkedLine := 0; 1417 1409 end; 1418 1410 kAllEModels: … … 1431 1423 Ok := True; 1432 1424 if MainScreen.mNames.Checked then 1433 for J := 0 to L ines[laImprovements]- 1 do1425 for J := 0 to Layers[laImprovements].Lines - 1 do 1434 1426 begin 1435 PTestPicture := @Tribe[MyRO.EnemyModel[ Code[laImprovements,J]].Owner]1436 .ModelPicture[MyRO.EnemyModel[ Code[laImprovements,J]].mix];1427 PTestPicture := @Tribe[MyRO.EnemyModel[Layers[laImprovements].Code[J]].Owner] 1428 .ModelPicture[MyRO.EnemyModel[Layers[laImprovements].Code[J]].mix]; 1437 1429 if (PPicture.HGr = PTestPicture.HGr) and 1438 1430 (PPicture.pix = PTestPicture.pix) and 1439 1431 (ModelHash(MyRO.EnemyModel[emix]) 1440 = ModelHash(MyRO.EnemyModel[ Code[laImprovements,J]])) then1432 = ModelHash(MyRO.EnemyModel[Layers[laImprovements].Code[J]])) then 1441 1433 begin 1442 Code[laWonders,J] := 1;1434 Layers[laWonders].Code[J] := 1; 1443 1435 Ok := False; 1444 1436 Break; … … 1447 1439 if Ok then 1448 1440 begin 1449 Code[laImprovements, Lines[laImprovements]] := emix;1450 Code[laWonders, Lines[laImprovements]] := 0;1451 Code[laClasses, Lines[laImprovements]] := ModelSortValue(MyRO.EnemyModel[emix], True);1452 Inc(L ines[laImprovements]);1441 Layers[laImprovements].Code[Layers[laImprovements].Lines] := emix; 1442 Layers[laWonders].Code[Layers[laImprovements].Lines] := 0; 1443 Layers[laClasses].Code[Layers[laImprovements].Lines] := ModelSortValue(MyRO.EnemyModel[emix], True); 1444 Inc(Layers[laImprovements].Lines); 1453 1445 end; 1454 1446 end; 1455 1447 SortModels; 1456 FirstShrinkedLine[laImprovements]:= 0;1448 Layers[laImprovements].FirstShrinkedLine := 0; 1457 1449 end; 1458 1450 kTribe: 1459 1451 for I := 0 to TribeNames.Count - 1 do 1460 1452 begin 1461 Code[laImprovements, Lines[laImprovements]] := I; 1462 Inc(Lines[laImprovements]); 1453 Layers[laImprovements].AddCode(I); 1463 1454 end; 1464 1455 (* kDeliver: … … 1480 1471 kShipPart: 1481 1472 begin 1482 L ines[laImprovements]:= 0;1473 Layers[laImprovements].Lines := 0; 1483 1474 for I := 0 to nShipPart - 1 do 1484 1475 if MyRO.Ship[Me].Parts[I] > 0 then 1485 1476 begin 1486 Code[laImprovements, Lines[laImprovements]] := I; 1487 Inc(Lines[laImprovements]); 1477 Layers[laImprovements].AddCode(I); 1488 1478 end; 1489 1479 end; 1490 1480 kEShipPart: 1491 1481 begin 1492 L ines[laImprovements]:= 0;1482 Layers[laImprovements].Lines := 0; 1493 1483 for I := 0 to nShipPart - 1 do 1494 1484 if MyRO.Ship[DipMem[Me].pContact].Parts[I] > 0 then 1495 1485 begin 1496 Code[laImprovements, Lines[laImprovements]] := I; 1497 Inc(Lines[laImprovements]); 1486 Layers[laImprovements].AddCode(I); 1498 1487 end; 1499 1488 end; … … 1504 1493 then 1505 1494 begin 1506 Code[laImprovements, Lines[laImprovements]] := I; 1507 Inc(Lines[laImprovements]); 1495 Layers[laImprovements].AddCode(I); 1508 1496 end; 1509 1497 kMission: 1510 1498 for I := 0 to nSpyMission - 1 do 1511 1499 begin 1512 Code[laImprovements, Lines[laImprovements]] := I;1513 Inc(Lines[laImprovements]);1514 1515 end; 1516 1517 if Kind = kProject then // test if choice fitting to one screen1518 if L ines[laImprovements] + Lines[laWonders] + Lines[laClasses]<= MaxLines then1500 Layers[laImprovements].AddCode(I); 1501 end; 1502 end; 1503 1504 // Test if choice fitting to one screen 1505 if Kind = kProject then 1506 if Layers[laImprovements].Lines + Layers[laWonders].Lines + Layers[laClasses].Lines <= MaxLines then 1519 1507 begin 1520 for I := 0 to Lines[laWonders] - 1 do // add wonders to first page 1521 begin 1522 Code[laImprovements, Lines[laImprovements]] := Code[laWonders, I]; 1523 Inc(Lines[laImprovements]); 1524 end; 1525 Lines[laWonders] := 0; 1526 FirstShrinkedLine[laImprovements] := Lines[laImprovements]; 1527 for I := 0 to Lines[laClasses] - 1 do // add models to first page 1528 begin 1529 Code[laImprovements, Lines[laImprovements]] := Code[laClasses, I]; 1530 Inc(Lines[laImprovements]); 1531 end; 1532 Lines[laClasses] := 0; 1508 // Add wonders to first page 1509 for I := 0 to Layers[laWonders].Lines - 1 do 1510 Layers[laImprovements].AddCode(Layers[laWonders].Code[I]); 1511 Layers[laWonders].Lines := 0; 1512 1513 Layers[laImprovements].FirstShrinkedLine := Layers[laImprovements].Lines; 1514 1515 // Add models to first page 1516 for I := 0 to Layers[laClasses].Lines - 1 do 1517 Layers[laImprovements].AddCode(Layers[laClasses].Code[I]); 1518 Layers[laClasses].Lines := 0; 1533 1519 end; 1534 1520 end; … … 1538 1524 Kind := TestKind; 1539 1525 InitLines; 1540 if L ines[laImprovements]= 0 then1526 if Layers[laImprovements].Lines = 0 then 1541 1527 Result := -2 1542 else if L ines[laImprovements]> 1 then1528 else if Layers[laImprovements].Lines > 1 then 1543 1529 Result := -1 1544 1530 else 1545 Result := Code[laImprovements,0];1531 Result := Layers[laImprovements].Code[0]; 1546 1532 end; 1547 1533 1548 1534 procedure TListDlg.FormShow(Sender: TObject); 1549 1535 var 1550 L: TLayer ;1536 L: TLayerIndex; 1551 1537 NewTop, NewLeft: Integer; 1552 1538 begin … … 1569 1555 1570 1556 MultiPage := False; 1571 for L := Low(Layer) to High(Layer) do1572 if L ines[L]> 0 then begin1557 for L := laWonders to High(TLayerIndex) do 1558 if Layers[L].Lines > 0 then begin 1573 1559 MultiPage := True; 1574 1560 Break; 1575 1561 end; 1562 1576 1563 WideBottom := MultiPage or (Kind = kScience) or 1577 1564 not Phrases2FallenBackToEnglish and … … 1586 1573 end; 1587 1574 1588 DispLines := L ines[laImprovements];1589 for L := Low( Layer) to High(Layer) do1590 if L ines[L]> DispLines then1591 DispLines := L ines[L];1575 DispLines := Layers[laImprovements].Lines; 1576 for L := Low(TLayerIndex) to High(TLayerIndex) do 1577 if Layers[L].Lines > DispLines then 1578 DispLines := Layers[L].Lines; 1592 1579 if WideBottom then 1593 1580 begin … … 1613 1600 InnerWidth := 640 - 18; 1614 1601 kTribe: 1615 if L ines[laImprovements]> MaxLines then1602 if Layers[laImprovements].Lines > MaxLines then 1616 1603 InnerWidth := 280 + GetSystemMetrics(SM_CXVSCROLL) 1617 1604 else … … 1657 1644 end; 1658 1645 1659 LayerImprovementsButton.Visible := MultiPage and (Lines[laImprovements] > 0); 1660 LayerWondersButton.Visible := MultiPage and (Lines[laWonders] > 0); 1661 LayerClassesButton.Visible := MultiPage and (Lines[laClasses] > 0); 1646 LayerImprovementsButton.Visible := MultiPage and (Layers[laImprovements].Lines > 0); 1647 LayerWondersButton.Visible := MultiPage and (Layers[laWonders].Lines > 0); 1648 LayerClassesButton.Visible := MultiPage and (Layers[laClasses].Lines > 0); 1649 1662 1650 if Kind = kProject then 1663 1651 begin … … 1673 1661 end; 1674 1662 1675 Layer := laImprovements;1663 Layer := Layers[laImprovements]; 1676 1664 Selected := -2; 1677 1665 ScienceNation := -1; 1678 ScrollBar.Init(L ines[Layer]- 1, DispLines);1666 ScrollBar.Init(Layer.Lines - 1, DispLines); 1679 1667 1680 1668 OffscreenPaint; … … 1794 1782 InitLines; 1795 1783 Selected := -2; 1796 ScrollBar.Init(L ines[Layer]- 1, DispLines);1784 ScrollBar.Init(Layer.Lines - 1, DispLines); 1797 1785 OffscreenPaint; 1798 1786 Invalidate; … … 1804 1792 LayerWondersButton.Down := Sender = LayerWondersButton; 1805 1793 LayerClassesButton.Down := Sender = LayerClassesButton; 1806 Layer := TLayer(TComponent(Sender).Tag);1794 Layer := Layers[TLayerIndex(TComponent(Sender).Tag)]; 1807 1795 1808 1796 Selected := -2; 1809 ScrollBar.Init(L ines[Layer]- 1, DispLines);1797 ScrollBar.Init(Layer.Lines - 1, DispLines); 1810 1798 SmartUpdateContent; 1811 1799 end; … … 1879 1867 begin 1880 1868 if Index < 0 then Index := 0; 1881 if Index > L ines[Layer] - 1 then Index := Lines[Layer]- 1;1869 if Index > Layer.Lines - 1 then Index := Layer.Lines - 1; 1882 1870 1883 1871 NewSelected := Index - ScrollBar.Position; 1884 1872 NewScrollBarPos := ScrollBar.Position; 1885 1873 1886 Over := NewSelected - Min(DispLines, L ines[Layer]- NewScrollBarPos);1874 Over := NewSelected - Min(DispLines, Layer.Lines - NewScrollBarPos); 1887 1875 if Over > 0 then begin 1888 1876 Inc(NewScrollBarPos, Over); … … 1912 1900 begin 1913 1901 if (Key = VK_RIGHT) or (Key = VK_NUMPAD6) then begin 1914 if MultiPage and (Layer <= High(Layer)) then begin1902 if MultiPage and (Layer.Index <= High(TLayerIndex)) then begin 1915 1903 LastSelectionIndex := GetSelectionIndex; 1916 if Layer = laImprovements then Layer := laClasses1917 else if Layer = laClasses then Layer := laWonders;1918 if L ines[Layer] = 0 then Layer := laWonders;1919 LayerImprovementsButton.Down := Layer = laImprovements;1920 LayerWondersButton.Down := Layer = laWonders;1921 LayerClassesButton.Down := Layer = laClasses;1922 ScrollBar.Init(L ines[Layer]- 1, DispLines);1904 if Layer = Layers[laImprovements] then Layer := Layers[laClasses] 1905 else if Layer = Layers[laClasses] then Layer := Layers[laWonders]; 1906 if Layer.Lines = 0 then Layer := Layers[laWonders]; 1907 LayerImprovementsButton.Down := Layer = Layers[laImprovements]; 1908 LayerWondersButton.Down := Layer = Layers[laWonders]; 1909 LayerClassesButton.Down := Layer = Layers[laClasses]; 1910 ScrollBar.Init(Layer.Lines - 1, DispLines); 1923 1911 SetSelectionIndex(LastSelectionIndex); 1924 1912 SmartUpdateContent; … … 1926 1914 end else 1927 1915 if (Key = VK_LEFT) or (Key = VK_NUMPAD4) then begin 1928 if MultiPage and (Layer > laImprovements) then begin1916 if MultiPage and (Layer.Index > laImprovements) then begin 1929 1917 LastSelectionIndex := GetSelectionIndex; 1930 if Layer = laWonders then Layer := laClasses1931 else if Layer = laClasses then Layer := laImprovements;1932 if L ines[Layer] = 0 then Layer := laImprovements;1933 LayerImprovementsButton.Down := Layer = laImprovements;1934 LayerWondersButton.Down := Layer = laWonders;1935 LayerClassesButton.Down := Layer = laClasses;1936 ScrollBar.Init(L ines[Layer]- 1, DispLines);1918 if Layer = Layers[laWonders] then Layer := Layers[laClasses] 1919 else if Layer = Layers[laClasses] then Layer := Layers[laImprovements]; 1920 if Layer.Lines = 0 then Layer := Layers[laImprovements]; 1921 LayerImprovementsButton.Down := Layer = Layers[laImprovements]; 1922 LayerWondersButton.Down := Layer = Layers[laWonders]; 1923 LayerClassesButton.Down := Layer = Layers[laClasses]; 1924 ScrollBar.Init(Layer.Lines - 1, DispLines); 1937 1925 SetSelectionIndex(LastSelectionIndex); 1938 1926 SmartUpdateContent; … … 1949 1937 end else 1950 1938 if (Key = VK_END) or (Key = VK_NUMPAD1) then begin 1951 SetSelectionIndex(L ines[Layer]);1939 SetSelectionIndex(Layer.Lines); 1952 1940 end else 1953 1941 if (Key = VK_PRIOR) or (Key = VK_NUMPAD9) then begin
Note:
See TracChangeset
for help on using the changeset viewer.