Add launcher to tower defense

This commit is contained in:
Ryan Huffman 2016-12-02 10:56:09 -08:00
parent fa2fc83d38
commit 44389bcad6
4 changed files with 114 additions and 0 deletions

Binary file not shown.

View file

@ -0,0 +1,35 @@
function findSurfaceBelowPosition(pos) {
var result = Entities.findRayIntersection({
origin: pos,
direction: { x: 0, y: -1, z: 0 }
});
if (result.intersects) {
return result.intersection;
}
return pos;
}
LAUNCHER_DIMENSIONS = {
x: 0.5,
y: 0.5,
z: 0.5
}
createLauncherAtMyAvatar = function() {
var launcherPos = Vec3.sum(MyAvatar.position, Vec3.multiply(10, Quat.getFront(MyAvatar.orientation)));
launcherPos = findSurfaceBelowPosition(launcherPos);
launcherPos.y += LAUNCHER_DIMENSIONS.y / 2;
createLaucnher(launcherPos);
}
createLauncher = function(position) {
Entities.addEntity({
position: position,
type: "Model",
type: "Box",
//modelURL: 'http://hifi-content.s3.amazonaws.com/alan/dev/EZ-Tube.fbx',
//compoundShapeURL: 'http://hifi-content.s3.amazonaws.com/alan/dev/EZ-Tube3.obj',
//shapeType: 'compound'
dimensions: LAUNCHER_DIMENSIONS,
script: Script.resolvePath("launch.js")
});
}

View file

@ -0,0 +1,79 @@
//
// cylinderBlock.js
//
// Created by David Rowe on 25 Oct 2016.
// Copyright 2015 High Fidelity, Inc.
//
// This script displays a progress download indicator when downloads are in progress.
//
// 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 BLOCK_MODEL_URL = Script.resolvePath("assets/block.fbx");
var BLOCK_DIMENSIONS = {
x: 1,
y: 1,
z: 1
};
var BLOCK_LIFETIME = 10;
var MUZZLE_SOUND_URL = Script.resolvePath("air_gun_1_converted.wav");
var MUZZLE_SOUND_VOLUME = 0.5;
var MUZZLE_SPEED = 6.0; // m/s
var MUZZLE_ANGLE = 5.0; // Degrees off-center to discourage blocks falling back inside cylinder.
var muzzleSound;
var cylinderID;
this.preload = function (entityID) {
print("launch.js | preload");
cylinderID = entityID;
muzzleSound = SoundCache.getSound(MUZZLE_SOUND_URL);
}
this.launchBlock = function () {
var cylinder = Entities.getEntityProperties(cylinderID, ["position", "rotation", "dimensions"]);
var muzzlePosition = Vec3.sum(cylinder.position,
Vec3.multiplyQbyV(cylinder.rotation, { x: 0.0, y: 0.5 * (cylinder.dimensions.y + BLOCK_DIMENSIONS.y), Z: 0.0 }));
var muzzleVelocity = Vec3.multiply(MUZZLE_SPEED, Vec3.UNIT_Y);
muzzleVelocity = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(MUZZLE_ANGLE, 0.0, 0.0), muzzleVelocity);
muzzleVelocity = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0.0, Math.random() * 360.0, 0.0), muzzleVelocity);
muzzleVelocity = Vec3.multiplyQbyV(cylinder.rotation, muzzleVelocity);
Entities.addEntity({
type: "Model",
modelURL: BLOCK_MODEL_URL,
shapeType: "compound",
//compoundShapeURL: BLOCK_COMPOUND_SHAPE_URL,
dimensions: BLOCK_DIMENSIONS,
dynamic: 1,
gravity: { x: 0.0, y: -9.8, z: 0.0 },
collisionsWillMove: 1,
position: muzzlePosition,
rotation: Quat.multiply(cylinder.rotation, Quat.fromPitchYawRollDegrees(0.0, Math.random() * 360.0, 0.0)),
velocity: muzzleVelocity,
lifetime: BLOCK_LIFETIME
});
Audio.playSound(muzzleSound, {
position: cylinder.muzzlePosition,
orientation: cylinder.rotation,
volume: MUZZLE_SOUND_VOLUME
});
}
this.clickDownOnEntity = function () {
this.launchBlock();
}
this.startNearTrigger = function () {
this.launchBlock();
}
this.startFarTrigger = function () {
this.launchBlock();
}
})