本文整理汇总了C++中NetIO::getObjectAttributeHandle方法的典型用法代码示例。如果您正苦于以下问题:C++ NetIO::getObjectAttributeHandle方法的具体用法?C++ NetIO::getObjectAttributeHandle怎么用?C++ NetIO::getObjectAttributeHandle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NetIO
的用法示例。
在下文中一共展示了NetIO::getObjectAttributeHandle方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateBasicEntity
//------------------------------------------------------------------------------
// updateBasicEntity() -- (Output support)
// -- sets the BasicEntity attribute values that need to be updated
//
// -- We send all published BasicEntity attributes every time.
//
// The function isPlayerStateUpdateRequired() checking if the player's state
// needs to be resent. Therefore, we're not check the individual update
// required flags with isAttributeUpdateRequired(), but we do clear them
// with setAttributeUpdateRequiredFlag().
//
// (Also handles the host to network byte swapping)
//------------------------------------------------------------------------------
void Nib::updateBasicEntity(
RTI::AttributeHandleValuePairSet* attrs,
const double)
{
if (baseEntity != nullptr) {
// Our handler
NetIO* netIO = static_cast<NetIO*>(getNetIO());
// Our simulation
simulation::Simulation* ourSim = netIO->getSimulation();
// Get the player data
playerState2Nib();
// Entity ID
if (isAttributeUpdateEnabled(NetIO::ENTITY_IDENTIFIER_AI)) {
EntityIdentifierStruct* entityId = &baseEntity->entityIdentifier;
entityId->federateIdentifier.siteID = getSiteID();
entityId->federateIdentifier.applicationID = getApplicationID();
entityId->entityNumber = getPlayerID();
//std::cout << "Send Federate ID: (" << entityId->entityNumber << "," << entityId->federateIdentifier.applicationID << "," << entityId->federateIdentifier.siteID << ")" << std::endl;
EntityIdentifierStruct netBuffer;
base::NetHandler::toNetOrder(&netBuffer.federateIdentifier.applicationID, entityId->federateIdentifier.applicationID );
base::NetHandler::toNetOrder(&netBuffer.federateIdentifier.siteID, entityId->federateIdentifier.siteID );
base::NetHandler::toNetOrder(&netBuffer.entityNumber, entityId->entityNumber );
attrs->add(netIO->getObjectAttributeHandle(
NetIO::ENTITY_IDENTIFIER_AI),
reinterpret_cast<char*>(&netBuffer),
sizeof(EntityIdentifierStruct)
);
setAttributeUpdateRequiredFlag(NetIO::ENTITY_IDENTIFIER_AI, false);
}
// Entity Type
if (isAttributeUpdateEnabled(NetIO::ENTITY_TYPE_AI)) {
EntityTypeStruct* entityType = &baseEntity->entityType;
entityType->entityKind = getEntityKind();
entityType->domain = getEntityDomain();
entityType->countryCode = getEntityCountry();
entityType->category = getEntityCategory();
entityType->subcategory = getEntitySubcategory();
entityType->specific = getEntitySpecific();
entityType->extra = getEntityExtra();
// Network byte order: all bytes except country code which is unsigned short.
EntityTypeStruct netBuffer = *entityType;
base::NetHandler::toNetOrder(&netBuffer.countryCode, entityType->countryCode );
attrs->add(netIO->getObjectAttributeHandle(
NetIO::ENTITY_TYPE_AI),
reinterpret_cast<char*>(&netBuffer),
sizeof(EntityTypeStruct)
);
setAttributeUpdateRequiredFlag(NetIO::ENTITY_TYPE_AI, false);
}
// Spatial Structure
if (isAttributeUpdateEnabled(NetIO::SPATIAL_AI)) {
osg::Vec3d pos = getDrPosition();
osg::Vec3d vel = getDrVelocity();
osg::Vec3d accel = getDrAcceleration();
osg::Vec3d angles = getDrEulerAngles();
osg::Vec3d arates = getDrAngularVelocities();
// NIB's base entity structures
SpatialStruct* spatial = &(baseEntity->spatial);
SpatialRVStruct* spatialRvw = &(baseEntity->spatialRvw);
// Net order buffer (used to send the attribute to the RTI)
const unsigned int SPATIAL_NET_BUFFER_SIZE = sizeof(SpatialStruct) + sizeof(SpatialRVStruct);
unsigned char netBuffer[SPATIAL_NET_BUFFER_SIZE];
SpatialStruct* netSpatial = reinterpret_cast<SpatialStruct*>(&netBuffer[0]);
SpatialRVStruct* netSpatialRvw = reinterpret_cast<SpatialRVStruct*>(&netBuffer[sizeof(SpatialStruct)]);
// Ref Position
double refLat = 0.0;
double refLon = 0.0;
if (ourSim != nullptr) {
refLat = ourSim->getRefLatitude();
refLon = ourSim->getRefLongitude();
}
//.........这里部分代码省略.........