Changeset 237 for oup/current/FileClasses
- Timestamp:
- Jul 14, 2007, 4:18:23 PM (17 years ago)
- Location:
- oup/current/FileClasses
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
oup/current/FileClasses/AKVA.pas
r233 r237 18 18 19 19 procedure TFile_AKVA.InitDataFields; 20 var21 tempi: Integer;22 20 begin 23 21 inherited; 24 FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);22 FDataFields := TBlock.Create(Self, nil, 'Base', '', []); 25 23 with FDataFields do 26 24 begin 27 AddField(TFileID, $00, 'FileID', '', nil); 28 AddField(TLevelID, $04, 'LevelID', '', nil); 25 AddField(TFileID, 'FileID', '', []); 26 AddField(TLevelID, 'LevelID', '', []); 27 28 AddField(TUnused, 'Unused data', '', [20]); 29 30 with TArray(Addfield(TArray, 'BNV nodes', '', [4])) do 31 begin 32 AddField(TInt, 'AKBP index', 'BSP tree for this BNV', [4]); 33 AddField(TInt, 'AKVA index', 'index of this BNV', [4]); 34 AddField(TInt, 'AKBA index', '"side" range start', [4]); 35 AddField(TInt, 'AKBA index', '"side" range end', [4]); 36 AddField(TInt, 'AKVA index', 'first child BNV', [4]); 37 AddField(TInt, 'AKVA index', 'next sibling BNV', [4]); 38 AddField(TInt, 'Unknown', 'always -1', [4]); 39 with TBlock(AddField(TBlock, 'RAW link', '', [])) do 40 begin 41 AddField(TInt, 'X-tiles', 'size of pathfinding grid', [4]); 42 AddField(TInt, 'Z-tiles', 'size of pathfinding grid', [4]); 43 AddField(TRawLink, 'RAW offset', 'offset of grid data', []); 44 AddField(TInt, 'RAW size', 'size of grid data', [4]); 45 AddField(TFloat, 'Tile size', 'usually 4 world units', []); 46 end; 47 AddField(TFloat, 'AABB X-', 'BNV AABB', []); 48 AddField(TFloat, 'AABB Y-', 'BNV AABB', []); 49 AddField(TFloat, 'AABB Z-', 'BNV AABB', []); 50 AddField(TFloat, 'AABB X+', 'BNV AABB', []); 51 AddField(TFloat, 'AABB Y+', 'BNV AABB', []); 52 AddField(TFloat, 'AABB Z+', 'BNV AABB', []); 53 AddField(TInt, 'Unknown', 'always -2', [2]); 54 AddField(TInt, 'Unknown', 'always -2', [2]); 55 AddField(TInt, 'AKVA index', 'index of this BNV again', [4]); 56 AddField(TInt, 'Unknown', 'always 0', [4]); 57 AddField(TInt, 'Unknown', 'always 0', [4]); 58 AddField(TInt, 'Unknown', 'always 0 (was a RAW offset once?)', [4]); 59 AddField(TBitSet, 'Bitset', '', ['sloped', 'unknown', 'unknown, always set', 60 'unknown', 'unknown, "no raw data"', 'unknown', 'unknown', 'unknown']); 61 AddField(TBitSet, 'Bitset', '', ['unknown', 'unknown', 'unknown', 'unknown', 62 'unknown', 'unknown', 'unknown', 'unknown']); 63 AddField(TBitSet, 'Bitset', '', ['unknown', 'unknown', 'unknown', 'unknown', 64 'unknown', 'unknown', 'unknown', 'unknown']); 65 AddField(TBitSet, 'Bitset', '', ['unknown', 'unknown', 'unknown', 'unknown', 66 'unknown', 'unknown', 'unknown', 'unknown']); 67 AddField(TFloat, 'Plane X', 'floor and ceiling normal', []); 68 AddField(TFloat, 'Plane Y', 'floor and ceiling normal', []); 69 AddField(TFloat, 'Plane Z', 'floor and ceiling normal', []); 70 AddField(TFloat, 'Plane D', 'distance of floor to origin', []); 71 AddField(TFloat, 'Plane D', 'distance of ceiling to origin', []); 72 SetCount; 73 end; 29 74 end; 75 FDataFields.Update(0, -1); 30 76 FFileStream.Free; 31 77 FFileStream := nil; -
oup/current/FileClasses/TXAN.pas
r236 r237 34 34 AddField(TUnused, 'Unused', '', [2]); 35 35 36 with TArray(AddField(TArray, 'AnimTextures array', '', [4 , 0])) do36 with TArray(AddField(TArray, 'AnimTextures array', '', [4])) do 37 37 begin 38 38 AddField(TLinkByID, 'Texture', '', ['*']); -
oup/current/FileClasses/_DataTypes.pas
r236 r237 21 21 FParentBlock: TContainer; 22 22 FChanged: Boolean; 23 FExtraArgs: array of TVarRec; 23 24 function GetValueAsString: String; virtual; 24 25 public … … 39 40 TContainer = class(TDataField) 40 41 public 42 function AddField(fieldtype: TFieldType; Name, Description: String; 43 ExtraArgs: array of const): TDataField; virtual; abstract; 41 44 procedure UpdateSize; virtual; abstract; 42 45 end; … … 56 59 57 60 function AddField(fieldtype: TFieldType; Name, Description: String; 58 ExtraArgs: array of const): TDataField; 61 ExtraArgs: array of const): TDataField; override; 59 62 procedure UpdateSize; override; 60 63 end; … … 67 70 public 68 71 // ExtraArgs: Pointer auf Integer: Bytes of TInt 72 constructor Create(ParentFile: TObject; ParentBlock: TContainer; 73 Name, Description: String; ExtraArgs: array of const); override; 74 procedure Update(Offset, Length: Integer); override; 75 end; 76 77 78 TFloat = class(TDataField) 79 private 80 FFloat: Single; 81 function GetValueAsString: String; override; 82 public 83 // ExtraArgs: none 69 84 constructor Create(ParentFile: TObject; ParentBlock: TContainer; 70 85 Name, Description: String; ExtraArgs: array of const); override; … … 147 162 function GetFieldByOffset(Offset: Integer): TDataField; 148 163 public 149 // ExtraArgs: Pointer auf 2 Integer: CounterSize+Count (packed record...) 164 // ExtraArgs: 165 // 1. Integer: CounterSize (if 0 then 2. integer is required) 166 // 2. Integer: BlockCount (for fixed-size arrays) 150 167 constructor Create(ParentFile: TObject; ParentBlock: TContainer; 151 168 Name, Description: String; ExtraArgs: array of const); override; … … 153 170 154 171 function AddField(fieldtype: TFieldType; Name, Description: String; 155 ExtraArgs: array of const): TDataField; 172 ExtraArgs: array of const): TDataField; override; 156 173 procedure SetCount; overload; 157 174 procedure SetCount(n: Integer); overload; … … 188 205 189 206 uses 190 SysUtils, Dialogs, _FileTypes, ConnectionManager ;207 SysUtils, Dialogs, _FileTypes, ConnectionManager, StrUtils; 191 208 192 209 … … 197 214 constructor TDataField.Create(ParentFile: TObject; ParentBlock: TContainer; 198 215 Name, Description: String; ExtraArgs: array of const); 216 var 217 i: Integer; 199 218 begin 200 219 if Assigned(ParentBlock) then … … 206 225 FParentFile := ParentFile; 207 226 FParentBlock := ParentBlock; 227 SetLength(FExtraArgs, Length(ExtraArgs)); 228 if Length(ExtraArgs) > 0 then 229 for i := 0 to High(ExtraArgs) do 230 FExtraArgs[i] := ExtraArgs[i]; 208 231 FConnectionID := TFile(ParentFile).ConnectionID; 209 232 end; … … 300 323 constructor TArray.Create(ParentFile: TObject; ParentBlock: TContainer; 301 324 Name, Description: String; ExtraArgs: array of const); 302 var303 i: Integer;304 fstream: TMemoryStream;305 325 begin 306 326 inherited Create(ParentFile, ParentBlock, Name, Description, ExtraArgs); 307 327 FCounterSize := ExtraArgs[0].VInteger; 308 FBlockCount := ExtraArgs[1].VInteger; 328 if Length(ExtraArgs) = 2 then 329 FBlockCount := ExtraArgs[1].VInteger 330 else 331 FBlockCount := 0; 332 FTemplate := TBlock.Create(ParentFile, Self, '', '', []); 333 end; 334 335 function TArray.GetChildCount: Integer; 336 begin 337 Result := Length(FDataFields); 338 end; 339 340 function TArray.GetChild(ID: Integer): TTreeElement; 341 begin 342 Result := FDataFields[ID]; 343 end; 344 345 function TArray.GetFieldByOffset(Offset: Integer): TDataField; 346 begin 347 Exit; 348 end; 349 350 procedure TArray.SetCount; 351 var 352 fstream: TMemoryStream; 353 arr_index: Integer; 354 i: Integer; 355 356 procedure Add(DestBlock, SrcBlock: TBlock); 357 var 358 fid: Integer; 359 field: TDataField; 360 result: TDataField; 361 begin 362 if Length(SrcBlock.FDataFields) > 0 then 363 begin 364 for fid := 0 to High(SrcBlock.FDataFields) do 365 begin 366 field := SrcBlock.FDataFields[fid]; 367 result := DestBlock.AddField(TFieldType(field.ClassType), field.Name, field.Description, field.FExtraArgs); 368 if result is TBlock then 369 Add(TBlock(result), TBlock(field)); 370 end; 371 end; 372 end; 373 374 begin 309 375 if FCounterSize > 0 then 310 376 begin 311 fstream := TFile( ParentFile).FileStream;377 fstream := TFile(FParentFile).FileStream; 312 378 fstream.Seek(Offset, soFromBeginning); 313 379 FBlockCount := 0; 314 380 fstream.Read(FBlockCount, FCounterSize); 315 381 end; 316 FTemplate := TBlock.Create(ParentFile, Self, '', '', []);317 end;318 319 function TArray.GetChildCount: Integer;320 begin321 Result := Length(FDataFields);322 end;323 324 function TArray.GetChild(ID: Integer): TTreeElement;325 begin326 Result := FDataFields[ID];327 end;328 329 function TArray.GetFieldByOffset(Offset: Integer): TDataField;330 begin331 Exit;332 end;333 334 procedure TArray.SetCount;335 var336 fid: Integer;337 arr_index: Integer;338 field: TDataField;339 begin340 382 FDataLength := FCounterSize; 341 383 if FBlockCount > 0 then … … 345 387 SetLength(FDataFields, arr_index + 1); 346 388 FDataFields[arr_index] := TBlock.Create(FParentFile, Self, 347 FName + '[' + IntToStr(arr_index) + ']', '', []); 348 if Length(FTemplate.FDataFields) > 0 then 349 begin 350 for fid := 0 to High(FTemplate.FDataFields) do 351 begin 352 field := FTemplate.FDataFields[fid]; 353 FDataFields[arr_index].AddField(TFieldType(field.ClassType), field.Name, field.Description, []); 354 end; 355 end; 389 '[' + IntToStr(arr_index) + ']', '', []); 390 Add(FDataFields[arr_index], FTemplate); 391 end; 392 end; 393 if Pos('[', FName) > 0 then 394 begin 395 if Pos(']', FName) = Length(FName) then 396 begin 397 i := Pos('[', ReverseString(FName)); 398 FName := MidStr(FName, 1, Length(FName) - i); 356 399 end; 357 400 end; … … 361 404 362 405 procedure TArray.SetCount(n: Integer); 363 begin 364 FParentBlock.UpdateSize; 406 var 407 fstream: TMemoryStream; 408 begin 409 FBlockCount := n; 410 if FCounterSize > 0 then 411 begin 412 fstream := TFile(FParentFile).FileStream; 413 fstream.Seek(Offset, soFromBeginning); 414 fstream.Write(FBlockCount, FCounterSize); 415 end; 416 SetCount; 365 417 end; 366 418 … … 680 732 end; 681 733 734 735 736 { TFloat } 737 738 constructor TFloat.Create(ParentFile: TObject; ParentBlock: TContainer; Name, 739 Description: String; ExtraArgs: array of const); 740 begin 741 inherited Create(ParentFile, ParentBlock, Name, Description, ExtraArgs); 742 FDataLength := 4; 743 FFloat := 0; 744 end; 745 746 function TFloat.GetValueAsString: String; 747 begin 748 Result := FloatToStr(FFloat); 749 end; 750 751 procedure TFloat.Update(Offset, Length: Integer); 752 var 753 fstream: TMemoryStream; 754 begin 755 fstream := TFile(FParentFile).FileStream; 756 fstream.Seek(FOffset, soFromBeginning); 757 fstream.Read(FFloat, FDataLength); 758 end; 759 760 682 761 end. -
oup/current/FileClasses/_Extensions.pas
r233 r237 17 17 constructor Create(ConnectionID: Integer; Ext: String); virtual; 18 18 procedure InitList; 19 property Ext: String read FExt; 19 20 end; 20 21 … … 48 49 function TExtension.GetCaption: String; 49 50 begin 50 Result := FExt ;51 Result := FExt + '[' + IntToStr(GetChildCount) + ']'; 51 52 end; 52 53 … … 100 101 function TExtensions.GetChild(ID: Integer): TTreeElement; 101 102 begin 103 FExtensions[ID].InitList; 102 104 Result := FExtensions[ID]; 103 105 end; … … 141 143 if Length(FExtensions) > 0 then 142 144 for i := 0 to High(FExtensions) do 143 if FExtensions[i]. GetCaption= Ext then145 if FExtensions[i].Ext = Ext then 144 146 begin 145 147 Result := FExtensions[i]; -
oup/current/FileClasses/_FileTypes.pas
r233 r237 12 12 function GetChild(ID: Integer): TTreeElement; override; 13 13 function GetCaption: String; override; 14 private15 FConnectionID: Integer;16 14 protected 17 15 FFileInfo: TFileInfo; -
oup/current/FileClasses/_MetaTypes.pas
r236 r237 5 5 uses 6 6 _FileTypes, _EmptyFile, _Unlinked, _DataTypes, _Extensions, _TreeElement, 7 TXAN, TXMP;7 AKVA, TXAN, TXMP; 8 8 // ABNA, AGDB, AGQC, AGQG, AGQM, AGQR, AISA, AITR, AIWA, AKAA, AKBA, AKBP, AKDA, 9 9 // AKEV, AKOT, AKVA, BINA, CBPI, CBPM, CONS, CRSA, DOOR, DPge, EDIA, ENVP, FILM, … … 32 32 33 33 const 34 FileDescs: array[0..1] of TFileDesc = ( 34 FileDescs: array[0..2] of TFileDesc = ( 35 (ext: 'AKVA'; ftype: TFile_AKVA), 35 36 (ext: 'TXAN'; ftype: TFile_TXAN), 36 37 (ext: 'TXMP'; ftype: TFile_TXMP)
Note:
See TracChangeset
for help on using the changeset viewer.