forked from ManitejaPadigela/martial-arts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
105 lines (87 loc) · 3.07 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
let c = document.getElementById("my-canvas");
let ctx = c.getContext("2d");
let loadImage = (src,callback)=> {
let img = document.createElement("img");
img.onload = () => callback(img);
img.src = src;
};
let imagePath = (frameNumber , animation ) => {
return "/images/"+animation +"/" + frameNumber + ".png";
};
let frames ={
idle : [1,2,3,4,5,6,7,8],
punch : [1,2,3,4,5,6,7],
kick : [1,2,3,4,5,6,7],
block : [1,2,3,4,5,6,7,8,9],
forward : [1,2,3,4,5,6],
backward :[1,2,3,4,5,6]
};
let loadImages = (callback) => {
let images = {idle : [] , kick : [] , punch : [], block :[] , forward:[],backward:[] };
let imagesToLoad = 0;
["idle","punch","kick","block","forward","backward"].forEach((animation) => {
let animationFrames = frames[animation];
imagesToLoad = imagesToLoad + animationFrames.length;
animationFrames.forEach((frameNumber)=>{
let path = imagePath(frameNumber,animation);
loadImage(path,(image)=>{
images[animation][frameNumber - 1]= image;
imagesToLoad= imagesToLoad - 1;
if (imagesToLoad === 0){
callback(images);
}
});
});
});
};
let animate = (ctx,images,animation,callback) => {
images[animation].forEach((image,index)=> {
setTimeout(()=>{
ctx.clearRect(0,0,500,1000); //To clear the Canvas
ctx.drawImage(image,0,0,500,1000);
},index * 100);
});
setTimeout(callback, images[animation].length*100);
};
loadImages((images) => {
let queuedAnimations =[];
let aux = () =>{
let selectedAnimation;
if (queuedAnimations.length === 0){
selectedAnimation = 'idle';
}else{
selectedAnimation = queuedAnimations.shift();
}
animate(ctx, images, selectedAnimation, aux);
};
aux();
document.getElementById("kick").onclick = () => {
queuedAnimations.push("kick");
};
document.getElementById("punch").onclick = () => {
queuedAnimations.push("punch");
};
document.getElementById("block").onclick = () => {
queuedAnimations.push("block");
};
document.getElementById("forward").onclick = () => {
queuedAnimations.push("forward");
};
document.getElementById("backward").onclick = () => {
queuedAnimations.push("backward");
};
document.addEventListener("keyup",(event)=>{
const key = event.key;
if (key === "E" || key === "e"){
queuedAnimations.push("kick");
}else if (key === "W" || key === "w"){
queuedAnimations.push("punch");
}else if (key === "S" || key ==="s"){
queuedAnimations.push("block");
}else if (key === "a" || key === "A"){
queuedAnimations.push("backward");
}else if (key === "d" || key === "D"){
queuedAnimations.push("forward");
}
});
});