Files
kam-mobile/vendor/kam_remake/src/game/misc/KM_GameUIDTracker.pas
T
admin_d 7063d1b1c9
Sync changed files to Google Drive / sync (push) Successful in 1h45m13s
sync: restore source from Google Drive
2026-09-12 16:50:30 +05:00

67 lines
1.4 KiB
ObjectPascal

unit KM_GameUIDTracker;
interface
uses
KM_CommonClasses;
type
// Units-Houses tracker, to issue unique IDs
TKMGameUIDTracker = class
private
fUIDTracker: Integer;
public
constructor Create;
procedure Load(LoadStream: TKMemoryStream);
procedure Save(SaveStream: TKMemoryStream);
function GetNewUID: Integer;
end;
var
gUIDTracker: TKMGameUIDTracker;
implementation
{ TKMGameUIDTracker }
constructor TKMGameUIDTracker.Create;
begin
inherited;
fUIDTracker := 0;
end;
procedure TKMGameUIDTracker.Load(LoadStream: TKMemoryStream);
begin
LoadStream.CheckMarker('UIDTracker');
LoadStream.Read(fUIDTracker);
end;
procedure TKMGameUIDTracker.Save(SaveStream: TKMemoryStream);
begin
SaveStream.PlaceMarker('UIDTracker');
SaveStream.Write(fUIDTracker);
end;
function TKMGameUIDTracker.GetNewUID: Integer;
const
//Prime numbers let us generate sequence of non-repeating values of max_value length
MAX_VALUE = 16777213;
STEP = 8765423;
begin
//UIDs have the following properties:
// - allow -1 to indicate no UID (const UID_NONE = -1)
// - fit within 24bit (we can use that much for RGB colorcoding in unit picking)
// - Start from 1, so that black colorcode can be detected in render and then re-mapped to -1
fUIDTracker := (fUIDTracker + STEP) mod MAX_VALUE + 1; //1..N range, 0 is nothing for colorpicker
Result := fUIDTracker;
end;
end.