void Streamer::processAttachedAreas() { for (boost::unordered_set<Item::SharedArea>::iterator a = attachedAreas.begin(); a != attachedAreas.end(); ++a) { if ((*a)->attach) { bool adjust = false; if ((*a)->attach->object.get<0>() != INVALID_GENERIC_ID) { switch ((*a)->attach->object.get<1>()) { case STREAMER_OBJECT_TYPE_GLOBAL: { adjust = GetObjectPos((*a)->attach->object.get<0>(), &(*a)->attach->position[0], &(*a)->attach->position[1], &(*a)->attach->position[2]); break; } case STREAMER_OBJECT_TYPE_PLAYER: { adjust = GetPlayerObjectPos((*a)->attach->object.get<2>(), (*a)->attach->object.get<0>(), &(*a)->attach->position[0], &(*a)->attach->position[1], &(*a)->attach->position[2]); break; } case STREAMER_OBJECT_TYPE_DYNAMIC: { boost::unordered_map<int, Item::SharedObject>::iterator o = core->getData()->objects.find((*a)->attach->object.get<0>()); if (o != core->getData()->objects.end()) { (*a)->attach->position = o->second->position; adjust = true; } break; } } } else if ((*a)->attach->player != INVALID_GENERIC_ID) { adjust = GetPlayerPos((*a)->attach->player, &(*a)->attach->position[0], &(*a)->attach->position[1], &(*a)->attach->position[2]); } else if ((*a)->attach->vehicle != INVALID_GENERIC_ID) { adjust = GetVehiclePos((*a)->attach->vehicle, &(*a)->attach->position[0], &(*a)->attach->position[1], &(*a)->attach->position[2]); } if (adjust) { if ((*a)->cell) { core->getGrid()->removeArea(*a, true); } } else { (*a)->attach->position.fill(std::numeric_limits<float>::infinity()); } } } }
void Object::UpdatePosition(bool offset, float xo, float yo, float zo, float rx, float ry, float rz) { x_ = xo; y_ = yo; z_ = zo; rx_ = rx; ry_ = ry; rz_ = rz; float *objectX = new float(); float *objectY = new float(); float *objectZ = new float(); for(auto it = playerObjectsOwned->begin(); it != playerObjectsOwned->end(); it++) { GetPlayerObjectPos(it->first, it->second, objectX, objectY, objectZ); MovePlayerObject(it->first, it->second, xo, yo, zo, 1000, rx, ry, rz); } delete objectX, objectY, objectZ; Save(); }