00001
00043 #define _EXPORT_CCL_
00044
00045
00046 #include "CigiSymbolCtrlV3_3.h"
00047 #include "CigiSwapping.h"
00048 #include "CigiExceptions.h"
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 CigiSymbolCtrlV3_3::CigiSymbolCtrlV3_3(void)
00060 {
00061 PacketID = CIGI_SYMBOL_CONTROL_PACKET_ID_V3_3;
00062 PacketSize = CIGI_SYMBOL_CONTROL_PACKET_SIZE_V3_3;
00063 Version = 3;
00064 MinorVersion = 3;
00065
00066 SymbolID = 0;
00067 SymbolState = CigiBaseSymbolCtrl::Hidden;
00068 AttachState = CigiBaseSymbolCtrl::Detach;
00069 FlashCtrl = CigiBaseSymbolCtrl::Continue;
00070 InheritColor = CigiBaseSymbolCtrl::NotInherit;
00071 ParentSymbolID = 0;
00072 SurfaceID = 0;
00073 Layer = 0;
00074 FlashDutyCycle = 0;
00075 FlashPeriod = 0.0;
00076 UPosition = 0.0;
00077 VPosition = 0.0;
00078 Rotation = 0.0;
00079 Red = 0;
00080 Green = 0;
00081 Blue = 0;
00082 Alpha = 0;
00083 ScaleU = 0.0;
00084 ScaleV = 0.0;
00085
00086 }
00087
00088
00089
00090
00091 CigiSymbolCtrlV3_3::~CigiSymbolCtrlV3_3(void)
00092 {
00093 }
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 int CigiSymbolCtrlV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00105 {
00106 PackPointer CDta;
00107
00108 CigiSymbolCtrlV3_3 * Data =
00109 ( CigiSymbolCtrlV3_3 *)Base;
00110
00111 CDta.c = Buff;
00112
00113 *CDta.c++ = PacketID;
00114 *CDta.c++ = PacketSize;
00115
00116 *CDta.s++ = Data->SymbolID;
00117
00118 unsigned char HDta = 0;
00119 HDta |= (Data->SymbolState & 0x03);
00120 HDta |= ((Data->AttachState << 2) & 0x04);
00121 HDta |= ((Data->FlashCtrl << 3) & 0x08);
00122 HDta |= ((Data->InheritColor << 4) & 0x10);
00123 *CDta.c++ = HDta;
00124
00125 *CDta.c++ = 0;
00126
00127 *CDta.s++ = Data->ParentSymbolID;
00128 *CDta.s++ = Data->SurfaceID;
00129 *CDta.c++ = Data->Layer;
00130 *CDta.c++ = Data->FlashDutyCycle;
00131 *CDta.f++ = Data->FlashPeriod;
00132 *CDta.f++ = Data->UPosition;
00133 *CDta.f++ = Data->VPosition;
00134 *CDta.f++ = Data->Rotation;
00135 *CDta.c++ = Data->Red;
00136 *CDta.c++ = Data->Green;
00137 *CDta.c++ = Data->Blue;
00138 *CDta.c++ = Data->Alpha;
00139 *CDta.f++ = Data->ScaleU;
00140 *CDta.f++ = Data->ScaleV;
00141
00142
00143 return(PacketSize);
00144
00145 }
00146
00147
00148
00149
00150 int CigiSymbolCtrlV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00151 {
00152 PackPointer CDta;
00153 unsigned char HDta = 0;
00154
00155 CDta.c = Buff;
00156
00157 CDta.c += 2;
00158
00159 if(!Swap)
00160 {
00161
00162 SymbolID = *CDta.s++;
00163
00164 HDta = *CDta.c++;
00165
00166 CDta.c++;
00167
00168 ParentSymbolID = *CDta.s++;
00169 SurfaceID = *CDta.s++;
00170 Layer = *CDta.c++;
00171 FlashDutyCycle = *CDta.c++;
00172 FlashPeriod = *CDta.f++;
00173 UPosition = *CDta.f++;
00174 VPosition = *CDta.f++;
00175 Rotation = *CDta.f++;
00176 Red = *CDta.c++;
00177 Green = *CDta.c++;
00178 Blue = *CDta.c++;
00179 Alpha = *CDta.c++;
00180 ScaleU = *CDta.f++;
00181 ScaleV = *CDta.f++;
00182
00183 }
00184 else
00185 {
00186
00187 CigiSwap2(&SymbolID, CDta.s++);
00188
00189 HDta = *CDta.c++;
00190
00191 CDta.c++;
00192
00193 CigiSwap2(&ParentSymbolID, CDta.s++);
00194 CigiSwap2(&SurfaceID, CDta.s++);
00195 Layer = *CDta.c++;
00196 FlashDutyCycle = *CDta.c++;
00197 CigiSwap4(&FlashPeriod, CDta.f++);
00198 CigiSwap4(&UPosition, CDta.f++);
00199 CigiSwap4(&VPosition, CDta.f++);
00200 CigiSwap4(&Rotation, CDta.f++);
00201 Red = *CDta.c++;
00202 Green = *CDta.c++;
00203 Blue = *CDta.c++;
00204 Alpha = *CDta.c++;
00205 CigiSwap4(&ScaleU, CDta.f++);
00206 CigiSwap4(&ScaleV, CDta.f++);
00207
00208 }
00209
00210 SymbolState = (SymbolStateGrp)(HDta & 0x03);
00211 AttachState = (AttachStateGrp)((HDta >> 2) & 0x01);
00212 FlashCtrl = (FlashCtrlGrp)((HDta >> 3) & 0x01);
00213 InheritColor = (InheritColorGrp)((HDta >> 4) & 0x01);
00214
00215 return(PacketSize);
00216
00217 }
00218
00219
00220
00221