diff --git a/src/gridart.ts b/src/gridart.ts index a861884..500e25b 100644 --- a/src/gridart.ts +++ b/src/gridart.ts @@ -1,8 +1,9 @@ -import {Color, Point, Size} from "./engine/datatypes.ts"; +import {Color, Point, Rect, Size} from "./engine/datatypes.ts"; import {D} from "./engine/public.ts"; -export const FLOOR_CELL_SIZE: Size = new Size(48, 48) +export const FLOOR_CELL_SIZE: Size = new Size(40, 40) export const CEILING_CELL_SIZE: Size = new Size(52, 52) +export const HEIGHT_IN_FEET = 12; export const CENTER = new Point(192, 192); export const MOULDING_SZ = new Size(1, 1); @@ -27,6 +28,10 @@ export class GridArt { this.#ceilingBr = at.offset(new Point(0.5, 0.5)).scale(CEILING_CELL_SIZE).offset(CENTER); } + get floorRect(): Rect { + return new Rect(this.#floorTl, this.#floorBr.subtract(this.#floorTl)) + } + drawFloor(color: Color) { D.fillRect(this.#floorTl, this.#floorBr.subtract(this.#floorTl), color); } @@ -122,6 +127,14 @@ export class GridArt { drawCeiling(color: Color) { D.fillRect(this.#ceilingTl, this.#ceilingBr.subtract(this.#ceilingTl), color); } + + project(z: number): Point { + let z2 = z / HEIGHT_IN_FEET; + return new Point( + lerp(z2, this.#floorCenter.x, this.#ceilingCenter.x), + lerp(z2, this.#floorCenter.y, this.#ceilingCenter.y), + ); + } } let lerp = (amt: number, x: number, y: number) => { diff --git a/src/huntmode.ts b/src/huntmode.ts index 02ec6e3..b2f140e 100644 --- a/src/huntmode.ts +++ b/src/huntmode.ts @@ -151,18 +151,11 @@ export class HuntMode { const OFFSET_AIR = 0; const OFFSET_TOP = 256; const OFFSET_TOP_OF_TOP = 512; - const cellSizeFloor = new Size(48, 48); - const cellSizeCeiling = new Size(52, 52); - - const floorZone = offsetInCells.scale(cellSizeFloor).offset(new Point(192, 192)); const gridArt = new GridArt(offsetInCells); let cellData = this.map.get(mapPosition) - let cellTopLeft = floorZone.offset(new Size(-cellSizeFloor.w / 2, -cellSizeCeiling.h / 2)); - let cellSize = FLOOR_CELL_SIZE; - this.drawpile.add( OFFSET_UNDER_FLOOR, () => { @@ -198,7 +191,7 @@ export class HuntMode { } */ }, - new Rect(cellTopLeft, cellSize), + gridArt.floorRect, cost != null && cost <= getPlayerProgress().getBlood(), () => { if (cost != null) { @@ -247,12 +240,10 @@ export class HuntMode { if (pickup != null) { let statIndex = ALL_STATS.indexOf(pickup as Stat); if (statIndex != -1) { - let extraXOffset = 0; // Math.cos(this.frame / 80 + mapPosition.x + mapPosition.y) * 1; - let extraYOffset = Math.sin(this.frame / 50 + mapPosition.x * 2 + mapPosition.y * 0.75) * 6; this.drawpile.add(OFFSET_AIR, () => { D.drawSprite( sprStatPickup, - floorZone.offset(new Point(extraXOffset, extraYOffset)), + gridArt.project(5), statIndex, { xScale: 2, @@ -266,7 +257,7 @@ export class HuntMode { this.drawpile.add(OFFSET_AIR, () => { D.drawSprite( sprResourcePickup, - floorZone.offset(new Point(0, -16)), + gridArt.project(0.0).offset(new Point(0, -16)), 0, { xScale: 2,