0.9.1 • Published 4 years ago

guntree v0.9.1

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

GunTree

GunTree is readable and extendable Danmaku describing package for shmups.

pipeline coverage

How to describe Danmaku

import * as gt from 'guntree';

const fiveWayFire = gt.nWay(
    { ways: 5, totalAngle: 45 },
    gt.fire(gt.bullet())
);
const guntree = gt.repeat(
    { times: 2, interval: 30 },  // Repeat 2 times ...
    gt.useMuzzle('centerMuzzle'),  // From centerMuzzle ...
    gt.repeat(
        { times: 3, interval: 5 },  // Three round burst ...
        fiveWayFire,  // 5-Way fire!!
    ),
);

Install

Yarn

yarn install guntree

NPM

npm install guntree

Example

// your-weapon.ts
import * as gt from "guntree";

export class YourWeapon implements gt.Owner {
  private player = new gt.Player();
  private gunTree = gt.concat(
    gt.useMuzzle("centerMuzzle"),
    gt.repeat(
      { times: 10, interval: 30 },
      gt.fire(gt.bullet())
    ));

  constructor() {
    this.player.events.on("fired", (data: gt.FireData, bullet: gt.Bullet) => {
      const [location, angleDeg, scale] = gt.decomposeTransform(data.transform);
      const elapsedSec = data.elapsedSec; // Seconds between fired and finish current frame
      const speed = data.parameters.get("speed");
      const size = state.parameters.get("size");

      // Create bullet in your game.
      // ...
    });
  }

  getMuzzleTransform(muzzleName: string) {
    // Return global transform of muzzle
    return gt.composeTransform({ x: 0.25, y: 0.0, rotationDeg: 35 });
  }

  getEnemyTransform(muzzleName: string) {
    // Return global transform of enemy
    return gt.composeTransform({ x: -0.45, y: 0.25, rotationDeg: 0 });
  }

  startFiring(loop = false): boolean {
    return player.start(loop, this, this.gunTree);
  }

  isFiring(): boolean {
    return player.isRunning();
  }

  stopFiring(): void {
    player.requestStop();
  }

  forceStopFiring(): void {
    player.forceStop();
  }

  fixedFramerateUpdate(): boolean {
    return player.tick();
  }

  dynamicFramerateUpdate(deltaSeconds: number): boolean {
    return player.update(deltaSeconds);
  }
}
// your-game.ts
import { YourWeapon } from "your-weapon";

const weapon = new YourWeapon();
weapon.start();


let prevTimestampMS = 0;

function updateGame(timestampMS: number): void {
  const elapsedMS = timestampMS - prevTimestampMS;
  prevTimestampMS = timestampMS;
  weapon.dynamicFramerateUpdate(elapsedMS / 1000); // Update weapon
  window.requestAnimationFrame(updateGame);
}

window.requestAnimationFrame(updateGame);

GunTree control only firing progress. GunTree don't create bullets with any collision and shape.

API

Licence

MIT

0.9.1

4 years ago

0.9.0

4 years ago

0.8.0

4 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.6

4 years ago

0.6.5

4 years ago

0.6.4

4 years ago

0.6.2

5 years ago

0.6.0

5 years ago