BBTypes.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:5k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit BBTypes;
  2. //---------------------------------------------------------------------------
  3. // BBTypes.pas                                          Modified: 09-Mar-2007
  4. // Billboard type storage                                         Version 1.1
  5. //---------------------------------------------------------------------------
  6. // Important Notice:
  7. //
  8. // If you modify/use this code or one of its parts either in original or
  9. // modified form, you must comply with Mozilla Public License v1.1,
  10. // specifically section 3, "Distribution Obligations". Failure to do so will
  11. // result in the license breach, which will be resolved in the court.
  12. // Remember that violating author's rights is considered a serious crime in
  13. // many countries. Thank you!
  14. //
  15. // !! Please *read* Mozilla Public License 1.1 document located at:
  16. //  http://www.mozilla.org/MPL/
  17. //
  18. // If you require any clarifications about the license, feel free to contact
  19. // us or post your question on our forums at: http://www.afterwarp.net
  20. //---------------------------------------------------------------------------
  21. // The contents of this file are subject to the Mozilla Public License
  22. // Version 1.1 (the "License"); you may not use this file except in
  23. // compliance with the License. You may obtain a copy of the License at
  24. // http://www.mozilla.org/MPL/
  25. //
  26. // Software distributed under the License is distributed on an "AS IS"
  27. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  28. // License for the specific language governing rights and limitations
  29. // under the License.
  30. //
  31. // The Original Code is BBTypes.pas.
  32. //
  33. // The Initial Developer of the Original Code is M. Sc. Yuriy Kotsarenko.
  34. // Portions created by M. Sc. Yuriy Kotsarenko are Copyright (C) 2007,
  35. // Afterwarp Interactive. All Rights Reserved.
  36. //---------------------------------------------------------------------------
  37. interface
  38. //---------------------------------------------------------------------------
  39. uses
  40.  Vectors2, AsphyreTypes, AsphyreClasses, AsphyreImages;
  41. //---------------------------------------------------------------------------
  42. type
  43.  PAsphyreBillboard = ^TAsphyreBillboard;
  44.  TAsphyreBillboard = record
  45.   Size    : TPoint2;
  46.   Phi     : Single;
  47.   Color   : Cardinal;
  48.   DrawFx  : Integer;
  49.   Image   : TAsphyreCustomImage;
  50.   Pattern : Integer;
  51.  end;
  52. //---------------------------------------------------------------------------
  53.  TAsphyreBillboards = class
  54.  private
  55.   List: TAsphyreList;
  56.   function GetCount(): Integer;
  57.   function GetItem(Index: Integer): PAsphyreBillboard;
  58.   procedure FreeItem(List: TAsphyreList; Item: Pointer);
  59.  public
  60.   property Count: Integer read GetCount;
  61.   property Items[Index: Integer]: PAsphyreBillboard read GetItem; default;
  62.   function Insert(const Billboard: TAsphyreBillboard): Integer;
  63.   function IndexOf(Billboard: PAsphyreBillboard): Integer; overload;
  64.   procedure Remove(Index: Integer);
  65.   procedure Clear();
  66.   constructor Create();
  67.   destructor Destroy(); override;
  68.  end;
  69. //---------------------------------------------------------------------------
  70. implementation
  71. //---------------------------------------------------------------------------
  72. constructor TAsphyreBillboards.Create();
  73. begin
  74.  inherited;
  75.  List:= TAsphyreList.Create();
  76.  List.OnFreeItem:= FreeItem;
  77. end;
  78. //---------------------------------------------------------------------------
  79. destructor TAsphyreBillboards.Destroy();
  80. begin
  81.  List.Free();
  82.  inherited;
  83. end;
  84. //---------------------------------------------------------------------------
  85. procedure TAsphyreBillboards.FreeItem(List: TAsphyreList; Item: Pointer);
  86. begin
  87.  FreeMem(Item, SizeOf(TAsphyreBillboard));
  88. end;
  89. //---------------------------------------------------------------------------
  90. function TAsphyreBillboards.GetCount(): Integer;
  91. begin
  92.  Result:= List.Count;
  93. end;
  94. //---------------------------------------------------------------------------
  95. function TAsphyreBillboards.GetItem(Index: Integer): PAsphyreBillboard;
  96. begin
  97.  Result:= PAsphyreBillboard(List[Index]);
  98. end;
  99. //---------------------------------------------------------------------------
  100. function TAsphyreBillboards.Insert(const Billboard: TAsphyreBillboard): Integer;
  101. var
  102.  Item: PAsphyreBillboard;
  103. begin
  104.  GetMem(Item, SizeOf(TAsphyreBillboard));
  105.  Move(Billboard, Item^, SizeOf(TAsphyreBillboard));
  106.  Result:= List.Insert(Item);
  107. end;
  108. //---------------------------------------------------------------------------
  109. function TAsphyreBillboards.IndexOf(Billboard: PAsphyreBillboard): Integer;
  110. begin
  111.  Result:= List.IndexOf(Billboard);
  112. end;
  113. //---------------------------------------------------------------------------
  114. procedure TAsphyreBillboards.Remove(Index: Integer);
  115. begin
  116.  List.Remove(Index);
  117. end;
  118. //---------------------------------------------------------------------------
  119. procedure TAsphyreBillboards.Clear();
  120. begin
  121.  List.Clear();
  122. end;
  123. //---------------------------------------------------------------------------
  124. end.