Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
David-Else committed Feb 15, 2020
1 parent 5318d97 commit 2e90148
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
28 changes: 28 additions & 0 deletions README.md
Expand Up @@ -8,4 +8,32 @@
- Launch a dev server on `index.html` in the `dist` directory
- **Kill zombies!**

# Code Documentation

The game is built in TypeScript using OOP with an emphasis on composition. The [state pattern](https://gameprogrammingpatterns.com/state.html) is used for the different screens/levels. There are no dependencies, the engine has been written from scratch in an attempt to be as simple and maintainable as possible.

NPM Scripts are used to control the build process. Just run `build-watch` and Rollup will continuously monitor for changes to the source code and compile the entire game into `dist/mod.js`. You can run a dev server on `dist/index.html` to play the game and work on development.

## Overview

### src/mod.ts

The 'main' entry function is `mod.ts` which is loaded and run by `index.html`. It does the following:

- Imports the `GlobalState` class ready to be instantiated as `globalState`. This is where all mutable state lives, including all the on screen entities, key press states, all the sound/graphics assets, and the levels themselves contained inside `levelState: StatePattern`
- Imports the initial state `Init` for the state pattern. Each state can call the next state, and this one loads the assets and continues to the start screen
- Set the rendering context to the `"game-canvas"` element
- Decides the dimensions of the game screen based on the current browser `canvas.width`/`canvas.height`
- Adds the keyboard event listeners
- Starts the `gameLoop()`

### src/states

All the files in this directory are part of the state pattern and use `extends Base implements StatePattern`.They have a single abstract base class they inherit from called `base-class.ts` which contains:

`update()` which is responsible for updating all the entities and drawing them.
`keyHandler()` which deals with in-game key presses

## Screen Shot of Level 1

![screen shot](/assets/zombie-attack-screenshot.png)
14 changes: 7 additions & 7 deletions package.json
Expand Up @@ -6,13 +6,13 @@
"main": "src/mod.ts",
"scripts": {
"deno-run": "deno run --allow-all --importmap=./import_map.json src/mod.ts",
"deno-test": "npm run clear-console && deno test --allow-all --importmap=./import_map.json test/*",
"build": "npm run copy-build-files && rollup -c",
"build-watch": "npm run copy-build-files && rollup -cw",
"lint": "npm run clear-console && eslint --cache --ext .ts src/",
"clear-console": "deno eval \"console.clear()\"",
"copy-build-files": "cp -r src/{main.css,index.html,game-data.json} assets/ dist",
"clean-build-dir": "rm -r dist/*"
"deno-test": "npm run _clear-console && deno test --allow-all --importmap=./import_map.json test/*",
"build": "npm run _copy-build-files && rollup -c",
"build-watch": "npm run _copy-build-files && rollup -cw",
"build-clean-dist": "rm -r dist/*",
"lint": "npm run _clear-console && eslint --cache --ext .ts src/",
"_copy-build-files": "cp -r src/{main.css,index.html,game-data.json} assets/ dist",
"_clear-console": "deno eval \"console.clear()\""
},
"author": "https://www.elsewebdevelopment.com/",
"license": "gpl-3.0",
Expand Down
1 change: 1 addition & 0 deletions src/entities/bitmap-character.ts
Expand Up @@ -10,6 +10,7 @@ import { Character } from "./character.js";
export abstract class BitmapCharacter extends Character implements Drawable {
protected abstract image: HTMLImageElement;
protected abstract widthHeight: Vector2;

public draw(ctx: CanvasRenderingContext2D): void {
ctx.drawImage(this.image, this.x, this.y);
}
Expand Down

0 comments on commit 2e90148

Please sign in to comment.