Throwable working

This commit is contained in:
adeliptr 2025-05-06 23:13:43 +09:00
parent 1569132f8d
commit c4aeab6ec5
4 changed files with 103 additions and 48 deletions

62
Cat.js
View File

@ -1,8 +1,9 @@
import { gameFrame } from './prototype.js';
import { catAnimation, imageAssets } from './sketch.js';
import { grid, cheeses, activeMice, calculateCell } from './GameScene.js';
import { grid, cheeses, activeMice, calculateCell, mouseGroup, throwableGroup } from './GameScene.js';
import { Yarn, Snowball } from './Throwable.js';
export const movingObjects = [];
export const throwables = [];
export const catAniDesc = {
chefCat: {
idle: { row: 0, frames: 4, frameSize: [200, 200], frameDelay: 10 },
@ -33,9 +34,9 @@ export class Cat {
this.sprite.spriteSheet = spriteSheet;
this.sprite.addAnis(ani);
this.sprite.collider = 'static';
this.sprite.collides(mouseGroup);
this.sprite.overlaps(throwableGroup);
this.sprite.layer = 1;
console.log(this.spriteSheet);
console.log(this.sprite.animation);
this.sprite.changeAni('idle');
this.active = false;
@ -137,16 +138,15 @@ export class SingleYarnCat extends Cat {
else this.switchToIdle();
if (this.active && (millis() - this.lastShot > 3000)) {
const yarn = createSprite(this.x + gameFrame.tileWidth / 2, this.y, 20, 20);
yarn.image = imageAssets.yarn;
yarn.scale = gameFrame.tileWidth / 1024;
yarn.vel.x = 1;
yarn.life = 600;
const newMovingObject = {
sprite: yarn,
point: 15
let yarnX = this.x + gameFrame.tileWidth / 2;
let yarnY = this.y;
const yarn = new Yarn(yarnX, yarnY);
if (yarn) {
throwables.push(yarn);
throwableGroup.add(yarn.sprite);
}
movingObjects.push(newMovingObject);
this.lastShot = millis();
}
}
@ -165,18 +165,18 @@ export class DoubleYarnCat extends Cat {
else this.switchToIdle();
if (this.active && (millis() - this.lastShot > 3000)) {
// TODO: check on the offset again
for (let offset of [0, 20]) {
const yarn = createSprite(this.x + gameFrame.tileWidth / 2 + offset, this.y, 20, 20);
yarn.image = imageAssets.yarn;
yarn.scale = gameFrame.tileWidth / 1024;
yarn.vel.x = 1;
yarn.life = 600;
const newMovingObject = {
sprite: yarn,
point: 15
let yarnX = this.x + gameFrame.tileWidth / 2 + offset;
let yarnY = this.y;
const yarn = new Yarn(yarnX, yarnY);
if (yarn) {
throwables.push(yarn);
throwableGroup.add(yarn.sprite);
}
movingObjects.push(newMovingObject);
}
this.lastShot = millis();
}
}
@ -191,7 +191,6 @@ export class SleepyCat extends Cat {
}
action(targetMouse) {
console.log(`do i get here`);
if (this.awake) {
this.changeAni('action');
this.wakeStart = millis();
@ -221,16 +220,15 @@ export class IceCat extends Cat {
else this.switchToIdle();
if (this.active && (millis() - this.lastShot > 3000)) {
const snowball = createSprite(this.x + gameFrame.tileWidth / 2, this.y, 20, 20);
snowball.image = imageAssets.snowball;
snowball.scale = gameFrame.tileWidth / 1024;
snowball.vel.x = 1;
snowball.life = 600;
const newMovingObject = {
sprite: snowball,
point: 20
const snowballX = this.x + gameFrame.tileWidth / 2;
const snowballY = this.y;
const snowball = new Snowball(snowballX, snowballY)
if (snowball) {
throwables.push(snowball);
throwableGroup.add(snowball.sprite);
}
movingObjects.push(newMovingObject);
this.lastShot = millis();
}
}

View File

@ -1,7 +1,7 @@
import { prototypeFrame, gameFrame } from './prototype.js';
import { imageAssets, catImages, catAnimation, selectedCatType, resetCatType } from './sketch.js';
import { Cat, ChefCat, SingleYarnCat, DoubleYarnCat, SleepyCat, IceCat } from './Cat.js';
import { Mice, BasicMouse, HelmetMouse } from './Mouse.js';
import { imageAssets, selectedCatType, resetCatType } from './sketch.js';
import { ChefCat, SingleYarnCat, DoubleYarnCat, SleepyCat, IceCat, throwables } from './Cat.js';
import { BasicMouse, HelmetMouse } from './Mouse.js';
import { level1Mice } from './level/level1.js';
import { RobotVacuum } from './RobotVacuum.js';
@ -18,6 +18,7 @@ export let cheeses = [];
export let grid = Array(5).fill().map(() => Array(9).fill(null));
let startTime;
let levelMice = [...level1Mice];
export let catGroup, mouseGroup, throwableGroup;
function createCat(type, x, y) {
switch (type) {
@ -38,12 +39,12 @@ function createCat(type, x, y) {
}
}
function createMouse(type, x, y) {
function createMouse(type, x, y, row) {
switch (type) {
case 'basicMouse':
return new BasicMouse(x, y);
return new BasicMouse(x, y, row);
case 'helmetMouse':
return new HelmetMouse(x, y);
return new HelmetMouse(x, y, row);
default:
return undefined;
}
@ -86,7 +87,7 @@ export function GameScene() {
let vacuum = new RobotVacuum(x, y, row);
gameSprites.push(vacuum);
gameSprites.push(vacuum.sprite);
robotVacuums.push(vacuum);
}
@ -106,6 +107,10 @@ export function GameScene() {
})
gameFrame.catRatio = 1.2 * gameFrame.tileWidth/200;
catGroup = new Group();
mouseGroup = new Group();
throwableGroup = new Group();
}
this.draw = function() {
@ -142,6 +147,13 @@ export function GameScene() {
vacuum.action();
}
})
throwables.forEach((throwable) => {
if (throwable.sprite.overlaps(currMouse.sprite)) {
currMouse.attacked(throwable.point);
throwable.remove();
}
})
}
}
}
@ -176,6 +188,7 @@ export function GameScene() {
newCat.sprite.scale = gameFrame.catRatio;
grid[row][col] = newCat;
activeCats.push(newCat);
catGroup.add(newCat.sprite);
gameSprites.push(newCat.sprite); // Is this redundant? kedouble2
if (newCat instanceof SleepyCat) sleepyCats.push(newCat);
resetCatType();
@ -239,10 +252,11 @@ function spawnMouse(type, row) {
let x = width;
let y = gameFrame.padding_up + row * gameFrame.tileHeight + gameFrame.tileHeight / 2;
let newMouse = new createMouse(type, x, y);
let newMouse = new createMouse(type, x, y, row);
if (newMouse) {
newMouse.sprite.scale = gameFrame.catRatio;
activeMice[row].push(newMouse);
mouseGroup.add(newMouse.sprite);
gameSprites.push(newMouse.sprite); // Is this redundant? kedouble2 sama allSprites
}
}

View File

@ -1,12 +1,14 @@
import { gameFrame } from './prototype.js';
import { imageAssets } from './sketch.js';
import { activeMice } from './GameScene.js';
export class Mice {
constructor(x, y, speed, HP, AP, img, width) {
export class Mouse {
constructor(x, y, row, speed, HP, AP, img, width) {
this.sprite = createSprite(x, y, width, width);
this.sprite.image = img;
this.sprite.layer = 3;
this.sprite.velocity.x = speed;
this.row = row;
this.HP = HP;
this.AP = AP;
this.width = width;
@ -14,17 +16,27 @@ export class Mice {
remove() {
this.sprite.remove();
const index = activeMice[this.row].indexOf(this);
if (index != -1) {
activeMice[this.row].splice(index, 1);
}
// console.log(`there are now ${activeMice[this.row].length} mice in row ${this.row}`)
}
attacked(point) {
this.HP -= point;
if (this.HP <= 0) this.remove();
}
}
export class BasicMouse extends Mice {
constructor(x, y) {
super(x, y, -0.25, 100, 20, imageAssets.mouse, gameFrame.tileWidth);
export class BasicMouse extends Mouse {
constructor(x, y, row) {
super(x, y, row, -0.25, 100, 20, imageAssets.mouse, gameFrame.tileWidth);
}
}
export class HelmetMouse extends Mice {
constructor(x, y) {
super(x, y, -0.25, 150, 20, imageAssets.mouse, gameFrame.tileWidth);
export class HelmetMouse extends Mouse {
constructor(x, y, row) {
super(x, y, row, -0.25, 150, 20, imageAssets.mouse, gameFrame.tileWidth);
}
}

31
Throwable.js Normal file
View File

@ -0,0 +1,31 @@
import { gameFrame } from "./prototype.js";
import { imageAssets } from "./sketch.js";
export class Throwable {
constructor(x, y, point, img, width) {
this.sprite = createSprite(x, y, width, width);
this.sprite.image = img;
// TODO: check on the scale again
this.sprite.scale = gameFrame.tileWidth / 1024;
this.sprite.vel.x = 1;
this.sprite.life = 600;
this.point = point;
this.width = width;
}
remove() {
this.sprite.remove();
}
}
export class Yarn extends Throwable {
constructor(x, y) {
super(x, y, 15, imageAssets.yarn, gameFrame.tileWidth / 4);
}
}
export class Snowball extends Throwable {
constructor(x, y) {
super(x, y, 20, imageAssets.snowball, gameFrame.tileWidth / 4);
}
}