コード例 #1
0
dmz::Boolean
dmz::NetExtPacketCodecObjectNative::encode_object (
      const Handle ObjectHandle,
      const NetObjectEncodeEnum EncodeMode,
      Marshal &data) {

   Boolean result (False);

   if (_attrMod && _objMod) {

      UUID objectID;

      if (_objMod->lookup_uuid (ObjectHandle, objectID)) {

         data.set_next_uuid (_SysID);
         data.set_next_uuid (objectID);

         if (EncodeMode == NetObjectDeactivate) {

            data.set_next_int8 (0);
            result = True;
         }
         else {

            const ObjectType Type (_objMod->lookup_object_type (ObjectHandle));
            ArrayUInt32 typeArray;

            if (_attrMod->to_net_object_type (Type, typeArray)) {

               const Int32 TypeSize (typeArray.get_size ());
               data.set_next_int8 (Int8 (TypeSize));

               for (Int32 ix = 0; ix < TypeSize; ix++) {

                  data.set_next_uint8 (UInt8 (typeArray.get (ix)));
               }

               ObjectAttributeAdapter *current (_adapterList);

               while (current) {

                  current->encode (ObjectHandle, *_objMod, data);
                  current = current->next;
               }

               result = True;
            }

            _objMod->store_time_stamp (
               ObjectHandle,
               _lnvHandle,
               _time.get_last_frame_time ());
         }
      }
   }

   return result;
}
コード例 #2
0
dmz::Boolean
dmz::NetExtPacketCodecObjectBasic::encode_object (
      const Handle ObjectHandle,
      const NetObjectEncodeEnum EncodeMode,
      Marshal &data) {

   Boolean result (False);

   if (_attrMod && _objMod) {

      UUID uuid;

      if (_objMod->lookup_uuid (ObjectHandle, uuid)) {

         const ObjectType Type (_objMod->lookup_object_type (ObjectHandle));
         ArrayUInt32 typeArray;

         if (_attrMod->to_net_object_type (Type, typeArray)) {

            Vector pos;
            Matrix ori;
            Vector vel;
            ArrayUInt32 stateArray;
            Mask state;

            _objMod->lookup_position (ObjectHandle, _defaultHandle, pos);
            _objMod->lookup_orientation (ObjectHandle, _defaultHandle, ori);
            _objMod->lookup_velocity (ObjectHandle, _defaultHandle, vel);
            _objMod->lookup_state (ObjectHandle, _defaultHandle, state);

            if (EncodeMode == NetObjectDeactivate) {

               state |= _deactivateState;
            }

            _attrMod->to_net_object_mask (Type, state, stateArray);

            data.set_next_uuid (_SysID);
            data.set_next_uuid (uuid);
            data.set_next_vector (pos);
            data.set_next_matrix (ori);
            data.set_next_vector (vel);
            data.set_next_uint32 (typeArray.get (0));
            data.set_next_uint32 (typeArray.get (1));
            data.set_next_uint32 (typeArray.get (2));
            data.set_next_uint32 (stateArray.get (0));

            const Int32 Place (data.get_place ());

            data.set_next_uint32 (0);

            UInt32 scalarCount (0);

            HashTableHandleIterator it;

            ScalarStruct *ss (_scalarTable.get_first (it));

            while (ss) {

               Float64 value (0.0);

               if (_objMod->lookup_scalar (ObjectHandle, ss->AttrHandle, value)) {

                  data.set_next_uint32 (ss->NetHandle);
                  data.set_next_float64 (value);
                  scalarCount++;

                  if (ss->LNVAttrHandle) {

                     _objMod->store_scalar (ObjectHandle, ss->LNVAttrHandle, value);
                  }
               }

               ss = _scalarTable.get_next (it);
            }

            const Int32 EndPlace (data.get_place ());
            data.set_place (Place);
            data.set_next_uint32 (scalarCount);
            data.set_place (EndPlace);

            _objMod->store_time_stamp (
               ObjectHandle,
               _lnvHandle,
               _time.get_last_frame_time ());

            _objMod->store_position (ObjectHandle, _lnvHandle, pos);
            _objMod->store_orientation (ObjectHandle, _lnvHandle, ori);
            _objMod->store_velocity (ObjectHandle, _lnvHandle, vel);

            if (EncodeMode != NetObjectDeactivate) {

               _objMod->store_state (ObjectHandle, _lnvHandle, state);
            }

            result = True;
         }
      }
   }

   return result;
}