mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
move agent scripting interface to its own class to get rid of deprecated API
This commit is contained in:
parent
db8846796f
commit
e2d7431456
6 changed files with 154 additions and 54 deletions
|
@ -50,6 +50,7 @@
|
|||
#include "entities/AssignmentParentFinder.h"
|
||||
#include "RecordingScriptingInterface.h"
|
||||
#include "AbstractAudioInterface.h"
|
||||
#include "AgentScriptingInterface.h"
|
||||
|
||||
|
||||
static const int RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES = 10;
|
||||
|
@ -452,7 +453,7 @@ void Agent::executeScript() {
|
|||
packetReceiver.registerListener(PacketType::AvatarIdentity, avatarHashMap.data(), "processAvatarIdentityPacket");
|
||||
|
||||
// register ourselves to the script engine
|
||||
_scriptEngine->registerGlobalObject("Agent", this);
|
||||
_scriptEngine->registerGlobalObject("Agent", new AgentScriptingInterface(this));
|
||||
|
||||
_scriptEngine->registerGlobalObject("SoundCache", DependencyManager::get<SoundCache>().data());
|
||||
_scriptEngine->registerGlobalObject("AnimationCache", DependencyManager::get<AnimationCache>().data());
|
||||
|
|
|
@ -33,19 +33,6 @@
|
|||
#include "entities/EntityTreeHeadlessViewer.h"
|
||||
#include "avatars/ScriptableAvatar.h"
|
||||
|
||||
/**jsdoc
|
||||
* @namespace Agent
|
||||
*
|
||||
* @hifi-assignment-client
|
||||
*
|
||||
* @property {boolean} isAvatar
|
||||
* @property {boolean} isPlayingAvatarSound <em>Read-only.</em>
|
||||
* @property {boolean} isListeningToAudioStream
|
||||
* @property {boolean} isNoiseGateEnabled
|
||||
* @property {number} lastReceivedAudioLoudness <em>Read-only.</em>
|
||||
* @property {Uuid} sessionUUID <em>Read-only.</em>
|
||||
*/
|
||||
|
||||
class Agent : public ThreadedAssignment {
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -73,28 +60,11 @@ public:
|
|||
virtual void aboutToFinish() override;
|
||||
|
||||
public slots:
|
||||
/**jsdoc
|
||||
* @function Agent.run
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
void run() override;
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.playAvatarSound
|
||||
* @param {object} avatarSound
|
||||
*/
|
||||
void playAvatarSound(SharedSoundPointer avatarSound);
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.setIsAvatar
|
||||
* @param {boolean} isAvatar
|
||||
*/
|
||||
void setIsAvatar(bool isAvatar);
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.isAvatar
|
||||
* @returns {boolean}
|
||||
*/
|
||||
void setIsAvatar(bool isAvatar);
|
||||
bool isAvatar() const { return _isAvatar; }
|
||||
|
||||
private slots:
|
||||
|
|
16
assignment-client/src/AgentScriptingInterface.cpp
Normal file
16
assignment-client/src/AgentScriptingInterface.cpp
Normal file
|
@ -0,0 +1,16 @@
|
|||
//
|
||||
// AgentScriptingInterface.cpp
|
||||
// assignment-client/src
|
||||
//
|
||||
// Created by Thijs Wenker on 7/23/18.
|
||||
// Copyright 2018 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "AgentScriptingInterface.h"
|
||||
|
||||
AgentScriptingInterface::AgentScriptingInterface(Agent* agent) :
|
||||
_agent(agent)
|
||||
{ }
|
80
assignment-client/src/AgentScriptingInterface.h
Normal file
80
assignment-client/src/AgentScriptingInterface.h
Normal file
|
@ -0,0 +1,80 @@
|
|||
//
|
||||
// AgentScriptingInterface.h
|
||||
// assignment-client/src
|
||||
//
|
||||
// Created by Thijs Wenker on 7/23/18.
|
||||
// Copyright 2018 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#ifndef hifi_AgentScriptingInterface_h
|
||||
#define hifi_AgentScriptingInterface_h
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "Agent.h"
|
||||
|
||||
/**jsdoc
|
||||
* @namespace Agent
|
||||
*
|
||||
* @hifi-assignment-client
|
||||
*
|
||||
* @property {boolean} isAvatar
|
||||
* @property {boolean} isPlayingAvatarSound <em>Read-only.</em>
|
||||
* @property {boolean} isListeningToAudioStream
|
||||
* @property {boolean} isNoiseGateEnabled
|
||||
* @property {number} lastReceivedAudioLoudness <em>Read-only.</em>
|
||||
* @property {Uuid} sessionUUID <em>Read-only.</em>
|
||||
*/
|
||||
class AgentScriptingInterface : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool isAvatar READ isAvatar WRITE setIsAvatar)
|
||||
Q_PROPERTY(bool isPlayingAvatarSound READ isPlayingAvatarSound)
|
||||
Q_PROPERTY(bool isListeningToAudioStream READ isListeningToAudioStream WRITE setIsListeningToAudioStream)
|
||||
Q_PROPERTY(bool isNoiseGateEnabled READ isNoiseGateEnabled WRITE setIsNoiseGateEnabled)
|
||||
Q_PROPERTY(float lastReceivedAudioLoudness READ getLastReceivedAudioLoudness)
|
||||
Q_PROPERTY(QUuid sessionUUID READ getSessionUUID)
|
||||
|
||||
public:
|
||||
AgentScriptingInterface(Agent* agent);
|
||||
|
||||
bool isPlayingAvatarSound() const { return _agent->isPlayingAvatarSound(); }
|
||||
|
||||
bool isListeningToAudioStream() const { return _agent->isListeningToAudioStream(); }
|
||||
void setIsListeningToAudioStream(bool isListeningToAudioStream) const { _agent->setIsListeningToAudioStream(isListeningToAudioStream); }
|
||||
|
||||
bool isNoiseGateEnabled() const { return _agent->isNoiseGateEnabled(); }
|
||||
void setIsNoiseGateEnabled(bool isNoiseGateEnabled) const { _agent->setIsNoiseGateEnabled(isNoiseGateEnabled); }
|
||||
|
||||
float getLastReceivedAudioLoudness() const { return _agent->getLastReceivedAudioLoudness(); }
|
||||
QUuid getSessionUUID() const { return _agent->getSessionUUID(); }
|
||||
|
||||
public slots:
|
||||
/**jsdoc
|
||||
* @function Agent.setIsAvatar
|
||||
* @param {boolean} isAvatar
|
||||
*/
|
||||
void setIsAvatar(bool isAvatar) const { _agent->setIsAvatar(isAvatar); }
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.isAvatar
|
||||
* @returns {boolean}
|
||||
*/
|
||||
bool isAvatar() const { return _agent->isAvatar(); }
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.playAvatarSound
|
||||
* @param {object} avatarSound
|
||||
*/
|
||||
void playAvatarSound(SharedSoundPointer avatarSound) const { _agent->playAvatarSound(avatarSound); }
|
||||
|
||||
private:
|
||||
Agent* _agent;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // hifi_AgentScriptingInterface_h
|
|
@ -29,34 +29,16 @@ public:
|
|||
void addPacketStatsAndSendStatsPacket(QJsonObject statsObject);
|
||||
|
||||
public slots:
|
||||
// JSDoc: Overridden in Agent.h.
|
||||
/// threaded run of assignment
|
||||
virtual void run() = 0;
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.stop
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
Q_INVOKABLE virtual void stop() { setFinished(true); }
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.sendStatsPacket
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
virtual void sendStatsPacket();
|
||||
|
||||
/**jsdoc
|
||||
* @function Agent.clearQueuedCheckIns
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
void clearQueuedCheckIns() { _numQueuedCheckIns = 0; }
|
||||
|
||||
signals:
|
||||
/**jsdoc
|
||||
* @function Agent.finished
|
||||
* @returns {Signal}
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
void finished();
|
||||
|
||||
protected:
|
||||
|
@ -68,10 +50,6 @@ protected:
|
|||
int _numQueuedCheckIns { 0 };
|
||||
|
||||
protected slots:
|
||||
/**jsdoc
|
||||
* @function Agent.domainSettingsRequestFailed
|
||||
* @deprecated This function is being removed from the API.
|
||||
*/
|
||||
void domainSettingsRequestFailed();
|
||||
|
||||
private slots:
|
||||
|
|
55
scripts/developer/tests/agentAPITest.js
Normal file
55
scripts/developer/tests/agentAPITest.js
Normal file
|
@ -0,0 +1,55 @@
|
|||
// agentAPITest.js
|
||||
// scripts/developer/tests
|
||||
//
|
||||
// Created by Thijs Wenker on 7/23/18.
|
||||
// Copyright 2018 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
var SOUND_DATA = { url: "http://hifi-content.s3.amazonaws.com/howard/sounds/piano1.wav" };
|
||||
|
||||
// getSound function from crowd-agent.js
|
||||
function getSound(data, callback) { // callback(sound) when downloaded (which may be immediate).
|
||||
var sound = SoundCache.getSound(data.url);
|
||||
if (sound.downloaded) {
|
||||
return callback(sound);
|
||||
}
|
||||
function onDownloaded() {
|
||||
sound.ready.disconnect(onDownloaded);
|
||||
callback(sound);
|
||||
}
|
||||
sound.ready.connect(onDownloaded);
|
||||
}
|
||||
|
||||
|
||||
function agentAPITest() {
|
||||
console.warn('Agent.isAvatar =', Agent.isAvatar);
|
||||
|
||||
Agent.isAvatar = true;
|
||||
console.warn('Agent.isAvatar =', Agent.isAvatar);
|
||||
|
||||
console.warn('Agent.isListeningToAudioStream =', Agent.isListeningToAudioStream);
|
||||
|
||||
Agent.isListeningToAudioStream = true;
|
||||
console.warn('Agent.isListeningToAudioStream =', Agent.isListeningToAudioStream);
|
||||
|
||||
console.warn('Agent.isNoiseGateEnabled =', Agent.isNoiseGateEnabled);
|
||||
|
||||
Agent.isNoiseGateEnabled = true;
|
||||
console.warn('Agent.isNoiseGateEnabled =', Agent.isNoiseGateEnabled);
|
||||
console.warn('Agent.lastReceivedAudioLoudness =', Agent.lastReceivedAudioLoudness);
|
||||
console.warn('Agent.sessionUUID =', Agent.sessionUUID);
|
||||
|
||||
getSound(SOUND_DATA, function (sound) {
|
||||
console.warn('Agent.isPlayingAvatarSound =', Agent.isPlayingAvatarSound);
|
||||
Agent.playAvatarSound(sound);
|
||||
console.warn('Agent.isPlayingAvatarSound =', Agent.isPlayingAvatarSound);
|
||||
});
|
||||
}
|
||||
|
||||
if (Script.context === "agent") {
|
||||
agentAPITest();
|
||||
} else {
|
||||
console.error('This script should be run as agent script. EXITING.');
|
||||
}
|
Loading…
Reference in a new issue