mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into orange
This commit is contained in:
commit
5c877560fe
4 changed files with 173 additions and 75 deletions
|
@ -478,6 +478,25 @@ function MyController(hand) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.searchIndicatorOn = function(handPosition, distantPickRay) {
|
||||||
|
var SEARCH_SPHERE_SIZE = 0.011;
|
||||||
|
var SEARCH_SPHERE_FOLLOW_RATE = 0.50;
|
||||||
|
|
||||||
|
if (this.intersectionDistance > 0) {
|
||||||
|
// If we hit something with our pick ray, move the search sphere toward that distance
|
||||||
|
this.searchSphereDistance = this.searchSphereDistance * SEARCH_SPHERE_FOLLOW_RATE +
|
||||||
|
this.intersectionDistance * (1.0 - SEARCH_SPHERE_FOLLOW_RATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
var searchSphereLocation = Vec3.sum(distantPickRay.origin,
|
||||||
|
Vec3.multiply(distantPickRay.direction, this.searchSphereDistance));
|
||||||
|
this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance,
|
||||||
|
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
|
||||||
|
if ((USE_OVERLAY_LINES_FOR_SEARCHING === true) && PICK_WITH_HAND_RAY) {
|
||||||
|
this.overlayLineOn(handPosition, searchSphereLocation,
|
||||||
|
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.handleDistantParticleBeam = function(handPosition, objectPosition, color) {
|
this.handleDistantParticleBeam = function(handPosition, objectPosition, color) {
|
||||||
|
|
||||||
|
@ -921,7 +940,8 @@ function MyController(hand) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.state == STATE_SEARCHING && !isPhysical && distance > NEAR_PICK_MAX_DISTANCE && !near) {
|
if (this.state == STATE_SEARCHING &&
|
||||||
|
!isPhysical && distance > NEAR_PICK_MAX_DISTANCE && !near && !grabbableDataForCandidate.wantsTrigger) {
|
||||||
// we can't distance-grab non-physical
|
// we can't distance-grab non-physical
|
||||||
if (WANT_DEBUG_SEARCH_NAME && propsForCandidate.name == WANT_DEBUG_SEARCH_NAME) {
|
if (WANT_DEBUG_SEARCH_NAME && propsForCandidate.name == WANT_DEBUG_SEARCH_NAME) {
|
||||||
print("grab is skipping '" + WANT_DEBUG_SEARCH_NAME + "': not physical and too far for near-grab");
|
print("grab is skipping '" + WANT_DEBUG_SEARCH_NAME + "': not physical and too far for near-grab");
|
||||||
|
@ -1005,24 +1025,7 @@ function MyController(hand) {
|
||||||
this.lineOn(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
|
this.lineOn(distantPickRay.origin, Vec3.multiply(distantPickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
var SEARCH_SPHERE_SIZE = 0.011;
|
this.searchIndicatorOn(handPosition, distantPickRay);
|
||||||
var SEARCH_SPHERE_FOLLOW_RATE = 0.50;
|
|
||||||
|
|
||||||
if (this.intersectionDistance > 0) {
|
|
||||||
// If we hit something with our pick ray, move the search sphere toward that distance
|
|
||||||
this.searchSphereDistance = this.searchSphereDistance * SEARCH_SPHERE_FOLLOW_RATE +
|
|
||||||
this.intersectionDistance * (1.0 - SEARCH_SPHERE_FOLLOW_RATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
var searchSphereLocation = Vec3.sum(distantPickRay.origin,
|
|
||||||
Vec3.multiply(distantPickRay.direction, this.searchSphereDistance));
|
|
||||||
this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance,
|
|
||||||
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
|
|
||||||
if ((USE_OVERLAY_LINES_FOR_SEARCHING === true) && PICK_WITH_HAND_RAY) {
|
|
||||||
this.overlayLineOn(handPosition, searchSphereLocation,
|
|
||||||
(this.triggerSmoothedGrab() || this.bumperSqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
Controller.setReticleVisible(false);
|
Controller.setReticleVisible(false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1543,17 +1546,20 @@ function MyController(hand) {
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
if (now - this.lastPickTime > MSECS_PER_SEC / PICKS_PER_SECOND_PER_HAND) {
|
if (now - this.lastPickTime > MSECS_PER_SEC / PICKS_PER_SECOND_PER_HAND) {
|
||||||
var intersection = Entities.findRayIntersection(pickRay, true);
|
var intersection = Entities.findRayIntersection(pickRay, true);
|
||||||
this.lastPickTime = now;
|
if (intersection.accurate) {
|
||||||
if (intersection.entityID != this.grabbedEntity) {
|
this.lastPickTime = now;
|
||||||
this.setState(STATE_RELEASE);
|
if (intersection.entityID != this.grabbedEntity) {
|
||||||
this.callEntityMethodOnGrabbed("stopFarTrigger");
|
this.setState(STATE_RELEASE);
|
||||||
return;
|
this.callEntityMethodOnGrabbed("stopFarTrigger");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (intersection.intersects) {
|
||||||
|
this.intersectionDistance = Vec3.distance(pickRay.origin, intersection.intersection);
|
||||||
|
}
|
||||||
|
this.searchIndicatorOn(handPosition, pickRay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (USE_ENTITY_LINES_FOR_MOVING === true) {
|
|
||||||
this.lineOn(pickRay.origin, Vec3.multiply(pickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
|
|
||||||
}
|
|
||||||
this.callEntityMethodOnGrabbed("continueFarTrigger");
|
this.callEntityMethodOnGrabbed("continueFarTrigger");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,17 @@
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createEmitCheckedToStringPropertyUpdateFunction(checkboxElement, name, propertyName) {
|
||||||
|
var newString = "";
|
||||||
|
if (checkboxElement.checked) {
|
||||||
|
newString += name + "";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function createEmitGroupCheckedPropertyUpdateFunction(group, propertyName) {
|
function createEmitGroupCheckedPropertyUpdateFunction(group, propertyName) {
|
||||||
return function () {
|
return function () {
|
||||||
var properties = {};
|
var properties = {};
|
||||||
|
@ -207,6 +218,28 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function updateCheckedSubProperty(propertyName, propertyValue, subPropertyElement, subPropertyString) {
|
||||||
|
if (subPropertyElement.checked) {
|
||||||
|
if (propertyValue.indexOf(subPropertyString)) {
|
||||||
|
propertyValue += subPropertyString + ',';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// We've unchecked, so remove
|
||||||
|
propertyValue = propertyValue.replace(subPropertyString + ",", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
var _properties ={}
|
||||||
|
_properties[propertyName] = propertyValue;
|
||||||
|
|
||||||
|
EventBridge.emitWebEvent(
|
||||||
|
JSON.stringify({
|
||||||
|
type: "update",
|
||||||
|
properties: _properties
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function loaded() {
|
function loaded() {
|
||||||
openEventBridge(function() {
|
openEventBridge(function() {
|
||||||
var allSections = [];
|
var allSections = [];
|
||||||
|
@ -263,6 +296,11 @@
|
||||||
var elDensity = document.getElementById("property-density");
|
var elDensity = document.getElementById("property-density");
|
||||||
var elCollisionless = document.getElementById("property-collisionless");
|
var elCollisionless = document.getElementById("property-collisionless");
|
||||||
var elDynamic = document.getElementById("property-dynamic" );
|
var elDynamic = document.getElementById("property-dynamic" );
|
||||||
|
var elCollideStatic = document.getElementById("property-collide-static");
|
||||||
|
var elCollideDynamic = document.getElementById("property-collide-dynamic");
|
||||||
|
var elCollideKinematic = document.getElementById("property-collide-kinematic");
|
||||||
|
var elCollideMyAvatar = document.getElementById("property-collide-myAvatar");
|
||||||
|
var elCollideOtherAvatar = document.getElementById("property-collide-otherAvatar");
|
||||||
var elCollisionSoundURL = document.getElementById("property-collision-sound-url");
|
var elCollisionSoundURL = document.getElementById("property-collision-sound-url");
|
||||||
var elLifetime = document.getElementById("property-lifetime");
|
var elLifetime = document.getElementById("property-lifetime");
|
||||||
var elScriptURL = document.getElementById("property-script-url");
|
var elScriptURL = document.getElementById("property-script-url");
|
||||||
|
@ -312,15 +350,7 @@
|
||||||
var elHyperlinkHref = document.getElementById("property-hyperlink-href");
|
var elHyperlinkHref = document.getElementById("property-hyperlink-href");
|
||||||
var elHyperlinkDescription = document.getElementById("property-hyperlink-description");
|
var elHyperlinkDescription = document.getElementById("property-hyperlink-description");
|
||||||
var elHyperlinkSections = document.querySelectorAll(".hyperlink-section");
|
var elHyperlinkSections = document.querySelectorAll(".hyperlink-section");
|
||||||
|
|
||||||
var elParticleSections = document.querySelectorAll(".particle-section");
|
|
||||||
allSections.push(elParticleSections);
|
|
||||||
var elParticleIsEmitting = document.getElementById("property-particle-is-emitting");
|
|
||||||
var elParticleMaxParticles = document.getElementById("property-particle-maxparticles");
|
|
||||||
var elParticleLifeSpan = document.getElementById("property-particle-lifespan");
|
|
||||||
var elParticleEmitRate = document.getElementById("property-particle-emit-rate");
|
|
||||||
var elParticleRadius = document.getElementById("property-particle-radius");
|
|
||||||
var elParticleTextures = document.getElementById("property-particle-textures");
|
|
||||||
|
|
||||||
var elTextSections = document.querySelectorAll(".text-section");
|
var elTextSections = document.querySelectorAll(".text-section");
|
||||||
allSections.push(elTextSections);
|
allSections.push(elTextSections);
|
||||||
|
@ -378,6 +408,7 @@
|
||||||
var elPreviewCameraButton = document.getElementById("preview-camera-button");
|
var elPreviewCameraButton = document.getElementById("preview-camera-button");
|
||||||
|
|
||||||
if (window.EventBridge !== undefined) {
|
if (window.EventBridge !== undefined) {
|
||||||
|
var properties;
|
||||||
EventBridge.scriptEventReceived.connect(function(data) {
|
EventBridge.scriptEventReceived.connect(function(data) {
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
if (data.type == "update") {
|
if (data.type == "update") {
|
||||||
|
@ -419,7 +450,7 @@
|
||||||
var selected = false;
|
var selected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var properties = data.selections[0].properties;
|
properties = data.selections[0].properties;
|
||||||
|
|
||||||
elID.innerHTML = properties.id;
|
elID.innerHTML = properties.id;
|
||||||
|
|
||||||
|
@ -433,6 +464,7 @@
|
||||||
} else {
|
} else {
|
||||||
enableChildren(document.getElementById("properties-list"), 'input');
|
enableChildren(document.getElementById("properties-list"), 'input');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
elName.value = properties.name;
|
elName.value = properties.name;
|
||||||
|
|
||||||
|
@ -481,6 +513,15 @@
|
||||||
elDensity.value = properties.density.toFixed(4);
|
elDensity.value = properties.density.toFixed(4);
|
||||||
elCollisionless.checked = properties.collisionless;
|
elCollisionless.checked = properties.collisionless;
|
||||||
elDynamic.checked = properties.dynamic;
|
elDynamic.checked = properties.dynamic;
|
||||||
|
|
||||||
|
|
||||||
|
elCollideStatic.checked = properties.collidesWith.indexOf("static") > -1;
|
||||||
|
elCollideKinematic.checked = properties.collidesWith.indexOf("kinematic") > -1;
|
||||||
|
elCollideDynamic.checked = properties.collidesWith.indexOf("dynamic") > -1;
|
||||||
|
elCollideMyAvatar.checked = properties.collidesWith.indexOf("myAvatar") > -1;
|
||||||
|
elCollideOtherAvatar.checked = properties.collidesWith.indexOf("otherAvatar") > -1;
|
||||||
|
|
||||||
|
|
||||||
elCollisionSoundURL.value = properties.collisionSoundURL;
|
elCollisionSoundURL.value = properties.collisionSoundURL;
|
||||||
elLifetime.value = properties.lifetime;
|
elLifetime.value = properties.lifetime;
|
||||||
elScriptURL.value = properties.script;
|
elScriptURL.value = properties.script;
|
||||||
|
@ -602,18 +643,6 @@
|
||||||
elZoneSkyboxURL.value = properties.skybox.url;
|
elZoneSkyboxURL.value = properties.skybox.url;
|
||||||
|
|
||||||
showElements(document.getElementsByClassName('skybox-section'), elZoneBackgroundMode.value == 'skybox');
|
showElements(document.getElementsByClassName('skybox-section'), elZoneBackgroundMode.value == 'skybox');
|
||||||
} else if (properties.type == "ParticleEffect") {
|
|
||||||
for (var i = 0; i < elParticleSections.length; i++) {
|
|
||||||
elParticleSections[i].style.display = 'block';
|
|
||||||
}
|
|
||||||
|
|
||||||
elParticleIsEmitting.checked = properties.isEmitting;
|
|
||||||
elParticleMaxParticles.value = properties.maxParticles;
|
|
||||||
elParticleLifeSpan.value = properties.lifespan.toFixed(2);
|
|
||||||
elParticleEmitRate.value = properties.emitRate.toFixed(1);
|
|
||||||
elParticleRadius.value = properties.particleRadius.toFixed(3);
|
|
||||||
elParticleTextures.value = properties.textures;
|
|
||||||
|
|
||||||
} else if (properties.type == "PolyVox") {
|
} else if (properties.type == "PolyVox") {
|
||||||
for (var i = 0; i < elPolyVoxSections.length; i++) {
|
for (var i = 0; i < elPolyVoxSections.length; i++) {
|
||||||
elPolyVoxSections[i].style.display = 'block';
|
elPolyVoxSections[i].style.display = 'block';
|
||||||
|
@ -702,6 +731,29 @@
|
||||||
elDensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('density'));
|
elDensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('density'));
|
||||||
elCollisionless.addEventListener('change', createEmitCheckedPropertyUpdateFunction('collisionless'));
|
elCollisionless.addEventListener('change', createEmitCheckedPropertyUpdateFunction('collisionless'));
|
||||||
elDynamic.addEventListener('change', createEmitCheckedPropertyUpdateFunction('dynamic'));
|
elDynamic.addEventListener('change', createEmitCheckedPropertyUpdateFunction('dynamic'));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
elCollideDynamic.addEventListener('change', function() {
|
||||||
|
updateCheckedSubProperty("collidesWith", properties.collidesWith, elCollideDynamic, 'dynamic');
|
||||||
|
});
|
||||||
|
|
||||||
|
elCollideKinematic.addEventListener('change', function() {
|
||||||
|
updateCheckedSubProperty("collidesWith", properties.collidesWith, elCollideKinematic, 'kinematic');
|
||||||
|
});
|
||||||
|
|
||||||
|
elCollideStatic.addEventListener('change', function() {
|
||||||
|
updateCheckedSubProperty("collidesWith", properties.collidesWith, elCollideStatic, 'static');
|
||||||
|
});
|
||||||
|
elCollideMyAvatar.addEventListener('change', function() {
|
||||||
|
updateCheckedSubProperty("collidesWith", properties.collidesWith, elCollideMyAvatar, 'myAvatar');
|
||||||
|
});
|
||||||
|
elCollideOtherAvatar.addEventListener('change', function() {
|
||||||
|
updateCheckedSubProperty("collidesWith", properties.collidesWith, elCollideOtherAvatar, 'otherAvatar');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
elCollisionSoundURL.addEventListener('change', createEmitTextPropertyUpdateFunction('collisionSoundURL'));
|
elCollisionSoundURL.addEventListener('change', createEmitTextPropertyUpdateFunction('collisionSoundURL'));
|
||||||
|
|
||||||
elLifetime.addEventListener('change', createEmitNumberPropertyUpdateFunction('lifetime'));
|
elLifetime.addEventListener('change', createEmitNumberPropertyUpdateFunction('lifetime'));
|
||||||
|
@ -749,13 +801,6 @@
|
||||||
|
|
||||||
elWebSourceURL.addEventListener('change', createEmitTextPropertyUpdateFunction('sourceUrl'));
|
elWebSourceURL.addEventListener('change', createEmitTextPropertyUpdateFunction('sourceUrl'));
|
||||||
|
|
||||||
elParticleIsEmitting.addEventListener('change', createEmitCheckedPropertyUpdateFunction('isEmitting'));
|
|
||||||
elParticleMaxParticles.addEventListener('change', createEmitNumberPropertyUpdateFunction('maxParticles'));
|
|
||||||
elParticleLifeSpan.addEventListener('change', createEmitNumberPropertyUpdateFunction('lifespan'));
|
|
||||||
elParticleEmitRate.addEventListener('change', createEmitNumberPropertyUpdateFunction('emitRate'));
|
|
||||||
elParticleRadius.addEventListener('change', createEmitNumberPropertyUpdateFunction('particleRadius'));
|
|
||||||
elParticleTextures.addEventListener('change', createEmitTextPropertyUpdateFunction('textures'));
|
|
||||||
|
|
||||||
elModelURL.addEventListener('change', createEmitTextPropertyUpdateFunction('modelURL'));
|
elModelURL.addEventListener('change', createEmitTextPropertyUpdateFunction('modelURL'));
|
||||||
elShapeType.addEventListener('change', createEmitTextPropertyUpdateFunction('shapeType'));
|
elShapeType.addEventListener('change', createEmitTextPropertyUpdateFunction('shapeType'));
|
||||||
elCompoundShapeURL.addEventListener('change', createEmitTextPropertyUpdateFunction('compoundShapeURL'));
|
elCompoundShapeURL.addEventListener('change', createEmitTextPropertyUpdateFunction('compoundShapeURL'));
|
||||||
|
@ -1384,6 +1429,48 @@
|
||||||
<span class="value">
|
<span class="value">
|
||||||
<input type='checkbox' id="property-dynamic">
|
<input type='checkbox' id="property-dynamic">
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class = "sub-section-header"> Collides With: </div>
|
||||||
|
<div class = "sub-props-checkbox-group">
|
||||||
|
<div class="property">
|
||||||
|
<span class="label"> static</span>
|
||||||
|
<span class="value">
|
||||||
|
<input type='checkbox' id="property-collide-static">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="property">
|
||||||
|
<span class="label"> dynamic</span>
|
||||||
|
<span class="value">
|
||||||
|
<input type='checkbox' id="property-collide-dynamic">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="property">
|
||||||
|
<span class="label"> kinematic</span>
|
||||||
|
<span class="value">
|
||||||
|
<input type='checkbox' id="property-collide-kinematic">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="property">
|
||||||
|
<span class="label"> myAvatar</span>
|
||||||
|
<span class="value">
|
||||||
|
<input type='checkbox' id="property-collide-myAvatar">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="property">
|
||||||
|
<span class="label"> otherAvatar</span>
|
||||||
|
<span class="value">
|
||||||
|
<input type='checkbox' id="property-collide-otherAvatar">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="property">
|
<div class="property">
|
||||||
|
@ -1539,4 +1626,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -263,6 +263,10 @@ table#properties-list {
|
||||||
border-bottom: 0.75pt solid #e5e5e5;
|
border-bottom: 0.75pt solid #e5e5e5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sub-props-checkbox-group {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
#properties-list .label {
|
#properties-list .label {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -133,11 +133,8 @@ QUuid EntityScriptingInterface::addEntity(const EntityItemProperties& properties
|
||||||
float cost = calculateCost(density * volume, 0, newVelocity);
|
float cost = calculateCost(density * volume, 0, newVelocity);
|
||||||
cost *= costMultiplier;
|
cost *= costMultiplier;
|
||||||
|
|
||||||
if(cost > _currentAvatarEnergy) {
|
if (cost > _currentAvatarEnergy) {
|
||||||
return QUuid();
|
return QUuid();
|
||||||
} else {
|
|
||||||
//debit the avatar energy and continue
|
|
||||||
emit debitEnergySource(cost);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityItemID id = EntityItemID(QUuid::createUuid());
|
EntityItemID id = EntityItemID(QUuid::createUuid());
|
||||||
|
@ -173,6 +170,7 @@ QUuid EntityScriptingInterface::addEntity(const EntityItemProperties& properties
|
||||||
|
|
||||||
// queue the packet
|
// queue the packet
|
||||||
if (success) {
|
if (success) {
|
||||||
|
emit debitEnergySource(cost);
|
||||||
queueEntityMessage(PacketType::EntityAdd, id, propertiesWithSimID);
|
queueEntityMessage(PacketType::EntityAdd, id, propertiesWithSimID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +230,7 @@ EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identit
|
||||||
|
|
||||||
QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& scriptSideProperties) {
|
QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& scriptSideProperties) {
|
||||||
EntityItemProperties properties = scriptSideProperties;
|
EntityItemProperties properties = scriptSideProperties;
|
||||||
|
|
||||||
auto dimensions = properties.getDimensions();
|
auto dimensions = properties.getDimensions();
|
||||||
float volume = dimensions.x * dimensions.y * dimensions.z;
|
float volume = dimensions.x * dimensions.y * dimensions.z;
|
||||||
auto density = properties.getDensity();
|
auto density = properties.getDensity();
|
||||||
|
@ -242,18 +240,18 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties&
|
||||||
EntityItemID entityID(id);
|
EntityItemID entityID(id);
|
||||||
if (!_entityTree) {
|
if (!_entityTree) {
|
||||||
queueEntityMessage(PacketType::EntityEdit, entityID, properties);
|
queueEntityMessage(PacketType::EntityEdit, entityID, properties);
|
||||||
|
|
||||||
//if there is no local entity entity tree, no existing velocity, use 0.
|
//if there is no local entity entity tree, no existing velocity, use 0.
|
||||||
float cost = calculateCost(density * volume, oldVelocity, newVelocity);
|
float cost = calculateCost(density * volume, oldVelocity, newVelocity);
|
||||||
cost *= costMultiplier;
|
cost *= costMultiplier;
|
||||||
|
|
||||||
if(cost > _currentAvatarEnergy) {
|
if (cost > _currentAvatarEnergy) {
|
||||||
return QUuid();
|
return QUuid();
|
||||||
} else {
|
} else {
|
||||||
//debit the avatar energy and continue
|
//debit the avatar energy and continue
|
||||||
emit debitEnergySource(cost);
|
emit debitEnergySource(cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
// If we have a local entity tree set, then also update it.
|
// If we have a local entity tree set, then also update it.
|
||||||
|
@ -268,8 +266,8 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties&
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//existing entity, retrieve old velocity for check down below
|
//existing entity, retrieve old velocity for check down below
|
||||||
oldVelocity = entity->getVelocity().length();
|
oldVelocity = entity->getVelocity().length();
|
||||||
|
|
||||||
if (!scriptSideProperties.parentIDChanged()) {
|
if (!scriptSideProperties.parentIDChanged()) {
|
||||||
properties.setParentID(entity->getParentID());
|
properties.setParentID(entity->getParentID());
|
||||||
}
|
}
|
||||||
|
@ -284,16 +282,18 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
properties = convertLocationFromScriptSemantics(properties);
|
properties = convertLocationFromScriptSemantics(properties);
|
||||||
updatedEntity = _entityTree->updateEntity(entityID, properties);
|
|
||||||
|
|
||||||
float cost = calculateCost(density * volume, oldVelocity, newVelocity);
|
float cost = calculateCost(density * volume, oldVelocity, newVelocity);
|
||||||
cost *= costMultiplier;
|
cost *= costMultiplier;
|
||||||
|
|
||||||
if(cost > _currentAvatarEnergy) {
|
if (cost > _currentAvatarEnergy) {
|
||||||
updatedEntity = false;
|
updatedEntity = false;
|
||||||
} else {
|
} else {
|
||||||
//debit the avatar energy and continue
|
//debit the avatar energy and continue
|
||||||
emit debitEnergySource(cost);
|
updatedEntity = _entityTree->updateEntity(entityID, properties);
|
||||||
|
if (updatedEntity) {
|
||||||
|
emit debitEnergySource(cost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -370,15 +370,16 @@ void EntityScriptingInterface::deleteEntity(QUuid id) {
|
||||||
_entityTree->withWriteLock([&] {
|
_entityTree->withWriteLock([&] {
|
||||||
EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID);
|
EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID);
|
||||||
if (entity) {
|
if (entity) {
|
||||||
|
|
||||||
auto dimensions = entity->getDimensions();
|
auto dimensions = entity->getDimensions();
|
||||||
float volume = dimensions.x * dimensions.y * dimensions.z;
|
float volume = dimensions.x * dimensions.y * dimensions.z;
|
||||||
auto density = entity->getDensity();
|
auto density = entity->getDensity();
|
||||||
auto velocity = entity->getVelocity().length();
|
auto velocity = entity->getVelocity().length();
|
||||||
float cost = calculateCost(density * volume, velocity, 0);
|
float cost = calculateCost(density * volume, velocity, 0);
|
||||||
cost *= costMultiplier;
|
cost *= costMultiplier;
|
||||||
|
|
||||||
if(cost > _currentAvatarEnergy) {
|
if (cost > _currentAvatarEnergy) {
|
||||||
|
shouldDelete = false;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
//debit the avatar energy and continue
|
//debit the avatar energy and continue
|
||||||
|
|
Loading…
Reference in a new issue