mirror of
https://github.com/lubosz/overte.git
synced 2025-04-14 13:06:14 +02:00
210 lines
6 KiB
JavaScript
210 lines
6 KiB
JavaScript
//
|
|
// Created by Ryan Huffman on 1/10/2017
|
|
// Copyright 2017 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
|
|
//
|
|
/* globals utils, SHORTBOW_ENTITIES, TEMPLATES:true */
|
|
|
|
Script.include('utils.js');
|
|
Script.include('shortbow.js');
|
|
Script.include('shortbowGameManager.js');
|
|
TEMPLATES = SHORTBOW_ENTITIES.Entities;
|
|
|
|
// Merge two objects into a new object. If a key name appears in both a and b,
|
|
// the value in a will be used.
|
|
//
|
|
// @param {object} a
|
|
// @param {object} b
|
|
// @returns {object} The new object
|
|
function mergeObjects(a, b) {
|
|
var obj = {};
|
|
var key;
|
|
for (key in b) {
|
|
obj[key] = b[key];
|
|
}
|
|
for (key in a) {
|
|
obj[key] = a[key];
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
// Spawn an entity from a template.
|
|
//
|
|
// The overrides can be used to override or add properties in the template. For instance,
|
|
// it's common to override the `position` property so that you can set the position
|
|
// of the entity to be spawned.
|
|
//
|
|
// @param {string} templateName The name of the template to spawn
|
|
// @param {object} overrides An object containing properties that will override
|
|
// any properties set in the template.
|
|
function spawnTemplate(templateName, overrides) {
|
|
var template = getTemplate(templateName);
|
|
if (template === null) {
|
|
print("ERROR, unknown template name:", templateName);
|
|
return null;
|
|
}
|
|
print("Spawning: ", templateName);
|
|
var properties = mergeObjects(overrides, template);
|
|
return Entities.addEntity(properties);
|
|
}
|
|
|
|
function spawnTemplates(templateName, overrides) {
|
|
var templates = getTemplates(templateName);
|
|
if (template.length === 0) {
|
|
print("ERROR, unknown template name:", templateName);
|
|
return [];
|
|
}
|
|
|
|
var spawnedEntities = [];
|
|
for (var i = 0; i < templates.length; ++i) {
|
|
print("Spawning: ", templateName);
|
|
var properties = mergeObjects(overrides, templates[i]);
|
|
spawnedEntities.push(Entities.addEntity(properties));
|
|
}
|
|
return spawnedEntities;
|
|
}
|
|
|
|
// TEMPLATES contains a dictionary of different named entity templates. An entity
|
|
// template is just a list of properties.
|
|
//
|
|
// @param name Name of the template to get
|
|
// @return {object} The matching template, or null if not found
|
|
function getTemplate(name) {
|
|
for (var i = 0; i < TEMPLATES.length; ++i) {
|
|
if (TEMPLATES[i].name === name) {
|
|
return TEMPLATES[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
function getTemplates(name) {
|
|
var templates = [];
|
|
for (var i = 0; i < TEMPLATES.length; ++i) {
|
|
if (TEMPLATES[i].name === name) {
|
|
templates.push(TEMPLATES[i]);
|
|
}
|
|
}
|
|
return templates;
|
|
}
|
|
|
|
|
|
// Cleanup Shortbow template data
|
|
for (var i = 0; i < TEMPLATES.length; ++i) {
|
|
var template = TEMPLATES[i];
|
|
|
|
// Fixup model url
|
|
if (template.type === "Model") {
|
|
var urlParts = template.modelURL.split("/");
|
|
var filename = urlParts[urlParts.length - 1];
|
|
var newURL = Script.resolvePath("models/" + filename);
|
|
print("Updated url", template.modelURL, "to", newURL);
|
|
template.modelURL = newURL;
|
|
}
|
|
}
|
|
|
|
var entityIDs = [];
|
|
|
|
var scoreboardID = null;
|
|
var buttonID = null;
|
|
var waveDisplayID = null;
|
|
var scoreDisplayID = null;
|
|
var highScoreDisplayID = null;
|
|
var livesDisplayID = null;
|
|
var platformID = null;
|
|
function createLocalGame() {
|
|
var rootPosition = utils.findSurfaceBelowPosition(MyAvatar.position);
|
|
rootPosition.y += 6.11;
|
|
|
|
scoreboardID = spawnTemplate("SB.Scoreboard", {
|
|
position: rootPosition
|
|
});
|
|
entityIDs.push(scoreboardID);
|
|
|
|
// Create start button
|
|
buttonID = spawnTemplate("SB.StartButton", {
|
|
parentID: scoreboardID,
|
|
script: Script.resolvePath("startGameButtonClientEntity.js"),
|
|
userData: JSON.stringify({
|
|
grabbableKey: {
|
|
wantsTrigger: true
|
|
}
|
|
})
|
|
});
|
|
entityIDs.push(buttonID);
|
|
|
|
|
|
waveDisplayID = spawnTemplate("SB.DisplayWave", {
|
|
parentID: scoreboardID,
|
|
userData: JSON.stringify({
|
|
displayType: "wave"
|
|
})
|
|
});
|
|
entityIDs.push(waveDisplayID);
|
|
|
|
scoreDisplayID = spawnTemplate("SB.DisplayScore", {
|
|
parentID: scoreboardID,
|
|
userData: JSON.stringify({
|
|
displayType: "score"
|
|
})
|
|
});
|
|
entityIDs.push(scoreDisplayID);
|
|
|
|
livesDisplayID = spawnTemplate("SB.DisplayLives", {
|
|
parentID: scoreboardID,
|
|
userData: JSON.stringify({
|
|
displayType: "lives"
|
|
})
|
|
});
|
|
entityIDs.push(livesDisplayID);
|
|
|
|
highScoreDisplayID = spawnTemplate("SB.DisplayHighScore", {
|
|
parentID: scoreboardID,
|
|
userData: JSON.stringify({
|
|
displayType: "highscore"
|
|
})
|
|
});
|
|
entityIDs.push(highScoreDisplayID);
|
|
|
|
platformID = spawnTemplate("SB.Platform", {
|
|
parentID: scoreboardID
|
|
});
|
|
entityIDs.push(platformID);
|
|
|
|
spawnTemplate("SB.GateCollider", {
|
|
parentID: scoreboardID,
|
|
visible: false
|
|
});
|
|
entityIDs.push(platformID);
|
|
|
|
Entities.editEntity(scoreboardID, {
|
|
serverScripts: Script.resolvePath('shortbowServerEntity.js')
|
|
});
|
|
|
|
spawnTemplates("SB.BowSpawn", {
|
|
parentID: scoreboardID,
|
|
visible: false
|
|
});
|
|
spawnTemplates("SB.EnemySpawn", {
|
|
parentID: scoreboardID,
|
|
visible: false
|
|
});
|
|
|
|
var bowPositions = [];
|
|
var spawnPositions = [];
|
|
for (var i = 0; i < TEMPLATES.length; ++i) {
|
|
var template = TEMPLATES[i];
|
|
|
|
if (template.name === "SB.BowSpawn") {
|
|
bowPositions.push(Vec3.sum(rootPosition, template.localPosition));
|
|
Vec3.print("Pushing bow position", Vec3.sum(rootPosition, template.localPosition));
|
|
} else if (template.name === "SB.EnemySpawn") {
|
|
spawnPositions.push(Vec3.sum(rootPosition, template.localPosition));
|
|
Vec3.print("Pushing spawnposition", Vec3.sum(rootPosition, template.localPosition));
|
|
}
|
|
}
|
|
}
|
|
|
|
createLocalGame();
|
|
Script.stop();
|