mirror of
https://github.com/lubosz/overte.git
synced 2025-04-05 21:02:07 +02:00
93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
//
|
|
// startTargetPractice.js
|
|
// examples/winterSmashUp/targetPractice
|
|
//
|
|
// Created by Thijs Wenker on 12/21/15.
|
|
// Copyright 2015 High Fidelity, Inc.
|
|
//
|
|
// The Winter Smash Up Target Practice Game using a bow.
|
|
// This script starts the game, when the entity that contains the script gets shot.
|
|
//
|
|
// 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;
|
|
var waitForScriptLoad = false;
|
|
|
|
const MAX_GAME_TIME = 60; //seconds
|
|
const SCRIPT_URL = 'http://s3.amazonaws.com/hifi-public/scripts/winterSmashUp/targetPractice/targetPracticeGame.js';
|
|
const GAME_CHANNEL = 'winterSmashUpGame';
|
|
|
|
var isScriptRunning = function(script) {
|
|
script = script.toLowerCase().trim();
|
|
var runningScripts = ScriptDiscoveryService.getRunning();
|
|
for (i in runningScripts) {
|
|
if (runningScripts[i].url.toLowerCase().trim() == script) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var sendStartSignal = function() {
|
|
Messages.sendMessage(GAME_CHANNEL, JSON.stringify({
|
|
action: 'start',
|
|
gameEntityID: _this.entityID,
|
|
playerSessionUUID: MyAvatar.sessionUUID
|
|
}));
|
|
}
|
|
|
|
var startGame = function() {
|
|
//TODO: check here if someone is already playing this game instance by verifying the userData for playerSessionID
|
|
// and startTime with a maximum timeout of X seconds (30?)
|
|
|
|
|
|
if (!isScriptRunning(SCRIPT_URL)) {
|
|
// Loads the script for the player if this isn't yet loaded
|
|
Script.load(SCRIPT_URL);
|
|
waitForScriptLoad = true;
|
|
return;
|
|
}
|
|
sendStartSignal();
|
|
};
|
|
|
|
Messages.messageReceived.connect(function (channel, message, senderID) {
|
|
if (channel == GAME_CHANNEL) {
|
|
var data = JSON.parse(message);
|
|
switch (data.action) {
|
|
case 'scriptLoaded':
|
|
if (waitForPing) {
|
|
sendStartSignal();
|
|
waitForPing = false;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
_this.preload = function(entityID) {
|
|
_this.entityID = entityID;
|
|
};
|
|
|
|
_this.collisionWithEntity = function(entityA, entityB, collisionInfo) {
|
|
if (entityA == _this.entityID) {
|
|
try {
|
|
var data = JSON.parse(Entities.getEntityProperties(entityB).userData);
|
|
if (data.creatorSessionUUID === MyAvatar.sessionUUID) {
|
|
print('attempting to startGame by collisionWithEntity.');
|
|
startGame();
|
|
}
|
|
} catch(e) {
|
|
}
|
|
}
|
|
};
|
|
|
|
_this.onShot = function(forceDirection) {
|
|
print('attempting to startGame by onShot.');
|
|
startGame();
|
|
};
|
|
|
|
Messages.subscribe(GAME_CHANNEL);
|
|
});
|