//
//  testingVoxelSeeingRestart.js
//  hifi
//
//  Created by Brad Hefta-Gaub on 2/26/14
//  Copyright (c) 2014 HighFidelity, Inc. All rights reserved.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

var count = 0;
var yawDirection = -1;
var yaw = 45;
var yawMax = 70;
var yawMin = 20;
var vantagePoint = {x: 5000, y: 500, z: 5000};

var isLocal = false;

// set up our VoxelViewer with a position and orientation
var orientation = Quat.fromPitchYawRollDegrees(0, yaw, 0);

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function init() {
    if (isLocal) {
        MyAvatar.position = vantagePoint;
        MyAvatar.orientation = orientation;
    } else {
        VoxelViewer.setPosition(vantagePoint);
        VoxelViewer.setOrientation(orientation);
        VoxelViewer.queryOctree();
        Agent.isAvatar = true;
    }
}

function keepLooking(deltaTime) {
    //print("count =" + count);

    if (count == 0) {
        init();
    }
    count++;
    if (count % getRandomInt(5, 15) == 0) {
        yaw += yawDirection;
        orientation = Quat.fromPitchYawRollDegrees(0, yaw, 0);
        if (yaw > yawMax || yaw < yawMin) {
            yawDirection = yawDirection * -1;
        }

        //if (count % 10000 == 0) {
        //    print("calling VoxelViewer.queryOctree()... count=" + count + " yaw=" + yaw);
        //}

        if (isLocal) {
            MyAvatar.orientation = orientation;
        } else {
            VoxelViewer.setOrientation(orientation);
            VoxelViewer.queryOctree();
            
            //if (count % 10000 == 0) {
            //    print("VoxelViewer.getOctreeElementsCount()=" + VoxelViewer.getOctreeElementsCount());
            //}
        }
    }
    
    // approximately every second, consider stopping
    if (count % 60 == 0) {
        print("considering stop.... elementCount:" + VoxelViewer.getOctreeElementsCount());
        var stopProbability = 0.05; // 5% chance of stopping
        if (Math.random() < stopProbability) {
            print("stopping.... elementCount:" + VoxelViewer.getOctreeElementsCount());
            Script.stop();
        } 
    }
}

function scriptEnding() {
    print("SCRIPT ENDNG!!!\n");
}

// register the call back so it fires before each data send
Script.update.connect(keepLooking);

// register our scriptEnding callback
Script.scriptEnding.connect(scriptEnding);


// test for local...
Menu.isOptionChecked("Voxels");
isLocal = true; // will only get here on local client