mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
Reduce communications load when making a user connection
This commit is contained in:
parent
0ff91e5926
commit
4327906630
1 changed files with 61 additions and 33 deletions
|
@ -111,10 +111,20 @@
|
|||
var connectingHandJointIndex = -1;
|
||||
var waitingList = {};
|
||||
var particleEffect;
|
||||
var particleRotationAngle = 0.0;
|
||||
var particleEmitRate;
|
||||
var INITIAL_PARTICLE_EMIT_RATE = 500;
|
||||
var MINIMUM_PARTICLE_EMIT_RATE = 50;
|
||||
var PARTICLE_DECAY_RATE = 0.5;
|
||||
var particleEffectUpdateTimer = null;
|
||||
var PARTICLE_EFFECT_UPDATE_INTERVAL = 50;
|
||||
var makingConnectionParticleEffect;
|
||||
var makingConnectionEmitRate = 2000;
|
||||
var particleEmitRate = 500;
|
||||
var makingConnectionEmitRate;
|
||||
var isMakingConnectionEmitting;
|
||||
var INITIAL_MAKING_CONNECTION_EMIT_RATE = 1000;
|
||||
var MINIMUM_MAKING_CONNECTION_EMIT_RATE = 20;
|
||||
var MAKING_CONNECTION_DECAY_RATE = 0.5;
|
||||
var makingConnectionUpdateTimer = null;
|
||||
var MAKING_CONNECTION_UPDATE_INTERVAL = 50;
|
||||
var handshakeInjector;
|
||||
var successfulHandshakeInjector;
|
||||
var handshakeSound;
|
||||
|
@ -239,12 +249,20 @@
|
|||
}
|
||||
|
||||
function deleteParticleEffect() {
|
||||
if (particleEffectUpdateTimer) {
|
||||
Script.clearTimeout(particleEffectUpdateTimer);
|
||||
particleEffectUpdateTimer = null;
|
||||
}
|
||||
if (particleEffect) {
|
||||
particleEffect = Entities.deleteEntity(particleEffect);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteMakeConnectionParticleEffect() {
|
||||
if (makingConnectionUpdateTimer) {
|
||||
Script.clearTimeout(makingConnectionUpdateTimer);
|
||||
makingConnectionUpdateTimer = null;
|
||||
}
|
||||
if (makingConnectionParticleEffect) {
|
||||
makingConnectionParticleEffect = Entities.deleteEntity(makingConnectionParticleEffect);
|
||||
}
|
||||
|
@ -257,15 +275,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
function calcParticlePos(myHandPosition, otherHandPosition, otherOrientation, reset) {
|
||||
if (reset) {
|
||||
particleRotationAngle = 0.0;
|
||||
function updateMakingConnection() {
|
||||
makingConnectionEmitRate = Math.max(makingConnectionEmitRate * MAKING_CONNECTION_DECAY_RATE,
|
||||
MINIMUM_MAKING_CONNECTION_EMIT_RATE);
|
||||
isMakingConnectionEmitting = true;
|
||||
Entities.editEntity(makingConnectionParticleEffect, {
|
||||
emitRate: makingConnectionEmitRate,
|
||||
isEmitting: true
|
||||
});
|
||||
if (makingConnectionEmitRate > MINIMUM_MAKING_CONNECTION_EMIT_RATE) {
|
||||
makingConnectionUpdateTimer = Script.setTimeout(makingConnectionUpdateTimer, MAKING_CONNECTION_UPDATE_INTERVAL);
|
||||
} else {
|
||||
makingConnectionUpdateTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
function updateParticleEffect() {
|
||||
particleEmitRate = Math.max(MINIMUM_PARTICLE_EMIT_RATE, particleEmitRate * PARTICLE_DECAY_RATE);
|
||||
Entities.editEntity(particleEffect, {
|
||||
emitRate: particleEmitRate
|
||||
});
|
||||
if (particleEmitRate > MINIMUM_PARTICLE_EMIT_RATE) {
|
||||
particleEffectUpdateTimer = Script.setTimeout(updateParticleEffect, PARTICLE_EFFECT_UPDATE_INTERVAL);
|
||||
} else {
|
||||
particleEffectUpdateTimer = null;
|
||||
}
|
||||
var position = positionFractionallyTowards(myHandPosition, otherHandPosition, 0.5);
|
||||
particleRotationAngle += PARTICLE_ANGLE_INCREMENT; // about 0.5 hz
|
||||
var radius = Math.min(PARTICLE_RADIUS, PARTICLE_RADIUS * particleRotationAngle / 360);
|
||||
var axis = Vec3.mix(Quat.getFront(MyAvatar.orientation), Quat.inverse(Quat.getFront(otherOrientation)), 0.5);
|
||||
return Vec3.sum(position, Vec3.multiplyQbyV(Quat.angleAxis(particleRotationAngle, axis), {x: 0, y: radius, z: 0}));
|
||||
}
|
||||
|
||||
// this is called frequently, but usually does nothing
|
||||
|
@ -301,41 +335,35 @@
|
|||
positionFractionallyTowards(myHandPosition, otherHandPosition, 0.5);
|
||||
// now manage the rest of the entity
|
||||
if (!particleEffect) {
|
||||
particleRotationAngle = 0.0;
|
||||
particleEmitRate = 500;
|
||||
particleEmitRate = INITIAL_PARTICLE_EMIT_RATE;
|
||||
particleProps = PARTICLE_EFFECT_PROPS;
|
||||
particleProps.isEmitting = 0;
|
||||
particleProps.position = calcParticlePos(myHandPosition, otherHandPosition, otherOrientation);
|
||||
particleProps.position = positionFractionallyTowards(myHandPosition, otherHandPosition, 0.5);
|
||||
particleProps.parentID = MyAvatar.sessionUUID;
|
||||
particleEffect = Entities.addEntity(particleProps, true);
|
||||
} else {
|
||||
particleProps.position = calcParticlePos(myHandPosition, otherHandPosition, otherOrientation);
|
||||
particleProps.isEmitting = 1;
|
||||
Entities.editEntity(particleEffect, particleProps);
|
||||
}
|
||||
if (!makingConnectionParticleEffect) {
|
||||
var props = MAKING_CONNECTION_PARTICLE_PROPS;
|
||||
props.parentID = MyAvatar.sessionUUID;
|
||||
makingConnectionEmitRate = 2000;
|
||||
makingConnectionEmitRate = INITIAL_MAKING_CONNECTION_EMIT_RATE;
|
||||
props.emitRate = makingConnectionEmitRate;
|
||||
props.isEmitting = false;
|
||||
props.position = myHandPosition;
|
||||
makingConnectionParticleEffect = Entities.addEntity(props, true);
|
||||
} else {
|
||||
makingConnectionEmitRate *= 0.5;
|
||||
Entities.editEntity(makingConnectionParticleEffect, {
|
||||
emitRate: makingConnectionEmitRate,
|
||||
position: myHandPosition,
|
||||
isEmitting: true
|
||||
});
|
||||
makingConnectionUpdateTimer = Script.setTimeout(updateMakingConnection, MAKING_CONNECTION_UPDATE_INTERVAL);
|
||||
}
|
||||
break;
|
||||
case STATES.MAKING_CONNECTION:
|
||||
particleEmitRate = Math.max(50, particleEmitRate * 0.5);
|
||||
Entities.editEntity(makingConnectionParticleEffect, {emitRate: 0, isEmitting: 0, position: myHandPosition});
|
||||
Entities.editEntity(particleEffect, {
|
||||
position: calcParticlePos(myHandPosition, otherHandPosition, otherOrientation),
|
||||
emitRate: particleEmitRate
|
||||
});
|
||||
if (makingConnectionUpdateTimer) {
|
||||
Script.clearTimeout(makingConnectionUpdateTimer);
|
||||
makingConnectionUpdateTimer = null;
|
||||
}
|
||||
if (isMakingConnectionEmitting) {
|
||||
Entities.editEntity(makingConnectionParticleEffect, { isEmitting: false });
|
||||
isMakingConnectionEmitting = false;
|
||||
}
|
||||
if (!particleEffectUpdateTimer && particleEmitRate > MINIMUM_PARTICLE_EMIT_RATE) {
|
||||
particleEffectUpdateTimer = Script.setTimeout(updateParticleEffect, PARTICLE_EFFECT_UPDATE_INTERVAL);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
debug("unexpected state", state);
|
||||
|
|
Loading…
Reference in a new issue