Checkpoint before a number of confusing changes

This commit is contained in:
Zach Fox 2017-04-10 13:13:13 -07:00
parent 297da90118
commit a16e261735
8 changed files with 24 additions and 31 deletions

View file

@ -583,7 +583,7 @@ Item {
// Function body by Howard Stearns 2017-01-08 // Function body by Howard Stearns 2017-01-08
function goToUserInDomain(avatarUuid) { function goToUserInDomain(avatarUuid) {
var avatar = AvatarList.getAvatarCopy(avatarUuid); var avatar = AvatarList.getAvatar(avatarUuid);
if (!avatar) { if (!avatar) {
console.log("This avatar is no longer present. goToUserInDomain() failed."); console.log("This avatar is no longer present. goToUserInDomain() failed.");
return; return;

View file

@ -620,8 +620,7 @@ public:
static float _avatarSortCoefficientCenter; static float _avatarSortCoefficientCenter;
static float _avatarSortCoefficientAge; static float _avatarSortCoefficientAge;
QHash<QString, int>& getJointIndices() { return _jointIndices; };
void setJointIndices(QHash<QString, int>& indices) { _jointIndices = indices; };
signals: signals:
void displayNameChanged(); void displayNameChanged();

View file

@ -30,22 +30,9 @@ QVector<QUuid> AvatarHashMap::getAvatarIdentifiers() {
return _avatarHash.keys().toVector(); return _avatarHash.keys().toVector();
} }
AvatarData* AvatarHashMap::getAvatar(QUuid avatarID) { QSharedPointer<AvatarData> AvatarHashMap::getAvatar(QUuid avatarID) {
// Null/Default-constructed QUuids will return MyAvatar // Null/Default-constructed QUuids will return MyAvatar
return getAvatarBySessionID(avatarID).get(); return QSharedPointer<AvatarData>(getAvatarBySessionID(avatarID).get());
}
AvatarData* AvatarHashMap::getAvatarCopy(QUuid avatarID) {
AvatarData* avatarDataOriginal = getAvatarBySessionID(avatarID).get();
AvatarData* avatarDataCopy { new AvatarData };
avatarDataCopy->setSessionUUID(avatarDataOriginal->getSessionUUID());
avatarDataCopy->setSessionDisplayName(avatarDataOriginal->getSessionDisplayName());
avatarDataCopy->setPosition(avatarDataOriginal->getPosition());
avatarDataCopy->setRotation(avatarDataOriginal->getRotation());
avatarDataCopy->setAudioLoudness(avatarDataOriginal->getAudioLoudness());
avatarDataCopy->setAudioAverageLoudness(avatarDataOriginal->getAudioAverageLoudness());
avatarDataCopy->setSkeletonModelURL(avatarDataOriginal->getSkeletonModelURL());
return avatarDataCopy;
} }
bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) { bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) {

View file

@ -37,8 +37,7 @@ public:
// Currently, your own avatar will be included as the null avatar id. // Currently, your own avatar will be included as the null avatar id.
Q_INVOKABLE QVector<QUuid> getAvatarIdentifiers(); Q_INVOKABLE QVector<QUuid> getAvatarIdentifiers();
Q_INVOKABLE AvatarData* getAvatar(QUuid avatarID); Q_INVOKABLE QSharedPointer<AvatarData> getAvatar(QUuid avatarID);
Q_INVOKABLE AvatarData* getAvatarCopy(QUuid avatarID);
virtual AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) const { return findAvatar(sessionID); } virtual AvatarSharedPointer getAvatarBySessionID(const QUuid& sessionID) const { return findAvatar(sessionID); }
int numberOfAvatarsInRange(const glm::vec3& position, float rangeMeters); int numberOfAvatarsInRange(const glm::vec3& position, float rangeMeters);

View file

@ -59,6 +59,8 @@ bool OffscreenGLCanvas::create(QOpenGLContext* sharedContext) {
bool OffscreenGLCanvas::makeCurrent() { bool OffscreenGLCanvas::makeCurrent() {
bool result = _context->makeCurrent(_offscreenSurface); bool result = _context->makeCurrent(_offscreenSurface);
Q_ASSERT(result);
std::call_once(_reportOnce, [this]{ std::call_once(_reportOnce, [this]{
qCDebug(glLogging) << "GL Version: " << QString((const char*) glGetString(GL_VERSION)); qCDebug(glLogging) << "GL Version: " << QString((const char*) glGetString(GL_VERSION));
qCDebug(glLogging) << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION)); qCDebug(glLogging) << "GL Shader Language Version: " << QString((const char*) glGetString(GL_SHADING_LANGUAGE_VERSION));

View file

@ -612,7 +612,11 @@ QObject* OffscreenQmlSurface::finishQmlLoad(std::function<void(QQmlContext*, QOb
return nullptr; return nullptr;
} }
connect(newItem, SIGNAL(sendToScript(QVariant)), this, SIGNAL(fromQml(QVariant))); //check if the item contains sendToScript signal
int sendToScriptIndex = newItem->metaObject()->indexOfSignal("sendToScript");
if (sendToScriptIndex != -1) {
connect(newItem, SIGNAL(sendToScript(QVariant)), this, SIGNAL(fromQml(QVariant)));
}
// The root item is ready. Associate it with the window. // The root item is ready. Associate it with the window.
_rootItem = newItem; _rootItem = newItem;

View file

@ -111,12 +111,14 @@ static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine) {
return QScriptValue(); return QScriptValue();
} }
QScriptValue avatarDataToScriptValue(QScriptEngine* engine, AvatarData* const &in) { QScriptValue avatarDataToScriptValue(QScriptEngine* engine, const AvatarSharedPointer& in) {
return engine->newQObject(in, QScriptEngine::ScriptOwnership, DEFAULT_QOBJECT_WRAP_OPTIONS); return engine->newQObject(new AvatarDataScriptingInterface(in), QScriptEngine::ScriptOwnership);
} }
void avatarDataFromScriptValue(const QScriptValue &object, AvatarData* &out) { void avatarDataFromScriptValue(const QScriptValue &object, AvatarData* &out) {
out = qobject_cast<AvatarData*>(object.toQObject()); if (auto avatarDataInterface = qobject_cast<AvatarDataScriptingInterface*>(object.toQObject())) {
out = avatarDataInterface->getAvatarData();
}
} }
Q_DECLARE_METATYPE(controller::InputController*) Q_DECLARE_METATYPE(controller::InputController*)

View file

@ -487,7 +487,7 @@ function populateNearbyUserList(selectData, oldAudioData) {
horizontalAngleNormal = filter && Quat.getUp(orientation); horizontalAngleNormal = filter && Quat.getUp(orientation);
avatarsOfInterest = {}; avatarsOfInterest = {};
avatars.forEach(function (id) { avatars.forEach(function (id) {
var avatar = AvatarList.getAvatarCopy(id); var avatar = AvatarList.getAvatar(id);
var name = avatar.sessionDisplayName; var name = avatar.sessionDisplayName;
if (!name) { if (!name) {
// Either we got a data packet but no identity yet, or something is really messed up. In any case, // Either we got a data packet but no identity yet, or something is really messed up. In any case,
@ -561,7 +561,7 @@ function updateOverlays() {
if (!id || !avatarsOfInterest[id]) { if (!id || !avatarsOfInterest[id]) {
return; // don't update ourself, or avatars we're not interested in return; // don't update ourself, or avatars we're not interested in
} }
var avatar = AvatarList.getAvatarCopy(id); var avatar = AvatarList.getAvatar(id);
if (!avatar) { if (!avatar) {
return; // will be deleted below if there had been an overlay. return; // will be deleted below if there had been an overlay.
} }
@ -574,10 +574,10 @@ function updateOverlays() {
var distance = Vec3.distance(target, eye); var distance = Vec3.distance(target, eye);
var offset = 0.2; var offset = 0.2;
var diff = Vec3.subtract(target, eye); // get diff between target and eye (a vector pointing to the eye from avatar position) var diff = Vec3.subtract(target, eye); // get diff between target and eye (a vector pointing to the eye from avatar position)
//var headIndex = avatar.getJointIndex("Head"); // base offset on 1/2 distance from hips to head if we can var headIndex = avatar.getJointIndex("Head"); // base offset on 1/2 distance from hips to head if we can
//if (headIndex > 0) { if (headIndex > 0) {
// offset = avatar.getAbsoluteJointTranslationInObjectFrame(headIndex).y / 2; offset = avatar.getAbsoluteJointTranslationInObjectFrame(headIndex).y / 2;
//} }
// move a bit in front, towards the camera // move a bit in front, towards the camera
target = Vec3.subtract(target, Vec3.multiply(Vec3.normalize(diff), offset)); target = Vec3.subtract(target, Vec3.multiply(Vec3.normalize(diff), offset));
@ -843,7 +843,7 @@ function getAudioLevel(id) {
// the VU meter should work similarly to the one in AvatarInputs: log scale, exponentially averaged // the VU meter should work similarly to the one in AvatarInputs: log scale, exponentially averaged
// But of course it gets the data at a different rate, so we tweak the averaging ratio and frequency // But of course it gets the data at a different rate, so we tweak the averaging ratio and frequency
// of updating (the latter for efficiency too). // of updating (the latter for efficiency too).
var avatar = AvatarList.getAvatarCopy(id); var avatar = AvatarList.getAvatar(id);
var audioLevel = 0.0; var audioLevel = 0.0;
var avgAudioLevel = 0.0; var avgAudioLevel = 0.0;
var data = id ? ExtendedOverlay.get(id) : myData; var data = id ? ExtendedOverlay.get(id) : myData;