mirror of
https://github.com/overte-org/overte.git
synced 2025-07-01 14:59:04 +02:00
Merge branch 'baseball' of github.com:birarda/hifi into baseball
This commit is contained in:
commit
03a338dfe6
5 changed files with 338 additions and 308 deletions
61
examples/baseball/createBatButton.js
Normal file
61
examples/baseball/createBatButton.js
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
//
|
||||||
|
// createBatButton.js
|
||||||
|
// examples/baseball/moreBatsButton.js
|
||||||
|
//
|
||||||
|
// Created by Stephen Birarda on 10/28/2015.
|
||||||
|
// Copyright 2015 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
|
||||||
|
//
|
||||||
|
|
||||||
|
(function(){
|
||||||
|
this.clickReleaseOnEntity = function(entityID, mouseEvent) {
|
||||||
|
if (!mouseEvent.isLeftButton) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.dropBats();
|
||||||
|
};
|
||||||
|
this.startNearGrabNonColliding = function() {
|
||||||
|
this.dropBats();
|
||||||
|
};
|
||||||
|
this.dropBats = function() {
|
||||||
|
// if the bat box is near us, grab it's position
|
||||||
|
var nearby = Entities.findEntities(this.position, 20);
|
||||||
|
|
||||||
|
nearby.forEach(function(id) {
|
||||||
|
var properties = Entities.getEntityProperties(id, ["name", "position"]);
|
||||||
|
if (properties.name && properties.name == "Bat Box") {
|
||||||
|
boxPosition = properties.position;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var BAT_DROP_HEIGHT = 2.0;
|
||||||
|
|
||||||
|
var dropPosition;
|
||||||
|
|
||||||
|
if (!boxPosition) {
|
||||||
|
// we got no bat box position, drop in front of the avatar instead
|
||||||
|
} else {
|
||||||
|
// drop the bat above the bat box
|
||||||
|
dropPosition = Vec3.sum(boxPosition, { x: 0.0, y: BAT_DROP_HEIGHT, z: 0.0});
|
||||||
|
}
|
||||||
|
|
||||||
|
var BAT_MODEL = "atp:c47deaae09cca927f6bc9cca0e8bbe77fc618f8c3f2b49899406a63a59f885cb.fbx";
|
||||||
|
var BAT_COLLISION_HULL = "atp:9eafceb7510c41d50661130090de7e0632aa4da236ebda84a0059a4be2130e0c.obj";
|
||||||
|
|
||||||
|
// add the fresh bat at the drop position
|
||||||
|
var bat = Entities.addEntity({
|
||||||
|
name: 'Bat',
|
||||||
|
type: "Model",
|
||||||
|
modelURL: BAT_MODEL,
|
||||||
|
position: dropPosition,
|
||||||
|
compoundShapeURL: BAT_COLLISION_HULL,
|
||||||
|
collisionsWillMove: true,
|
||||||
|
velocity: { x: 0, y: 0.05, z: 0}, // workaround for gravity not taking effect on add
|
||||||
|
gravity: { x: 0, y: -9.81, z: 0},
|
||||||
|
rotation: Quat.fromPitchYawRollDegrees(0.0, 0.0, -90.0),
|
||||||
|
userData: '{"grabbableKey":{"spatialKey":{"relativePosition":{"x":0.9,"y":0,"z":0},"relativeRotation":{"x":0,"y":0,"z":0.4617486000061035,"w":0.8870108127593994}},"kinematicGrab":true}}'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
|
@ -273,6 +273,7 @@ public slots:
|
||||||
void setEnableAnimGraph(bool isEnabled);
|
void setEnableAnimGraph(bool isEnabled);
|
||||||
void setEnableDebugDrawBindPose(bool isEnabled);
|
void setEnableDebugDrawBindPose(bool isEnabled);
|
||||||
void setEnableDebugDrawAnimPose(bool isEnabled);
|
void setEnableDebugDrawAnimPose(bool isEnabled);
|
||||||
|
bool getEnableMeshVisible() const { return _skeletonModel.isVisible(); }
|
||||||
void setEnableMeshVisible(bool isEnabled);
|
void setEnableMeshVisible(bool isEnabled);
|
||||||
void setAnimGraphUrl(const QString& url) { _animGraphUrl = url; }
|
void setAnimGraphUrl(const QString& url) { _animGraphUrl = url; }
|
||||||
|
|
||||||
|
@ -295,7 +296,7 @@ private:
|
||||||
virtual void render(RenderArgs* renderArgs, const glm::vec3& cameraPositio) override;
|
virtual void render(RenderArgs* renderArgs, const glm::vec3& cameraPositio) override;
|
||||||
virtual void renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, float glowLevel = 0.0f) override;
|
virtual void renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, float glowLevel = 0.0f) override;
|
||||||
virtual bool shouldRenderHead(const RenderArgs* renderArgs) const override;
|
virtual bool shouldRenderHead(const RenderArgs* renderArgs) const override;
|
||||||
void setShouldRenderLocally(bool shouldRender) { _shouldRender = shouldRender; }
|
void setShouldRenderLocally(bool shouldRender) { _shouldRender = shouldRender; setEnableMeshVisible(shouldRender); }
|
||||||
bool getShouldRenderLocally() const { return _shouldRender; }
|
bool getShouldRenderLocally() const { return _shouldRender; }
|
||||||
bool getDriveKeys(int key) { return _driveKeys[key] != 0.0f; };
|
bool getDriveKeys(int key) { return _driveKeys[key] != 0.0f; };
|
||||||
bool isMyAvatar() const override { return true; }
|
bool isMyAvatar() const override { return true; }
|
||||||
|
|
|
@ -966,37 +966,6 @@ void ScriptEngine::load(const QString& loadFile) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptEngine::checkSyntax(const QScriptProgram& program) {
|
|
||||||
const auto syntaxCheck = QScriptEngine::checkSyntax(program.sourceCode());
|
|
||||||
if (syntaxCheck.state() != QScriptSyntaxCheckResult::Valid) {
|
|
||||||
const auto error = syntaxCheck.errorMessage();
|
|
||||||
const auto line = QString::number(syntaxCheck.errorLineNumber());
|
|
||||||
const auto column = QString::number(syntaxCheck.errorColumnNumber());
|
|
||||||
const auto message = QString("[SyntaxError] %1 in %2:%3(%4)").arg(error, program.fileName(), line, column);
|
|
||||||
qCWarning(scriptengine) << qPrintable(message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ScriptEngine::checkExceptions(QScriptEngine& engine, const QString& fileName) {
|
|
||||||
if (engine.hasUncaughtException()) {
|
|
||||||
const auto backtrace = engine.uncaughtExceptionBacktrace();
|
|
||||||
const auto exception = engine.uncaughtException().toString();
|
|
||||||
const auto line = QString::number(engine.uncaughtExceptionLineNumber());
|
|
||||||
engine.clearExceptions();
|
|
||||||
|
|
||||||
auto message = QString("[UncaughtException] %1 in %2:%3").arg(exception, fileName, line);
|
|
||||||
if (!backtrace.empty()) {
|
|
||||||
static const auto lineSeparator = "\n ";
|
|
||||||
message += QString("\n[Backtrace]%1%2").arg(lineSeparator, backtrace.join(lineSeparator));
|
|
||||||
}
|
|
||||||
qCWarning(scriptengine) << qPrintable(message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Look up the handler associated with eventName and entityID. If found, evalute the argGenerator thunk and call the handler with those args
|
// Look up the handler associated with eventName and entityID. If found, evalute the argGenerator thunk and call the handler with those args
|
||||||
void ScriptEngine::forwardHandlerCall(const EntityItemID& entityID, const QString& eventName, QScriptValueList eventHanderArgs) {
|
void ScriptEngine::forwardHandlerCall(const EntityItemID& entityID, const QString& eventName, QScriptValueList eventHanderArgs) {
|
||||||
if (QThread::currentThread() != thread()) {
|
if (QThread::currentThread() != thread()) {
|
||||||
|
@ -1081,7 +1050,6 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co
|
||||||
auto fileName = QString("(EntityID:%1, %2)").arg(entityID.toString(), isURL ? scriptOrURL : "EmbededEntityScript");
|
auto fileName = QString("(EntityID:%1, %2)").arg(entityID.toString(), isURL ? scriptOrURL : "EmbededEntityScript");
|
||||||
|
|
||||||
QScriptProgram program(contents, fileName);
|
QScriptProgram program(contents, fileName);
|
||||||
|
|
||||||
if (!hasCorrectSyntax(program)) {
|
if (!hasCorrectSyntax(program)) {
|
||||||
if (!isFileUrl) {
|
if (!isFileUrl) {
|
||||||
scriptCache->addScriptToBadScriptList(scriptOrURL);
|
scriptCache->addScriptToBadScriptList(scriptOrURL);
|
||||||
|
|
Loading…
Reference in a new issue