mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 07:23:00 +02:00
update bow to use parenting for prenotch string
This commit is contained in:
parent
78911ae9ca
commit
9be2a73d4a
2 changed files with 113 additions and 95 deletions
|
@ -115,12 +115,15 @@
|
||||||
this.shootArrowSound = SoundCache.getSound(SHOOT_ARROW_SOUND_URL);
|
this.shootArrowSound = SoundCache.getSound(SHOOT_ARROW_SOUND_URL);
|
||||||
this.arrowHitSound = SoundCache.getSound(ARROW_HIT_SOUND_URL);
|
this.arrowHitSound = SoundCache.getSound(ARROW_HIT_SOUND_URL);
|
||||||
this.arrowNotchSound = SoundCache.getSound(NOTCH_ARROW_SOUND_URL);
|
this.arrowNotchSound = SoundCache.getSound(NOTCH_ARROW_SOUND_URL);
|
||||||
|
var userData = Entities.getEntityProperties(this.entityID).userData;
|
||||||
|
this.userData = JSON.parse(userData);
|
||||||
|
print('THIS USERDATA::: ' + userData)
|
||||||
|
this.preNotchString = this.userData.bowKey.preNotchString;
|
||||||
|
print('PRE NOTCH STRING:::' + this.preNotchString)
|
||||||
},
|
},
|
||||||
|
|
||||||
unload: function() {
|
unload: function() {
|
||||||
this.deleteStrings();
|
this.deleteStrings();
|
||||||
Entities.deleteEntity(this.preNotchString);
|
|
||||||
Entities.deleteEntity(this.arrow);
|
Entities.deleteEntity(this.arrow);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -174,18 +177,6 @@
|
||||||
|
|
||||||
this.bowProperties = Entities.getEntityProperties(this.entityID);
|
this.bowProperties = Entities.getEntityProperties(this.entityID);
|
||||||
|
|
||||||
//create a string across the bow when we pick it up
|
|
||||||
if (this.preNotchString === null) {
|
|
||||||
this.createPreNotchString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.preNotchString !== null && this.aiming === false) {
|
|
||||||
// print('DRAW PRE NOTCH STRING')
|
|
||||||
this.drawPreNotchStrings();
|
|
||||||
}
|
|
||||||
|
|
||||||
// create the notch detector that arrows will look for
|
|
||||||
|
|
||||||
if (this.aiming === true) {
|
if (this.aiming === true) {
|
||||||
Entities.editEntity(this.preNotchString, {
|
Entities.editEntity(this.preNotchString, {
|
||||||
visible: false
|
visible: false
|
||||||
|
@ -213,11 +204,9 @@
|
||||||
var data = getEntityCustomData('grabbableKey', this.entityID, {});
|
var data = getEntityCustomData('grabbableKey', this.entityID, {});
|
||||||
data.grabbable = true;
|
data.grabbable = true;
|
||||||
setEntityCustomData('grabbableKey', this.entityID, data);
|
setEntityCustomData('grabbableKey', this.entityID, data);
|
||||||
Entities.deleteEntity(this.preNotchString);
|
|
||||||
Entities.deleteEntity(this.arrow);
|
Entities.deleteEntity(this.arrow);
|
||||||
this.aiming = false;
|
this.aiming = false;
|
||||||
this.hasArrowNotched = false;
|
this.hasArrowNotched = false;
|
||||||
this.preNotchString = null;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -334,10 +323,6 @@
|
||||||
var bottomStringPosition = Vec3.sum(this.bowProperties.position, downOffset);
|
var bottomStringPosition = Vec3.sum(this.bowProperties.position, downOffset);
|
||||||
this.bottomStringPosition = Vec3.sum(bottomStringPosition, backOffset);
|
this.bottomStringPosition = Vec3.sum(bottomStringPosition, backOffset);
|
||||||
|
|
||||||
Entities.editEntity(this.preNotchString, {
|
|
||||||
position: this.topStringPosition
|
|
||||||
});
|
|
||||||
|
|
||||||
Entities.editEntity(this.topString, {
|
Entities.editEntity(this.topString, {
|
||||||
position: this.topStringPosition
|
position: this.topStringPosition
|
||||||
});
|
});
|
||||||
|
@ -381,50 +366,6 @@
|
||||||
return [topVector, bottomVector];
|
return [topVector, bottomVector];
|
||||||
},
|
},
|
||||||
|
|
||||||
createPreNotchString: function() {
|
|
||||||
this.bowProperties = Entities.getEntityProperties(_this.entityID, ["position", "rotation", "userData"]);
|
|
||||||
|
|
||||||
var stringProperties = {
|
|
||||||
type: 'Line',
|
|
||||||
position: Vec3.sum(this.bowProperties.position, TOP_NOTCH_OFFSET),
|
|
||||||
dimensions: LINE_DIMENSIONS,
|
|
||||||
visible: true,
|
|
||||||
dynamic: false,
|
|
||||||
collisionless: true,
|
|
||||||
userData: JSON.stringify({
|
|
||||||
grabbableKey: {
|
|
||||||
grabbable: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
this.preNotchString = Entities.addEntity(stringProperties);
|
|
||||||
},
|
|
||||||
|
|
||||||
drawPreNotchStrings: function() {
|
|
||||||
this.bowProperties = Entities.getEntityProperties(_this.entityID, ["position", "rotation", "userData"]);
|
|
||||||
|
|
||||||
this.updateStringPositions();
|
|
||||||
|
|
||||||
var downVector = Vec3.multiply(-1, Quat.getUp(this.bowProperties.rotation));
|
|
||||||
var downOffset = Vec3.multiply(downVector, BOTTOM_NOTCH_OFFSET * 2);
|
|
||||||
|
|
||||||
Entities.editEntity(this.preNotchString, {
|
|
||||||
name: 'Hifi-Pre-Notch-String',
|
|
||||||
linePoints: [{
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
z: 0
|
|
||||||
}, Vec3.sum({
|
|
||||||
x: 0,
|
|
||||||
y: 0,
|
|
||||||
z: 0
|
|
||||||
}, downOffset)],
|
|
||||||
lineWidth: 5,
|
|
||||||
color: this.stringData.currentColor,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
checkStringHand: function() {
|
checkStringHand: function() {
|
||||||
//invert the hands because our string will be held with the opposite hand of the first one we pick up the bow with
|
//invert the hands because our string will be held with the opposite hand of the first one we pick up the bow with
|
||||||
var triggerLookup;
|
var triggerLookup;
|
||||||
|
@ -613,4 +554,4 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
return new Bow();
|
return new Bow();
|
||||||
});
|
});
|
|
@ -10,6 +10,8 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
var utilsPath = Script.resolvePath('../../libraries/utils.js')
|
||||||
|
Script.include(utilsPath)
|
||||||
|
|
||||||
var SCRIPT_URL = Script.resolvePath('bow.js');
|
var SCRIPT_URL = Script.resolvePath('bow.js');
|
||||||
|
|
||||||
|
@ -33,39 +35,114 @@ var center = Vec3.sum(Vec3.sum(MyAvatar.position, {
|
||||||
z: 0
|
z: 0
|
||||||
}), Vec3.multiply(1, Quat.getFront(Camera.getOrientation())));
|
}), Vec3.multiply(1, Quat.getFront(Camera.getOrientation())));
|
||||||
|
|
||||||
var bow = Entities.addEntity({
|
|
||||||
name: 'Hifi-Bow',
|
var TOP_NOTCH_OFFSET = 0.6;
|
||||||
type: "Model",
|
|
||||||
modelURL: MODEL_URL,
|
var BOTTOM_NOTCH_OFFSET = 0.6;
|
||||||
position: center,
|
|
||||||
dimensions: BOW_DIMENSIONS,
|
var LINE_DIMENSIONS = {
|
||||||
dynamic: true,
|
x: 5,
|
||||||
gravity: BOW_GRAVITY,
|
y: 5,
|
||||||
shapeType: 'compound',
|
z: 5
|
||||||
compoundShapeURL: COLLISION_HULL_URL,
|
};
|
||||||
script: SCRIPT_URL,
|
|
||||||
userData: JSON.stringify({
|
var bow;
|
||||||
grabbableKey: {
|
|
||||||
invertSolidWhileHeld: true,
|
|
||||||
spatialKey: {
|
function makeBow() {
|
||||||
leftRelativePosition: {
|
|
||||||
x: -0.02,
|
var bowProperties = {
|
||||||
y: 0.08,
|
name: 'Hifi-Bow',
|
||||||
z: 0.09
|
type: "Model",
|
||||||
},
|
modelURL: MODEL_URL,
|
||||||
relativePosition: {
|
position: center,
|
||||||
x: 0.02,
|
dimensions: BOW_DIMENSIONS,
|
||||||
y: 0.08,
|
dynamic: true,
|
||||||
z: 0.09
|
gravity: BOW_GRAVITY,
|
||||||
},
|
shapeType: 'compound',
|
||||||
relativeRotation: Quat.fromPitchYawRollDegrees(0, 90, -90)
|
compoundShapeURL: COLLISION_HULL_URL,
|
||||||
|
script: SCRIPT_URL,
|
||||||
|
userData: JSON.stringify({
|
||||||
|
grabbableKey: {
|
||||||
|
invertSolidWhileHeld: true,
|
||||||
|
spatialKey: {
|
||||||
|
leftRelativePosition: {
|
||||||
|
x: -0.02,
|
||||||
|
y: 0.08,
|
||||||
|
z: 0.09
|
||||||
|
},
|
||||||
|
relativePosition: {
|
||||||
|
x: 0.02,
|
||||||
|
y: 0.08,
|
||||||
|
z: 0.09
|
||||||
|
},
|
||||||
|
relativeRotation: Quat.fromPitchYawRollDegrees(0, 90, -90)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
}
|
||||||
});
|
bow = Entities.addEntity(bowProperties);
|
||||||
|
createPreNotchString();
|
||||||
|
}
|
||||||
|
var preNotchString;
|
||||||
|
|
||||||
|
function createPreNotchString() {
|
||||||
|
|
||||||
|
var bowProperties = Entities.getEntityProperties(bow, ["position", "rotation", "userData"]);
|
||||||
|
var downVector = Vec3.multiply(-1, Quat.getUp(bowProperties.rotation));
|
||||||
|
var downOffset = Vec3.multiply(downVector, BOTTOM_NOTCH_OFFSET * 2);
|
||||||
|
var upVector = Quat.getUp(bowProperties.rotation);
|
||||||
|
var upOffset = Vec3.multiply(upVector, TOP_NOTCH_OFFSET);
|
||||||
|
|
||||||
|
var backOffset = Vec3.multiply(-0.1, Quat.getFront(bowProperties.rotation));
|
||||||
|
var topStringPosition = Vec3.sum(bowProperties.position, upOffset);
|
||||||
|
topStringPosition = Vec3.sum(topStringPosition, backOffset);
|
||||||
|
|
||||||
|
var stringProperties = {
|
||||||
|
name: 'Hifi-Bow-Pre-Notch-String',
|
||||||
|
type: 'Line',
|
||||||
|
position: topStringPosition,
|
||||||
|
linePoints: [{
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
}, Vec3.sum({
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
}, downOffset)],
|
||||||
|
lineWidth: 5,
|
||||||
|
color: {
|
||||||
|
red: 255,
|
||||||
|
green: 255,
|
||||||
|
blue: 255
|
||||||
|
},
|
||||||
|
dimensions: LINE_DIMENSIONS,
|
||||||
|
visible: true,
|
||||||
|
dynamic: false,
|
||||||
|
collisionless: true,
|
||||||
|
parentID: bow,
|
||||||
|
userData: JSON.stringify({
|
||||||
|
grabbableKey: {
|
||||||
|
grabbable: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
preNotchString = Entities.addEntity(stringProperties);
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
preNotchString: preNotchString
|
||||||
|
};
|
||||||
|
|
||||||
|
setEntityCustomData('bowKey', bow, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
makeBow();
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
Entities.deleteEntity(bow);
|
Entities.deleteEntity(bow);
|
||||||
|
Entities.deleteEntity(preNotchString);
|
||||||
}
|
}
|
||||||
|
|
||||||
Script.scriptEnding.connect(cleanup);
|
Script.scriptEnding.connect(cleanup);
|
Loading…
Reference in a new issue