All pastes #619582 Raw Edit

Untitled

public text v1 · immutable
·published 2007-07-14 21:28 UTC
rendered paste body
procedure ReloadSides; // populates SideList list and loads side images into SideImageList image list
var
  i: Integer;
  s: string;
  side: string;
  res: Integer;
  sl, sl2: TStringList;
  index, size, count: Integer;

  procedure LoadDefaultSideImage(Side: string);
  begin
    if UpperCase(Side) = 'ARM' then
      SideImageList.AddMasked(MainForm.DefaultArmImage.Picture.Bitmap, clWhite)
    else if UpperCase(Side) = 'CORE' then
      SideImageList.AddMasked(MainForm.DefaultCoreImage.Picture.Bitmap, clWhite)
    else
      SideImageList.AddMasked(MainForm.DefaultSideImage.Picture.Bitmap, clWhite); // none specific side
  end;

begin

  SideList.Clear;
  SideImageList.Clear;

  count := GetSideCount;
  for i := 0 to count-1 do
    SideList.Add(GetSideName(i));

  if count = 0 then // this should not happen - mod author forgot to define sides! 
  begin
    MessageDlg('This mod doesn''t have any sides defined. Using default sides (Arm/Core) ...', mtWarning, [mbOK], 0);
    SideList.Add('Arm');
    SideList.Add('Core');
  end;

  sl := TStringList.Create; // list of archive files
  sl2 := TStringList.Create; // list of archive file sides

  // get a list of all side images from mod archive:
  res := InitFindVFS('SidePics\*.bmp');
  SetLength(s, 255);
  res := FindFilesVFS(res, PChar(s), 255);
  if res = 0 then
  begin
    if Debug.Enabled then MainForm.AddMainLog('No side pictures found! Skipping ...', Colors.Error);
  end
  else
  begin
    while res <> 0 do
    begin
      for i := 1 to 255 do if s[i] = #0 then
      begin
        s := Copy(s, 1, i-1);
        Break;
      end;

      if Debug.Enabled then MainForm.AddMainLog('Side image found: ' + s, Colors.Info);
      sl.Add(s);
      sl2.Add(UpperCase(Copy(ExtractFileName(s), 1, Length(ExtractFileName(s))-4)));
      SetLength(s, 255);
      res := FindFilesVFS(res, PChar(s), 255);
    end;
  end;

  // load side images:
  for i := 0 to SideList.Count-1 do
  begin
    index := sl2.IndexOf(UpperCase(SideList[i]));

    // if we don't have a suitable side image, load the default one:
    if index = -1 then
      LoadDefaultSideImage(UpperCase(SideList[i]))
    else
    begin // let's load the side image from mod's archive file:
      res := OpenFileVFS(PChar(sl[index]));
      if res = 0 then
      begin
        MainForm.AddMainLog('Error: Unable to open archive file: ' + sl[index], Colors.Error);
        LoadDefaultSideImage(UpperCase(SideList[i]));
        Continue;
      end;
      size := FileSizeVFS(res);
      if size = 0 then
      begin
        MainForm.AddMainLog('Error: Unable to open archive file: ' + sl[index], Colors.Error);
        LoadDefaultSideImage(UpperCase(SideList[i]));
        CloseFileVFS(res);
        Continue;
      end;

      SetLength(s, size);
      ReadFileVFS(res, @s[1], size);
      try
        AddBitmapToImageList(SideImageList, s[1], size);
      except
        LoadDefaultSideImage(UpperCase(SideList[i]));
     end;
    end;
  end; // for