ItemMsg.pas
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Delphi

  1. (*
  2.  @Abstract(Item messages unit)
  3.  (C) 2006 George "Mirage" Bakhtadze. <a href="http://www.casteng.com">www.casteng.com</a> <br>
  4.  Unit contains basic item message classes
  5. *)
  6. {$Include GDefines.inc}
  7. unit ItemMsg;
  8. interface
  9. uses BaseClasses, BaseMsg;
  10. type
  11.   // This message is sent to an item when it needs to be initialized
  12.   TInitMsg = class(BaseMsg.TNotificationMessage)
  13.   end;
  14.   // Base item notification message class. Should not be used directly.
  15.   TItemNotificationMessage = class(BaseMsg.TNotificationMessage)
  16.     // the item affected
  17.     Item: BaseClasses.TItem;
  18.     constructor Create(AItem: BaseClasses.TItem);
  19.   end;
  20.   // After attachment of a new item to a scene this message is sent to <b>the item being attached</b>, <b>scene root</b> and <b>core handler</b>
  21.   TAddToSceneMsg = class(TItemNotificationMessage)
  22.   end;
  23.   // Before removal of an item from a scene this message is sent to <b>the item being removed</b>, <b>scene root</b> and <b>core handler</b>
  24.   TRemoveFromSceneMsg = class(TItemNotificationMessage)
  25.   end;
  26.   // Before destruction of an item this message is sent to <b>the item being destroyed</b>, <b>scene root</b> and <b>core handler</b> (?)
  27.   TDestroyMsg = class(TItemNotificationMessage)
  28.   end;
  29.   { When a physical address (pointer) to an item has changed (E.g. during change of the item's class.),
  30.     this message is sent to <b>the item affected</b> and <b>core handler</b> and broadcast from <b>scene root</b>. }
  31.   TReplaceMsg = class(BaseMsg.TNotificationMessage)
  32.     // Old pointer. Valid only within message handler
  33.     OldItem: BaseClasses.TItem;
  34.     // New pointer
  35.     NewItem: BaseClasses.TItem;
  36.     constructor Create(AOldItem, ANewItem: BaseClasses.TItem);
  37.   end;
  38.   { This message is sent to <b>core handler</b> and broadcast from <b>scene root</b> when an item has modified with an operation (see @Link(TOperation)) }
  39.   TItemModifiedMsg = class(TItemNotificationMessage)
  40.   end;
  41.   // This message is sent to <b>core handler</b> before a scene clearing
  42.   TSceneClearMsg = class(BaseMsg.TNotificationMessage)
  43.   end;
  44.   // After a scene has been completely loaded this message is sent to <b>scene root</b> and <b>core handler</b>
  45.   TSceneLoadedMsg = class(BaseMsg.TNotificationMessage)
  46.   end;
  47.   // Message envelope class. Used by asyncronous messaging system. Should not be used directly.
  48.   TMessageEnvelope = class(TMessage)
  49.     // Message in envelope
  50.     Message: TMessage;
  51.     // The item which should receive the message
  52.     Recipient: BaseClasses.TItem;
  53.     // Creates the enveloped message
  54.     constructor Create(ARecipient: TItem; AMsg: TMessage);
  55.   end;
  56.   // This message is sent to <b>all aggregated items</b> during the initialization of the aggregate
  57.   TAggregateMsg = class(TMessage)
  58.     // The aggregate which aggregates the item
  59.     Aggregate: BaseClasses.TItem;
  60.     constructor Create(AAggregate: BaseClasses.TItem);
  61.   end;
  62. implementation
  63. { TItemNotificationMessage }
  64. constructor TItemNotificationMessage.Create(AItem: BaseClasses.TItem);
  65. begin
  66.   Item := AItem;
  67. end;
  68. { TReplaceItemMessage }
  69. constructor TReplaceMsg.Create(AOldItem, ANewItem: BaseClasses.TItem);
  70. begin
  71.   OldItem := AOldItem; NewItem := ANewItem;
  72. end;
  73. { TMessageEnvelope }
  74. constructor TMessageEnvelope.Create(ARecipient: TItem; AMsg: TMessage);
  75. begin
  76.   Recipient := ARecipient;
  77.   Message   := AMsg;
  78. end;
  79. { TAggregateMsg }
  80. constructor TAggregateMsg.Create(AAggregate: BaseClasses.TItem);
  81. begin
  82.   Aggregate := AAggregate;
  83. end;
  84. end.