84 lines · 2.8 KB · JavaScript
RawDownload
////  Created by Eric Levin on 3/25/16//  Copyright 2016 High Fidelity, Inc.//// This entity script handles the logic for untipping a cow after it collides with something////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html//  (function() {     var _this = this;    _this.COLLISION_COOLDOWN_TIME = 5000;     _this.preload = function(entityID) {         //set our id so other methods can get it.         _this.entityID = entityID;        //load the mooing sound        _this.mooSound = SoundCache.getSound("https://content.overte.org/Developer/Tutorials/cow/moo.wav")        _this.mooSoundOptions = {            volume: 0.7,            loop: false        };         //variables we will use to keep track of when to reset the cow        _this.timeSinceLastCollision = 0;        _this.shouldUntipCow = true;    }     _this.collisionWithEntity = function(myID, otherID, collisionInfo) {        //we dont actually use any of the parameters above, since we don't really care what we collided with, or the details of the collision.          //5 seconds after a collision, upright the cow.  protect from multiple collisions in a short timespan with the 'shouldUntipCow' variable        if (_this.shouldUntipCow) {            //in Hifi, preface setTimeout with Script.setTimeout            Script.setTimeout(function() {                _this.untipCow();                _this.shouldUntipCow = true;            }, _this.COLLISION_COOLDOWN_TIME);        }         _this.shouldUntipCow = false;     }     _this.untipCow = function() {        // keep yaw but reset pitch and roll        var cowProps = Entities.getEntityProperties(_this.entityID, ["rotation", "position"]);        var eulerRotation = Quat.safeEulerAngles(cowProps.rotation);        eulerRotation.x = 0;        eulerRotation.z = 0;        var newRotation = Quat.fromVec3Degrees(eulerRotation);         //we zero out the velocity and angular velocity so the cow doesn't change position or spin        Entities.editEntity(_this.entityID, {            rotation: newRotation,            velocity: {                x: 0,                y: 0,                z: 0            },            angularVelocity: {                x: 0,                y: 0,                z: 0            }        });         //play the mooing sound when we untip!  if it isn't already playing.        _this.mooSoundOptions.position = cowProps.position;        if (!_this.soundInjector) {            _this.soundInjector = Audio.playSound(_this.mooSound, _this.mooSoundOptions);        } else {            //if its already playing, just restart            _this.soundInjector.setOptions(_this.mooSoundOptions);            _this.soundInjector.restart();        }    }  });