phaser/SpecialFX/Camera/Fade.ts

92 lines
2.6 KiB
TypeScript
Raw Normal View History

2013-05-29 01:58:56 +00:00
/// <reference path="../../build/phaser.d.ts" />
/**
* Phaser - FX - Camera - Fade
*
* The camera is filled with the given color and returns to normal at the given duration.
*/
module Phaser.FX.Camera {
export class Fade {
constructor(game: Game) {
this._game = game;
}
private _game: Game;
private _fxFadeColor: string;
private _fxFadeComplete = null;
private _fxFadeDuration: number = 0;
private _fxFadeAlpha: number = 0;
/**
* The camera is gradually filled with this color.
*
* @param Color The color you want to use in 0xRRGGBB format, i.e. 0xffffff for white.
* @param Duration How long it takes for the flash to fade.
* @param OnComplete An optional function you want to run when the flash finishes. Set to null for no callback.
* @param Force Force an already running flash effect to reset.
*/
public start(color: number = 0x000000, duration: number = 1, onComplete = null, force: bool = false) {
if (force === false && this._fxFadeAlpha > 0)
{
// You can't fade again unless you force it
return;
}
if (duration <= 0)
{
duration = 1;
}
var red = color >> 16 & 0xFF;
var green = color >> 8 & 0xFF;
var blue = color & 0xFF;
this._fxFadeColor = 'rgba(' + red + ',' + green + ',' + blue + ',';
this._fxFadeDuration = duration;
this._fxFadeAlpha = 0.01;
this._fxFadeComplete = onComplete;
}
public postUpdate() {
// Update the Fade effect
if (this._fxFadeAlpha > 0)
{
this._fxFadeAlpha += this._game.time.elapsed / this._fxFadeDuration;
if (this._game.math.roundTo(this._fxFadeAlpha, -2) >= 1)
{
this._fxFadeAlpha = 1;
if (this._fxFadeComplete !== null)
{
this._fxFadeComplete();
}
}
}
}
public postRender(camera: Phaser.Camera, cameraX: number, cameraY: number, cameraWidth: number, cameraHeight: number) {
// "Fade" FX
if (this._fxFadeAlpha > 0)
{
this._game.stage.context.fillStyle = this._fxFadeColor + this._fxFadeAlpha + ')';
this._game.stage.context.fillRect(cameraX, cameraY, cameraWidth, cameraHeight);
}
}
}
}