mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Fix ScriptAvatar (ac agent), and provide a simple working example assignment client script.
This commit is contained in:
parent
aa1289bd7c
commit
619746676b
2 changed files with 37 additions and 12 deletions
|
@ -73,24 +73,20 @@ void ScriptableAvatar::update(float deltatime) {
|
||||||
const FBXAnimationFrame& ceilFrame = _animation->getFrames().at((int)glm::ceil(currentFrame) % frameCount);
|
const FBXAnimationFrame& ceilFrame = _animation->getFrames().at((int)glm::ceil(currentFrame) % frameCount);
|
||||||
const float frameFraction = glm::fract(currentFrame);
|
const float frameFraction = glm::fract(currentFrame);
|
||||||
|
|
||||||
for (int i = 0; i < modelJoints.size(); i++) {
|
for (int i = 0; i < animationJoints.size(); i++) {
|
||||||
int mapping = animationJoints.indexOf(modelJoints[i]);
|
const QString& name = animationJoints[i];
|
||||||
if (mapping != -1 && !_maskedJoints.contains(modelJoints[i])) {
|
int mapping = getJointIndex(name);
|
||||||
JointData& data = _jointData[i];
|
if (mapping != -1 && !_maskedJoints.contains(name)) {
|
||||||
|
JointData& data = _jointData[mapping];
|
||||||
|
|
||||||
auto newRotation = safeMix(floorFrame.rotations.at(i), ceilFrame.rotations.at(i), frameFraction);
|
auto newRotation = safeMix(floorFrame.rotations.at(i), ceilFrame.rotations.at(i), frameFraction);
|
||||||
auto newTranslation = floorFrame.translations.at(i) * (1.0f - frameFraction) +
|
// We could probably do translations as in interpolation in model space (rather than the parent space that each frame is in),
|
||||||
ceilFrame.translations.at(i) * frameFraction;
|
// but we don't do so for MyAvatar yet, so let's not be different here.
|
||||||
|
|
||||||
if (data.rotation != newRotation) {
|
if (data.rotation != newRotation) {
|
||||||
data.rotation = newRotation;
|
data.rotation = newRotation;
|
||||||
data.rotationSet = true;
|
data.rotationSet = true;
|
||||||
}
|
}
|
||||||
if (data.translation != newTranslation) {
|
}
|
||||||
data.translation = newTranslation;
|
|
||||||
data.translationSet = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_animation.clear();
|
_animation.clear();
|
||||||
|
|
29
examples/acScripts/animatedAvatarAgent.js
Normal file
29
examples/acScripts/animatedAvatarAgent.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
"use strict";
|
||||||
|
/*jslint vars: true, plusplus: true*/
|
||||||
|
/*global Agent, Avatar, Script, Entities, Vec3, print*/
|
||||||
|
//
|
||||||
|
// animatedAvatar.js
|
||||||
|
// examples/acScripts
|
||||||
|
//
|
||||||
|
// Created by Howard Stearns 11/6/15
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
// An assignment client script that animates one avatar at random location within 'spread' meters of 'origin'.
|
||||||
|
// In Domain Server Settings, go to scripts and give the url of this script. Press '+', and then 'Save and restart'.
|
||||||
|
|
||||||
|
var origin = {x: 500, y: 502, z: 500};
|
||||||
|
var spread = 10; // meters
|
||||||
|
var animationData = {url: "https://hifi-public.s3.amazonaws.com/ozan/anim/standard_anims/walk_fwd.fbx", lastFrame: 35};
|
||||||
|
Avatar.skeletonModelURL = "https://hifi-public.s3.amazonaws.com/marketplace/contents/dd03b8e3-52fb-4ab3-9ac9-3b17e00cd85d/98baa90b3b66803c5d7bd4537fca6993.fst"; //lovejoy
|
||||||
|
Avatar.displayName = "'Bot";
|
||||||
|
var millisecondsToWaitBeforeStarting = 10 * 1000; // To give the various servers a chance to start.
|
||||||
|
|
||||||
|
Agent.isAvatar = true;
|
||||||
|
Script.setTimeout(function () {
|
||||||
|
Avatar.position = Vec3.sum(origin, {x: Math.random() * spread, y: 0, z: Math.random() * spread});
|
||||||
|
print("Starting at", JSON.stringify(Avatar.position));
|
||||||
|
Avatar.startAnimation(animationData.url, animationData.fps || 30, 1, true, false, animationData.firstFrame || 0, animationData.lastFrame);
|
||||||
|
}, millisecondsToWaitBeforeStarting);
|
Loading…
Reference in a new issue