Joshua Shoemaker bf2572e3e9 Init
2016-11-22 22:48:39 -06:00

223 lines
6.3 KiB
JavaScript

function enemySetup(){
//Animation Objects
var enemyIdle = {
id: {},
frameIndex: 1,
frameLength: 16,
play: function(){
return this.id["enemyIdle" + (this.frameIndex = nextAnimationFrame(this))];
},
fps: setAnimationFPS(10)
}
var enemyWalk = {
id: {},
frameIndex: 1,
frameLength: 21,
play: function(){
return this.id["enemyWalk" + (this.frameIndex = nextAnimationFrame(this))];
},
fps: setAnimationFPS(30)
}
//Loading Sprite Sheets ito animation Onjects
enemyIdle.id = PIXI.loader.resources["assets/sprites/enemy/enemyIdle.json"].textures;
enemyWalk.id = PIXI.loader.resources["assets/sprites/enemy/enemyWalk.json"].textures;
let levelFollowEnemies = [
{
x: 1400,
y: 630,
height: 80,
width: 80,
visible: true,
startingTexture : enemyIdle.id["enemyIdle1"],
detectionRange: 150
},
{
x: 1800,
y: 630,
height: 80,
width: 80,
visible: true,
startingTexture : enemyIdle.id["enemyIdle1"],
detectionRange: 150
}
];
let levelPatrolEnemies = [
{
startPosition: {
x: 1400,
y: 390
},
endPosition: {
x: 1800,
y: 390
},
height: 80,
width: 80,
visible: true,
startingTexture : enemyIdle.id["enemyIdle1"],
startDirection : "right"
},
{
startPosition: {
x: 800,
y: 390
},
endPosition: {
x: 1250,
y: 390
},
height: 80,
width: 80,
visible: true,
startingTexture : enemyIdle.id["enemyIdle1"],
startDirection : "right"
},
{
startPosition: {
x: 1250,
y: 390
},
endPosition: {
x: 800,
y: 390
},
height: 80,
width: 80,
visible: true,
startingTexture : enemyIdle.id["enemyIdle1"],
startDirection : "left"
}
]
levelFollowEnemies.forEach(function(e){
enemies.push(createFollowEnemy(e))
});
levelPatrolEnemies.forEach(function(e){
enemies.push(createPatrolEnemy(e))
});
function createFollowEnemy(data){
let enemy = new Sprite(data.startingTexture.texture);
enemy.x = data.x;
enemy.y = data.y;
enemy.height = data.height;
enemy.width = data.width;
enemy.visible = data.visible;
enemy.currentAnimation = enemyIdle;
enemy.anchor.x = 0.5;
enemy.Animate = function(){
setTimeout(function(){
enemy.texture = enemy.currentAnimation.play();
enemy.Animate();
}, enemy.currentAnimation.fps);
};
enemy.Chase = function(){
setTimeout(function(){
if(isInRange(getDistance(player || {}, enemy), data.detectionRange) && Math.floor(enemy.x) != Math.floor(player.x) && player.alive()){
let moveValue = moveTowards(enemy, player, 1);
if((moveValue > enemy.x) && enemy.scale.x < 0){
enemy.scale.x = 0.3125;
}
if((moveValue < enemy.x) && enemy.scale.x > 0){
enemy.scale.x = -0.3125;
}
enemy.x = moveValue;
enemy.currentAnimation = enemyWalk;
}
else{
enemy.currentAnimation = enemyIdle;
}
enemy.Chase();
}, fpsTimeout)
};
enemy.Animate();
enemy.Chase();
stage.addChild(enemy);
return enemy;
}
function createPatrolEnemy(data){
let enemy = new Sprite(data.startingTexture.texture);
enemy.startPosition = data.startPosition;
enemy.endPosition = data.endPosition;
enemy.x = enemy.startPosition.x;
enemy.y = enemy.startPosition.y;
enemy.height = data.height;
enemy.width = data.width;
enemy.visible = data.visible;
enemy.currentAnimation = enemyWalk;
enemy.anchor.x = 0.5;
enemy.toEndPosition = true;
enemy.startDirection = data.startDirection;
if(enemy.startDirection === "left"){
enemy.scale.x = -0.3125;
}
enemy.Animate = function(){
setTimeout(function(){
enemy.texture = enemy.currentAnimation.play();
enemy.Animate();
}, 50);
};
enemy.Patrol = function(){
let moveValue;
if(enemy.toEndPosition){
if(!getDistance(enemy, enemy.endPosition) < 1){
moveValue = moveTowards(enemy, enemy.endPosition, 1);
enemy.x = moveValue;
if(enemy.startDirection === "right"){
enemy.scale.x = 0.3125;
}
else{
enemy.scale.x = -0.3125;
}
}
else{
enemy.toEndPosition = false;
}
}
else{
if(!getDistance(enemy, enemy.startPosition) < 1){
moveValue = moveTowards(enemy, enemy.startPosition, 1);
enemy.x = moveValue;
if(enemy.startDirection === "right"){
enemy.scale.x = -0.3125;
}
else{
enemy.scale.x = 0.3125;
}
}
else{
enemy.toEndPosition = true;
}
}
setTimeout(function(){
enemy.Patrol()
}, fpsTimeout)
};
enemy.Animate();
enemy.Patrol();
stage.addChild(enemy);
return enemy;
}
return true;
}