00001
00040 #define _EXPORT_CCL_
00041
00042
00043 #include "CigiSymbolSurfaceDefV3_3.h"
00044 #include "CigiSwapping.h"
00045 #include "CigiExceptions.h"
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 CigiSymbolSurfaceDefV3_3::CigiSymbolSurfaceDefV3_3(void)
00057 {
00058 PacketID = CIGI_SYMBOL_SURFACE_DEF_PACKET_ID_V3_3;
00059 PacketSize = CIGI_SYMBOL_SURFACE_DEF_PACKET_SIZE_V3_3;
00060 Version = 3;
00061 MinorVersion = 3;
00062 SurfaceID = 0;
00063 SurfaceState = CigiBaseSymbolSurfaceDef::Active;
00064 Attached = CigiBaseSymbolSurfaceDef::EntityAttached;
00065 BillboardState = CigiBaseSymbolSurfaceDef::NotBillboard;
00066 PerspectiveGrowth = CigiBaseSymbolSurfaceDef::Enable;
00067 EntityViewID = 0;
00068 XLeft = 0.0;
00069 YRight = 0.0;
00070 ZTop = 0.0;
00071 YawBottom = 0.0;
00072 Pitch = 0.0;
00073 Roll = 0.0;
00074 Width = 0.0;
00075 Height = 0.0;
00076 MinU = 0.0;
00077 MaxU = 0.0;
00078 MinV = 0.0;
00079 MaxV = 0.0;
00080 }
00081
00082
00083
00084
00085 CigiSymbolSurfaceDefV3_3::~CigiSymbolSurfaceDefV3_3(void)
00086 {
00087 }
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 int CigiSymbolSurfaceDefV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00099 {
00100 PackPointer CDta;
00101
00102 CigiSymbolSurfaceDefV3_3 * Data =
00103 ( CigiSymbolSurfaceDefV3_3 *)Base;
00104
00105 CDta.c = Buff;
00106
00107 *CDta.c++ = PacketID;
00108 *CDta.c++ = PacketSize;
00109
00110 *CDta.s++ = Data->SurfaceID;
00111
00112 unsigned char HDta = 0;
00113 HDta |= (Data->SurfaceState & 0x01);
00114 HDta |= ((Data->Attached << 1) & 0x02);
00115 HDta |= ((Data->BillboardState << 2) & 0x04);
00116 HDta |= ((Data->PerspectiveGrowth << 3) & 0x08);
00117 *CDta.c++ = HDta;
00118
00119 *CDta.c++ = 0;
00120 *CDta.s++ = Data->EntityViewID;
00121 *CDta.f++ = Data->XLeft;
00122 *CDta.f++ = Data->YRight;
00123 *CDta.f++ = Data->ZTop;
00124 *CDta.f++ = Data->YawBottom;
00125
00126 if(Attached == Data->EntityAttached)
00127 {
00128 *CDta.f++ = Data->Pitch;
00129 *CDta.f++ = Data->Roll;
00130 *CDta.f++ = Data->Width;
00131 *CDta.f++ = Data->Height;
00132 }
00133 else
00134 {
00135 *CDta.l++ = 0;
00136 *CDta.l++ = 0;
00137 *CDta.l++ = 0;
00138 *CDta.l++ = 0;
00139 }
00140
00141 *CDta.f++ = Data->MinU;
00142 *CDta.f++ = Data->MaxU;
00143 *CDta.f++ = Data->MinV;
00144 *CDta.f++ = Data->MaxV;
00145
00146 return(PacketSize);
00147
00148 }
00149
00150
00151
00152
00153 int CigiSymbolSurfaceDefV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00154 {
00155 PackPointer CDta;
00156 unsigned char HDta = 0;
00157
00158 CDta.c = Buff;
00159
00160 CDta.c += 2;
00161
00162 if(!Swap)
00163 {
00164 SurfaceID = *CDta.s++;
00165
00166 HDta = *CDta.c++;
00167 Attached = (AttachStateGrp)((HDta >> 1) & 0x01);
00168 CDta.c++;
00169
00170 EntityViewID = *CDta.s++;
00171 XLeft = *CDta.f++;
00172 YRight = *CDta.f++;
00173 ZTop = *CDta.f++;
00174 YawBottom = *CDta.f++;
00175
00176 if(Attached == EntityAttached)
00177 {
00178 Pitch = *CDta.f++;
00179 Roll = *CDta.f++;
00180 Width = *CDta.f++;
00181 Height = *CDta.f++;
00182 }
00183 else
00184 {
00185 CDta.l += 4;
00186
00187 Pitch = 0.0f;
00188 Roll = 0.0f;
00189 Width = 0.0f;
00190 Height = 0.0f;
00191 }
00192
00193 MinU = *CDta.f++;
00194 MaxU = *CDta.f++;
00195 MinV = *CDta.f++;
00196 MaxV = *CDta.f++;
00197 }
00198 else
00199 {
00200 CigiSwap2(&SurfaceID, CDta.s++);
00201
00202 HDta = *CDta.c++;
00203 Attached = (AttachStateGrp)((HDta >> 1) & 0x01);
00204 CDta.c++;
00205
00206 CigiSwap2(&EntityViewID, CDta.s++);
00207 CigiSwap4(&XLeft, CDta.f++);
00208 CigiSwap4(&YRight, CDta.f++);
00209 CigiSwap4(&ZTop, CDta.f++);
00210 CigiSwap4(&YawBottom, CDta.f++);
00211
00212 if(Attached == EntityAttached)
00213 {
00214 CigiSwap4(&Pitch, CDta.f++);
00215 CigiSwap4(&Roll, CDta.f++);
00216 CigiSwap4(&Width, CDta.f++);
00217 CigiSwap4(&Height, CDta.f++);
00218 }
00219 else
00220 {
00221 CDta.l += 4;
00222
00223 Pitch = 0.0f;
00224 Roll = 0.0f;
00225 Width = 0.0f;
00226 Height = 0.0f;
00227 }
00228
00229 CigiSwap4(&MinU, CDta.f++);
00230 CigiSwap4(&MaxU, CDta.f++);
00231 CigiSwap4(&MinV, CDta.f++);
00232 CigiSwap4(&MaxV, CDta.f++);
00233 }
00234
00235 SurfaceState = (StateGrp)(HDta & 0x01);
00236 BillboardState = (BillboardStateGrp)((HDta >> 2) & 0x01);
00237 PerspectiveGrowth = (PerspectiveGrowthStateGrp)((HDta >> 3) & 0x01);
00238
00239 return(PacketSize);
00240
00241 }
00242
00243
00244
00245