mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
106 lines
No EOL
3.5 KiB
JavaScript
106 lines
No EOL
3.5 KiB
JavaScript
//
|
|
// growingPlantEntityScript.js
|
|
// examples/homeContent/plant
|
|
//
|
|
// Created by Eric Levin on 2/10/16.
|
|
// Copyright 2016 High Fidelity, Inc.
|
|
//
|
|
// This entity script handles the logic for growing a plant when it has water poured on it
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
|
|
|
|
(function() {
|
|
Script.include("../../libraries/tween.js");
|
|
|
|
var _this;
|
|
var TWEEN = loadTween();
|
|
GrowingPlant = function() {
|
|
_this = this;
|
|
_this.startingFlowerDimensions = {
|
|
x: 0.6,
|
|
y: 0.001,
|
|
z: 0.6
|
|
};
|
|
};
|
|
|
|
GrowingPlant.prototype = {
|
|
|
|
createFlower: function() {
|
|
_this.flowerUserData = {
|
|
ProceduralEntity: {
|
|
shaderUrl: "file:///C:/Users/Eric/hifi/examples/homeContent/plant/flower.fs",
|
|
uniforms: {
|
|
iBloomPct: 0.0
|
|
}
|
|
}
|
|
};
|
|
_this.startingFlowerPosition = Vec3.sum(this.position, {
|
|
x: 0,
|
|
y: this.dimensions.y/2,
|
|
z: 0
|
|
});
|
|
_this.flower = Entities.addEntity({
|
|
type: "Sphere",
|
|
position: _this.startingFlowerPosition,
|
|
color: {
|
|
red: 100,
|
|
green: 10,
|
|
blue: 100
|
|
},
|
|
dimensions: _this.startingFlowerDimensions,
|
|
userData: JSON.stringify(_this.flowerUserData)
|
|
});
|
|
|
|
var curProps = {
|
|
yDimension: _this.startingFlowerDimensions.y,
|
|
yPosition: _this.startingFlowerPosition.y,
|
|
bloomPct: _this.flowerUserData.ProceduralEntity.uniforms.iBloomPct
|
|
};
|
|
var newYDimension = curProps.yDimension + 2;
|
|
var endProps = {
|
|
yDimension: newYDimension,
|
|
yPosition: _this.startingFlowerPosition.y + newYDimension/2,
|
|
bloomPct: 1
|
|
};
|
|
|
|
var bloomTween = new TWEEN.Tween(curProps).
|
|
to(endProps, 3000).
|
|
easing(TWEEN.Easing.Cubic.InOut).
|
|
delay(1000).
|
|
onUpdate(function() {
|
|
_this.flowerUserData.ProceduralEntity.uniforms.iBloomPct = curProps.bloomPct;
|
|
Entities.editEntity(_this.flower, {
|
|
dimensions: {x: _this.startingFlowerDimensions.x, y: curProps.yDimension, z: _this.startingFlowerDimensions.z},
|
|
position: {x: _this.startingFlowerPosition.x, y: curProps.yPosition, z: _this.startingFlowerPosition.z},
|
|
userData: JSON.stringify(_this.flowerUserData)
|
|
});
|
|
}).start();
|
|
},
|
|
|
|
preload: function(entityID) {
|
|
print("EBL PRELOAD");
|
|
this.entityID = entityID;
|
|
this.props = Entities.getEntityProperties(this.entityID, ["position", "dimensions"]);
|
|
this.position = this.props.position;
|
|
this.dimensions = this.props.dimensions;
|
|
this.createFlower();
|
|
Script.update.connect(_this.update);
|
|
},
|
|
|
|
update: function() {
|
|
TWEEN.update();
|
|
},
|
|
|
|
unload: function() {
|
|
Script.update.disconnect(_this.update);
|
|
Entities.deleteEntity(_this.flower);
|
|
print("EBL UNLOAD DONE")
|
|
}
|
|
|
|
};
|
|
|
|
// entity scripts always need to return a newly constructed object of our type
|
|
return new GrowingPlant();
|
|
}); |