223 lines
6.3 KiB
JavaScript
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;
|
|
}
|