diff --git a/README.md b/README.md index 7bdec84..6a93a1f 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ import { Game } from `youngblood`; # Getting Started - [Read the Wiki](https://github.com/zsombro/youngblood/wiki) on how to get started with Youngblood -- Look at the quick and dirty examples in [the 'examples' folder of this repositorry](https://github.com/zsombro/youngblood/tree/master/examples) +- Look at some quick and dirty examples in [the 'examples' folder of this repositorry](https://github.com/zsombro/youngblood/tree/master/examples) - [Check out this repository](https://github.com/zsombro/youngblood-example-project) to see a working example with bundling # Contributing diff --git a/package.json b/package.json index 0cd8c38..64d1dfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "youngblood", - "version": "0.2.5", + "version": "0.3.5", "description": "A simple game development framework for web browsers.", "repository": "github:zsombro/youngblood", "main": "bundle/youngblood.js", diff --git a/src/component.ts b/src/components/component.ts similarity index 100% rename from src/component.ts rename to src/components/component.ts diff --git a/src/tiledMap.ts b/src/components/tiledMap.ts similarity index 100% rename from src/tiledMap.ts rename to src/components/tiledMap.ts diff --git a/src/entity.test.ts b/src/entity.test.ts index b7b03be..f75fd6c 100644 --- a/src/entity.test.ts +++ b/src/entity.test.ts @@ -2,7 +2,7 @@ import 'mocha'; import { expect } from 'chai'; import Entity from './entity'; -import Component from './component'; +import Component from './components/component'; class C1 extends Component {} class C2 extends Component {} diff --git a/src/entity.ts b/src/entity.ts index 4b04afe..06d2bfc 100644 --- a/src/entity.ts +++ b/src/entity.ts @@ -1,6 +1,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import Component, { Position, Velocity, Sprite, AnimatedSprite, InputMapping, Label, Box } from './component'; -import TiledMap from './tiledMap'; +import Component, { + Position, + Velocity, + Sprite, + AnimatedSprite, + InputMapping, + Label, + Box, +} from './components/component'; +import TiledMap from './components/tiledMap'; export default class Entity { [x: string]: Component; diff --git a/src/main.ts b/src/main.ts index 6d0c276..38e743e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,11 +12,11 @@ import { InputMapping, Label, AnimationSheet, -} from './component'; +} from './components/component'; -import TiledMap, { TiledMapData, TiledSheetData } from './tiledMap'; +import TiledMap, { TiledMapData, TiledSheetData } from './components/tiledMap'; -import Component from './component'; +import Component from './components/component'; import { InputMappingSystem, System } from './system'; diff --git a/src/renderer.test.ts b/src/renderer.test.ts new file mode 100644 index 0000000..00a4cce --- /dev/null +++ b/src/renderer.test.ts @@ -0,0 +1,27 @@ +import 'mocha'; +import { expect } from 'chai'; + +import { getTilesheetCoordinateById } from './renderer'; +import { TiledSheetData } from './components/tiledMap'; + +describe('Renderer', (): void => { + it('should translate tile IDs to coordinates', (): void => { + const data: TiledSheetData = { + image: null, + imageheight: 128, + imagewidth: 128, + tileheight: 16, + tilewidth: 16, + tilecount: 64, + columns: 8, + }; + + const position1 = getTilesheetCoordinateById(1, data); + const position2 = getTilesheetCoordinateById(2, data); + const position3 = getTilesheetCoordinateById(14, data); + + expect(position1).to.deep.equal({ x: 0, y: 0 }); + expect(position2).to.deep.equal({ x: 16, y: 0 }); + expect(position3).to.deep.equal({ x: 80, y: 16 }); + }); +}); diff --git a/src/renderer.ts b/src/renderer.ts index eaf230c..060dbb7 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,6 +1,6 @@ -import { AnimatedSprite, Animation, Box, Position, Label, Sprite } from './component'; +import { AnimatedSprite, Animation, Box, Position, Label, Sprite } from './components/component'; import { Scene } from './scene'; -import TiledMap, { Layer, TiledSheetData } from './tiledMap'; +import TiledMap, { Layer, TiledSheetData } from './components/tiledMap'; export type Renderer = (entity: Scene) => void; @@ -47,10 +47,10 @@ function renderAnimatedSprite(p: Position, sprite: AnimatedSprite, ctx: CanvasRe } function renderImageLayer(position: Position, layer: Layer, ctx: CanvasRenderingContext2D): void { - ctx.drawImage(layer.image, position.x + layer.x, position.y + layer.y, ctx.canvas.width, ctx.canvas.height); + ctx.drawImage(layer.image, layer.x, layer.y, ctx.canvas.width, ctx.canvas.height); } -function getTileById(id: number, sheet: TiledSheetData): { x: number; y: number } { +export function getTilesheetCoordinateById(id: number, sheet: TiledSheetData): { x: number; y: number } { return { x: (id % sheet.columns) * sheet.tilewidth - sheet.tilewidth, y: Math.floor(id / sheet.columns) * sheet.tileheight, @@ -67,7 +67,7 @@ function renderTileLayer( for (let i = 0; i < layer.data.length; i++) { if (layer.data[i] === 0) continue; - const { x, y } = getTileById(layer.data[i], sheet); + const { x, y } = getTilesheetCoordinateById(layer.data[i], sheet); ctx.drawImage( sheet.image, x, diff --git a/src/services/assetloader.ts b/src/services/assetloader.ts index 24a634f..0c71b8c 100644 --- a/src/services/assetloader.ts +++ b/src/services/assetloader.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { TiledMapData, TiledSheetData } from '../tiledMap'; +import { TiledMapData, TiledSheetData } from '../components/tiledMap'; interface AssetData { type: 'image' | 'audio' | 'json' | 'tiled-map' | 'tiled-set'; diff --git a/src/system.ts b/src/system.ts index 4dd7c9d..c945b7b 100644 --- a/src/system.ts +++ b/src/system.ts @@ -1,7 +1,7 @@ import Entity from './entity'; import { Scene, SceneServices } from './scene'; -import { InputMapping } from './component'; -import TiledMap from './tiledMap'; +import { InputMapping } from './components/component'; +import TiledMap from './components/tiledMap'; export interface System { systemId: string;