import { gameFrame } from '../constants/Prototype.js'; import { mouseAnimation } from '../sketch.js'; import { activeMice, mouseGroup, updateProgressBar } from '../GameScene.js'; const mouseAniDesc = { idle: { row: 0, frameSize: [200, 200] }, walk: {row: 1, frames: 6, frameSize: [200, 200], frameDelay: 10 } } class Mouse { constructor(x, y, row, speed, HP, AP, spriteSheet, width) { this.sprite = createSprite(x, y, width, width); this.sprite.spriteSheet = spriteSheet; this.sprite.scale = gameFrame.catRatio * width / gameFrame.tileWidth; this.sprite.overlaps(mouseGroup) this.sprite.addAnis(mouseAniDesc); this.sprite.changeAni('walk'); this.sprite.layer = 3; this.sprite.vel.x = speed; this.row = row; this.HP = HP; this.AP = AP; this.width = width; this.targetCat = undefined; this.lastAttack = 0; this.defaultSpeed = speed; this.defaultHP = HP; this.isAlive = true; } remove() { this.sprite.remove(); let index = activeMice[this.row].indexOf(this); if (index != -1) { activeMice[this.row].splice(index, 1); } if (this.defaultHP = 1000) { if (this.row - 1 >= 0) { index = activeMice[this.row - 1].indexOf(this); if (index != -1) activeMice[this.row - 1].splice(index, 1); } if (this.row + 1 < gameFrame.rows) { index = activeMice[this.row + 1].indexOf(this); if (index != -1) activeMice[this.row + 1].splice(index, 1); } } if (this.isAlive) { this.isAlive = false; updateProgressBar(); } } attack() { if (this.targetCat != undefined) { this.sprite.vel.x = 0; this.sprite.changeAni('idle'); console.log(`I have a target Cat, and its HP is ${this.targetCat.HP}`) if (this.lastAttack == 0 || millis() - this.lastAttack > 3000) { this.targetCat.attacked(this); this.lastAttack = millis(); } } else { this.sprite.vel.x = this.defaultSpeed; this.sprite.changeAni('walk'); } } attacked(point) { this.HP -= point; console.log(`I'm being attacked by ${point} points and my HP is now ${this.HP}`) if (this.HP <= 0) this.remove(); else { this.sprite.opacity = (this.HP / this.defaultHP) * 0.5 + 0.5; } } } class BasicMouse extends Mouse { constructor(x, y, row) { super(x, y, row, -0.15, 100, 20, mouseAnimation.basicMouse, gameFrame.tileWidth); } } class HelmetMouse extends Mouse { constructor(x, y, row) { super(x, y, row, -0.15, 150, 20, mouseAnimation.helmetMouse, gameFrame.tileWidth); } } class SportyMouse extends Mouse { constructor(x, y, row) { super(x, y, row, -0.3, 85, 20, mouseAnimation.sportyMouse, gameFrame.tileWidth); } } class BossMouse extends Mouse { constructor(x, y, row) { super(x, y, row, -0.05, 1000, 50, mouseAnimation.bossMouse, 3 * gameFrame.tileWidth); } } export function createMouse(type, x, y, row) { switch (type) { case 'basicMouse': return new BasicMouse(x, y, row); case 'helmetMouse': return new HelmetMouse(x, y, row); case 'sportyMouse': return new SportyMouse(x, y, row); case 'bossMouse': return new BossMouse(x, y, row); default: return undefined; } }