250 lines
5 KiB
JavaScript
250 lines
5 KiB
JavaScript
|
import "./libs/kaboom.js";
|
||
|
|
||
|
kaboom({
|
||
|
width: 512,
|
||
|
height: 512,
|
||
|
crisp: true,
|
||
|
canvas: document.querySelector("#kaboom"),
|
||
|
background: [127, 127, 255],
|
||
|
font: "MidSim"
|
||
|
});
|
||
|
|
||
|
loadSprite("Sonic", "./sprites/SonicKaboom.png", {
|
||
|
sliceX: 6,
|
||
|
sliceY: 18,
|
||
|
anims: {
|
||
|
idle: {
|
||
|
from: 0,
|
||
|
to: 0,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
bored: {
|
||
|
from: 6,
|
||
|
to: 7,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
boredloop: {
|
||
|
from: 8,
|
||
|
to: 9,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
up: {
|
||
|
from: 18,
|
||
|
to: 18,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
down: {
|
||
|
from: 24,
|
||
|
to: 24,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
jump: {
|
||
|
from: 30,
|
||
|
to: 30,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
walk: {
|
||
|
from: 36,
|
||
|
to: 41,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
stop: {
|
||
|
from: 42,
|
||
|
to: 43,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
run: {
|
||
|
from: 48,
|
||
|
to: 51,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
runStairs: {
|
||
|
from: 54,
|
||
|
to: 57,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
roll: {
|
||
|
from: 60,
|
||
|
to: 63,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
rollFull: {
|
||
|
from: 64,
|
||
|
to: 64,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
push: {
|
||
|
from: 66,
|
||
|
to: 69,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
drown: {
|
||
|
from: 72,
|
||
|
to: 72,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
death: {
|
||
|
from: 78,
|
||
|
to: 78,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
fall: {
|
||
|
from: 84,
|
||
|
to: 85,
|
||
|
loop: true,
|
||
|
speed: 6
|
||
|
},
|
||
|
glide: {
|
||
|
from: 90,
|
||
|
to: 90,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
breath: {
|
||
|
from: 96,
|
||
|
to: 96,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
trip: {
|
||
|
from: 102,
|
||
|
to: 103,
|
||
|
loop: false,
|
||
|
speed: 6
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
loadSprite("axe", "./sprites/blocks/axe.png");
|
||
|
loadSprite("chest", "./sprites/blocks/chest.png");
|
||
|
loadSprite("cobblestone", "./sprites/blocks/cobblestone.png");
|
||
|
loadSprite("craft", "./sprites/blocks/craft.png");
|
||
|
loadSprite("dandelion", "./sprites/blocks/dandelion.png");
|
||
|
loadSprite("dirt", "./sprites/blocks/dirt.png");
|
||
|
loadSprite("grass", "./sprites/blocks/grass.png");
|
||
|
loadSprite("lava", "./sprites/blocks/lava.png");
|
||
|
loadSprite("leaves", "./sprites/blocks/leaves.png");
|
||
|
loadSprite("pickaxe", "./sprites/blocks/pickaxe.png");
|
||
|
loadSprite("plank", "./sprites/blocks/plank.png");
|
||
|
loadSprite("rose", "./sprites/blocks/rose.png");
|
||
|
loadSprite("sand", "./sprites/blocks/sand.png");
|
||
|
loadSprite("shovel", "./sprites/blocks/shovel.png");
|
||
|
loadSprite("slime", "./sprites/blocks/slime.png");
|
||
|
loadSprite("stone", "./sprites/blocks/stone.png");
|
||
|
loadSprite("sword", "./sprites/blocks/sword.png");
|
||
|
loadSprite("water", "./sprites/blocks/water.png");
|
||
|
loadSprite("wood", "./sprites/blocks/wood.png");
|
||
|
|
||
|
addLevel([
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"= =",
|
||
|
"================",
|
||
|
], {
|
||
|
// define the size of each block
|
||
|
width: 32,
|
||
|
height: 32,
|
||
|
// define what each symbol means, by a function returning a component list (what will be passed to add())
|
||
|
"=": () => [
|
||
|
sprite("wood"),
|
||
|
scale(2),
|
||
|
area(),
|
||
|
solid(),
|
||
|
],
|
||
|
})
|
||
|
|
||
|
const sonic = add([
|
||
|
pos(80, 100),
|
||
|
scale(2),
|
||
|
area({
|
||
|
height: 34,
|
||
|
width: 20,
|
||
|
offset: vec2(54, 40)
|
||
|
}),
|
||
|
body(),
|
||
|
sprite("Sonic"),
|
||
|
state("idle", [
|
||
|
"idle",
|
||
|
"bored",
|
||
|
"jump",
|
||
|
"walk",
|
||
|
"run",
|
||
|
"roll",
|
||
|
"dead",
|
||
|
"falling",
|
||
|
"tripping"
|
||
|
]),
|
||
|
{
|
||
|
speed: 160,
|
||
|
speedRun: 160,
|
||
|
speedDash: 320
|
||
|
}
|
||
|
])
|
||
|
|
||
|
// this callback will run once when enters "attack" state
|
||
|
sonic.onStateEnter("bored", () => {
|
||
|
sonic.play("bored")
|
||
|
wait(2, () => {
|
||
|
sonic.play("boredloop")
|
||
|
})
|
||
|
})
|
||
|
|
||
|
// this will run once when enters "idle" state
|
||
|
sonic.onStateEnter("idle", () => {
|
||
|
console.log("Is In Idle");
|
||
|
sonic.play("idle")
|
||
|
wait(5, () => {
|
||
|
sonic.enterState("bored")
|
||
|
console.log("Is In Bored");
|
||
|
})
|
||
|
})
|
||
|
|
||
|
sonic.onStateEnter("walk", (dir) => {
|
||
|
sonic.play("walk", {flipX: dir});
|
||
|
})
|
||
|
|
||
|
sonic.enterState("idle");
|
||
|
|
||
|
var vel = 0;
|
||
|
onUpdate(() => {
|
||
|
if (isKeyDown("left")) {
|
||
|
if (vel > -1) vel -= 0.01;
|
||
|
else if (vel <= 1) vel = -1;
|
||
|
sonic.enterState("walk", true);
|
||
|
} else if (isKeyDown("right")) {
|
||
|
if (vel < 1) vel += 0.01;
|
||
|
else if (vel >= 1) vel = 1;
|
||
|
sonic.enterState("walk", false);
|
||
|
} else {
|
||
|
if (vel < 0) vel += 0.05;
|
||
|
else if (vel > 0) vel -= 0.05;
|
||
|
if (Math.abs(vel) <= 0.05) vel = 0;
|
||
|
}
|
||
|
sonic.move(sonic.speed * vel, 0)
|
||
|
})
|