Script.include("../libraries/utils.js");

var shootingRangeURL = "https://s3.amazonaws.com/hifi-public/eric/models/shootingRange/shootingRange.fbx";
var floorURL = "https://s3.amazonaws.com/hifi-public/eric/models/shootingRange/shootingRange.fbx";
MyAvatar.bodyYaw = 0;
var rangePosition = Vec3.sum(MyAvatar.position, {
    x: 0,
    y: 0,
    z: -30
});
var rangeDimensions = {
    x: 44,
    y: 29,
    z: 96
}
var shootingRange = Entities.addEntity({
    type: 'Model',
    modelURL: shootingRangeURL,
    position: rangePosition,
    dimensions: rangeDimensions
});


var floorPosition = Vec3.subtract(rangePosition, {
    x: 0,
    y: 2,
    z: 0
});
var shootingRangeFloor = Entities.addEntity({
    type: "Model",
    modelURL: floorURL,
    shapeType: 'box',
    position: floorPosition,
    dimensions: {
        x: 93,
        y: 1,
        z: 93
    }
})

var monsters = [];
var numMonsters = 10;
var monsterURLS = ["https://s3.amazonaws.com/hifi-public/eric/models/shootingRange/monster1.fbx", "https://s3.amazonaws.com/hifi-public/eric/models/shootingRange/monster2.fbx"]
initMonsters();

function initMonsters() {
    for (var i = 0; i < numMonsters; i++) {

        var index = randInt(0, monsterURLS.length);
        var monsterURL = monsterURLS[index]
        var monsterPosition = Vec3.sum(rangePosition, {
            x: -rangeDimensions.x / 2 - i * randFloat(5, 10),
            y: 0,
            z: randFloat(-10, 10)
        });
        var monster = Entities.addEntity({
            type: "Model",
            modelURL: monsterURL,
            position: monsterPosition,
            dimensions: {
                x: 1.5,
                y: 1.6,
                z: 0.07
            },
            dynamic: true,
            shapeType: 'box',
            velocity: {
                x: randFloat(1, 3),
                y: 0,
                z: 0
            },
            damping: 0
        });

        monsters.push(monster);
    }
}

function checkMonsters() {

    // check monsters to see if they've gone out of bounds, if so, set them back to starting point
    monsters.forEach(function(monster) {
        var position = Entities.getEntityProperties(monster, "position").position;
        if (position.x > rangePosition.x + rangeDimensions.x / 2 ||
            position.z < rangePosition.z - rangeDimensions.z / 2 ||
            position.y < rangePosition.y - rangeDimensions.y / 2 || position.y > rangePosition.y + rangeDimensions.y / 2) {
            var monsterPosition = Vec3.sum(rangePosition, {
                x: -rangeDimensions.x / 2 - randFloat(5, 10),
                y: 0,
                z: randFloat(-10, 10)
            });
            Entities.editEntity(monster, {
                position: monsterPosition,
                velocity: {
                    x: randFloat(1, 3),
                    y: 0,
                    z: 0
                },
                angularVelocity: {x: 0, y: 0, z:0},
                rotation: Quat.fromPitchYawRollDegrees(0, 0, 0),
            });
        }
    });
}

var checkMonsterInterval = Script.setInterval(checkMonsters, 1000);

function cleanup() {
    Script.clearInterval(checkMonsterInterval);
    Entities.deleteEntity(shootingRange);
    Entities.deleteEntity(shootingRangeFloor);
    monsters.forEach(function(monster) {
        Entities.deleteEntity(monster);
    });
}

Script.scriptEnding.connect(cleanup);