add function box entity

This commit is contained in:
Elizabeth Hunt 2024-03-01 22:04:57 -07:00
parent c3242b171c
commit 55024f44c3
Signed by: simponic
GPG Key ID: 52B3774857EB24B1
8 changed files with 63 additions and 6 deletions

View File

@ -78,7 +78,7 @@ a:visited {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding-bottom: 1rem; padding: 1rem;
height: 100%; height: 100%;
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 1rem;

View File

@ -1,6 +1,6 @@
import { Game } from "."; import { Game } from ".";
import { Miscellaneous, loadAssets } from "./config"; import { Miscellaneous, loadAssets } from "./config";
import { Player } from "./entities"; import { Player, FunctionBox } from "./entities";
import { FacingDirection, Input, Render } from "./systems"; import { FacingDirection, Input, Render } from "./systems";
import { Grid } from "./systems/Grid"; import { Grid } from "./systems/Grid";
@ -38,6 +38,9 @@ export class TheAbstractionEngine {
const player = new Player(); const player = new Player();
this.game.addEntity(player); this.game.addEntity(player);
const box = new FunctionBox({ x: 5, y: 5 });
this.game.addEntity(box);
} }
public play() { public play() {

View File

@ -1,5 +1,4 @@
import type { SpriteSpec } from "./sprites"; import { type SpriteSpec, SPRITE_SPECS } from ".";
import { SPRITE_SPECS } from "./sprites";
export const IMAGES = new Map<string, HTMLImageElement>(); export const IMAGES = new Map<string, HTMLImageElement>();

View File

@ -2,6 +2,7 @@ import { Direction } from "../interfaces/Direction";
export enum Sprites { export enum Sprites {
PLAYER, PLAYER,
FUNCTION_BOX,
} }
export interface SpriteSpec { export interface SpriteSpec {
@ -35,5 +36,13 @@ playerSpriteSpec.states.set(Direction.NONE, {
}); });
}, },
); );
SPRITE_SPECS.set(Sprites.PLAYER, playerSpriteSpec); SPRITE_SPECS.set(Sprites.PLAYER, playerSpriteSpec);
const functionBoxSpriteSpec = {
msPerFrame: 200,
width: 64,
height: 64,
frames: 3,
sheet: "/assets/border.png",
};
SPRITE_SPECS.set(Sprites.FUNCTION_BOX, functionBoxSpriteSpec);

View File

@ -1,3 +1,4 @@
export namespace EntityNames { export namespace EntityNames {
export const Player = "Player"; export const Player = "Player";
export const FunctionBox = "FunctionBox";
} }

View File

@ -0,0 +1,43 @@
import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config";
import { Entity, EntityNames } from ".";
import { BoundingBox, Grid, Sprite } from "../components";
import { Coord2D } from "../interfaces";
export class FunctionBox extends Entity {
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
Sprites.FUNCTION_BOX,
) as SpriteSpec;
constructor(gridPosition: Coord2D) {
super(EntityNames.FunctionBox);
this.addComponent(
new BoundingBox(
{
x: 0,
y: 0,
},
{
width: FunctionBox.spriteSpec.width,
height: FunctionBox.spriteSpec.height,
},
0,
),
);
this.addComponent(new Grid(true, gridPosition));
this.addComponent(
new Sprite(
IMAGES.get(FunctionBox.spriteSpec.sheet)!,
{ x: 0, y: 0 },
{
width: FunctionBox.spriteSpec.width,
height: FunctionBox.spriteSpec.height,
},
FunctionBox.spriteSpec.msPerFrame,
FunctionBox.spriteSpec.frames,
),
);
}
}

View File

@ -1,3 +1,4 @@
export * from "./Entity"; export * from "./Entity";
export * from "./EntityNames"; export * from "./EntityNames";
export * from "./Player"; export * from "./Player";
export * from "./FunctionBox";

View File

@ -25,7 +25,7 @@ export class Grid extends System {
.map(() => new Array(columns).fill(null).map(() => new Set())); .map(() => new Array(columns).fill(null).map(() => new Set()));
} }
public update(dt: number, game: Game): void { public update(dt: number, game: Game) {
this.putUninitializedEntitiesInGrid(game); this.putUninitializedEntitiesInGrid(game);
this.rebuildGrid(game); this.rebuildGrid(game);
this.updateMovingEntities(dt, game); this.updateMovingEntities(dt, game);
@ -48,6 +48,7 @@ export class Grid extends System {
ComponentNames.BoundingBox, ComponentNames.BoundingBox,
)!; )!;
boundingBox.center = this.gridToScreenPosition(grid.gridPosition); boundingBox.center = this.gridToScreenPosition(grid.gridPosition);
boundingBox.dimension = this.dimension;
entity.addComponent(boundingBox); entity.addComponent(boundingBox);
grid.initialized = true; grid.initialized = true;