Skip to content

Commit db9b8ec

Browse files
committed
Merge pull request phaserjs#11 from HackManiac/amd
Automatic creation of UMD wrapped variant of Phaser
2 parents 53d8e4d + f66e0e9 commit db9b8ec

247 files changed

Lines changed: 32135 additions & 6935 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

GruntFile.js

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module.exports = function (grunt) {
22
grunt.loadNpmTasks('grunt-typescript');
33
grunt.loadNpmTasks('grunt-contrib-watch');
44
grunt.loadNpmTasks('grunt-contrib-copy');
5-
5+
66
grunt.initConfig({
77
pkg: grunt.file.readJSON('package.json'),
88
typescript: {
@@ -14,18 +14,45 @@ module.exports = function (grunt) {
1414
}
1515
}
1616
},
17-
copy: {
18-
main: {
19-
files: [
20-
{src: 'build/phaser.js', dest: 'Tests/phaser.js'}
21-
]}
22-
},
23-
watch: {
17+
copy: {
18+
main: {
19+
files: [{
20+
src: 'build/phaser.js',
21+
dest: 'Tests/phaser.js'
22+
}]
23+
},
24+
amd: {
25+
files: [{
26+
src: 'build/phaser.js',
27+
dest: 'build/phaser.amd.js'
28+
}],
29+
options: {
30+
processContent: function(content) {
31+
var replacement = [
32+
'(function (root, factory) {',
33+
' if (typeof exports === \'object\') {',
34+
' module.exports = factory();',
35+
' } else if (typeof define === \'function\' && define.amd) {',
36+
' define(factory);',
37+
' } else {',
38+
' root.Phaser = factory();',
39+
' }',
40+
'}(this, function () {',
41+
content,
42+
'return Phaser;',
43+
'}));'
44+
];
45+
return replacement.join('\n');
46+
}
47+
}
48+
}
49+
},
50+
watch: {
2451
files: '**/*.ts',
2552
tasks: ['typescript', 'copy']
2653
}
2754
});
28-
55+
2956
grunt.registerTask('default', ['watch']);
30-
57+
3158
}

Phaser/Collision.ts

Lines changed: 578 additions & 384 deletions
Large diffs are not rendered by default.

Phaser/Game.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
*
3636
* This is where the magic happens. The Game object is the heart of your game,
3737
* providing quick access to common functions and handling the boot process.
38+
*
39+
* "Hell, there are no rules here - we're trying to accomplish something."
40+
* Thomas A. Edison
3841
*/
3942

4043
module Phaser {
@@ -313,8 +316,7 @@ module Phaser {
313316
}
314317
else
315318
{
316-
throw Error("Invalid State object given. Must contain at least a create or update function.");
317-
return;
319+
throw new Error("Invalid State object given. Must contain at least a create or update function.");
318320
}
319321

320322
}
@@ -416,8 +418,8 @@ module Phaser {
416418
return this.tweens.create(obj);
417419
}
418420

419-
public collide(ObjectOrGroup1: Basic = null, ObjectOrGroup2: Basic = null, NotifyCallback = null): bool {
420-
return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Collision.separate);
421+
public collide(objectOrGroup1: Basic = null, objectOrGroup2: Basic = null, notifyCallback = null): bool {
422+
return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate);
421423
}
422424

423425
}

Phaser/Group.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ module Phaser {
450450
}
451451
}
452452

453-
public forEach(callback, Recurse: bool = false) {
453+
public forEach(callback, recursive: bool = false) {
454454

455455
var basic;
456456
var i: number = 0;
@@ -461,7 +461,7 @@ module Phaser {
461461

462462
if (basic != null)
463463
{
464-
if (Recurse && (basic.isGroup == true))
464+
if (recursive && (basic.isGroup == true))
465465
{
466466
basic.forEach(callback, true);
467467
}
@@ -474,6 +474,30 @@ module Phaser {
474474

475475
}
476476

477+
public forEachAlive(callback, recursive: bool = false) {
478+
479+
var basic;
480+
var i: number = 0;
481+
482+
while (i < this.length)
483+
{
484+
basic = this.members[i++];
485+
486+
if (basic != null && basic.alive)
487+
{
488+
if (recursive && (basic.isGroup == true))
489+
{
490+
basic.forEachAlive(callback, true);
491+
}
492+
else
493+
{
494+
callback.call(this, basic);
495+
}
496+
}
497+
}
498+
499+
}
500+
477501
/**
478502
* Call this function to retrieve the first object with exists == false in the group.
479503
* This is handy for recycling in general, e.g. respawning enemies.

Phaser/Phaser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Phaser
33
*
4-
* v0.9.3 - April 24th 2013
4+
* v0.9.4 - April 24th 2013
55
*
66
* A small and feature-packed 2D canvas game framework born from the firey pits of Flixel and Kiwi.
77
*
@@ -16,6 +16,6 @@
1616

1717
module Phaser {
1818

19-
export var VERSION: string = 'Phaser version 0.9.3';
19+
export var VERSION: string = 'Phaser version 0.9.4';
2020

2121
}

Phaser/Stage.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ module Phaser {
4343
this.scaleMode = StageScaleMode.NO_SCALE;
4444
this.scale = new StageScaleMode(this._game);
4545

46-
//document.addEventListener('visibilitychange', (event) => this.visibilityChange(event), false);
47-
//document.addEventListener('webkitvisibilitychange', (event) => this.visibilityChange(event), false);
46+
document.addEventListener('visibilitychange', (event) => this.visibilityChange(event), false);
47+
document.addEventListener('webkitvisibilitychange', (event) => this.visibilityChange(event), false);
4848
window.onblur = (event) => this.visibilityChange(event);
4949
window.onfocus = (event) => this.visibilityChange(event);
5050

@@ -96,6 +96,8 @@ module Phaser {
9696
//if (document['hidden'] === true || document['webkitHidden'] === true)
9797
private visibilityChange(event) {
9898

99+
//console.log(event);
100+
99101
if (this.disablePauseScreen)
100102
{
101103
return;

Phaser/gameobjects/GameObject.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ module Phaser {
8989
// rotationOffset to 90 and it would correspond correctly with Phasers rotation system
9090
public rotationOffset: number = 0;
9191

92+
public renderRotation: bool = true;
93+
9294
// Physics properties
9395
public immovable: bool;
9496

Phaser/gameobjects/Sprite.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ module Phaser {
229229
this._game.stage.context.save();
230230
this._game.stage.context.translate(this._dx + (this._dw / 2), this._dy + (this._dh / 2));
231231

232-
if (this.angle !== 0 || this.rotationOffset !== 0)
232+
if (this.renderRotation == true && (this.angle !== 0 || this.rotationOffset !== 0))
233233
{
234234
this._game.stage.context.rotate((this.rotationOffset + this.angle) * (Math.PI / 180));
235235
}

Phaser/gameobjects/Tilemap.ts

Lines changed: 102 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/// <reference path="../Game.ts" />
22
/// <reference path="GameObject.ts" />
33
/// <reference path="../system/TilemapLayer.ts" />
4+
/// <reference path="../system/Tile.ts" />
45

56
/**
67
* Phaser - Tilemap
@@ -19,7 +20,8 @@ module Phaser {
1920

2021
this.isGroup = false;
2122

22-
this._layers = [];
23+
this.tiles = [];
24+
this.layers = [];
2325

2426
this.mapFormat = format;
2527

@@ -41,11 +43,11 @@ module Phaser {
4143

4244
}
4345

44-
private _layers : TilemapLayer[];
45-
4646
public static FORMAT_CSV: number = 0;
4747
public static FORMAT_TILED_JSON: number = 1;
4848

49+
public tiles : Tile[];
50+
public layers : TilemapLayer[];
4951
public currentLayer: TilemapLayer;
5052
public mapFormat: number;
5153

@@ -57,17 +59,17 @@ module Phaser {
5759
if (this.cameraBlacklist.indexOf(camera.ID) == -1)
5860
{
5961
// Loop through the layers
60-
for (var i = 0; i < this._layers.length; i++)
62+
for (var i = 0; i < this.layers.length; i++)
6163
{
62-
this._layers[i].render(camera, cameraOffsetX, cameraOffsetY);
64+
this.layers[i].render(camera, cameraOffsetX, cameraOffsetY);
6365
}
6466
}
6567

6668
}
6769

6870
private parseCSV(data: string, key: string, tileWidth: number, tileHeight: number) {
6971

70-
var layer: TilemapLayer = new TilemapLayer(this._game, key, Tilemap.FORMAT_CSV, 'TileLayerCSV' + this._layers.length.toString(), tileWidth, tileHeight);
72+
var layer: TilemapLayer = new TilemapLayer(this._game, this, key, Tilemap.FORMAT_CSV, 'TileLayerCSV' + this.layers.length.toString(), tileWidth, tileHeight);
7173

7274
// Trim any rogue whitespace from the data
7375
data = data.trim();
@@ -85,10 +87,13 @@ module Phaser {
8587
}
8688

8789
layer.updateBounds();
90+
var tileQuantity = layer.parseTileOffsets();
8891

8992
this.currentLayer = layer;
9093

91-
this._layers.push(layer);
94+
this.layers.push(layer);
95+
96+
this.generateTiles(tileQuantity);
9297

9398
}
9499

@@ -101,10 +106,12 @@ module Phaser {
101106

102107
for (var i = 0; i < json.layers.length; i++)
103108
{
104-
var layer: TilemapLayer = new TilemapLayer(this._game, key, Tilemap.FORMAT_TILED_JSON, json.layers[i].name, json.tilewidth, json.tileheight);
109+
var layer: TilemapLayer = new TilemapLayer(this._game, this, key, Tilemap.FORMAT_TILED_JSON, json.layers[i].name, json.tilewidth, json.tileheight);
105110

106111
layer.alpha = json.layers[i].opacity;
107112
layer.visible = json.layers[i].visible;
113+
layer.tileMargin = json.tilesets[0].margin;
114+
layer.tileSpacing = json.tilesets[0].spacing;
108115

109116
var c = 0;
110117
var row;
@@ -129,10 +136,23 @@ module Phaser {
129136

130137
layer.updateBounds();
131138

139+
var tileQuantity = layer.parseTileOffsets();
140+
132141
this.currentLayer = layer;
133142

134-
this._layers.push(layer);
143+
this.layers.push(layer);
144+
145+
}
146+
147+
this.generateTiles(tileQuantity);
148+
149+
}
150+
151+
private generateTiles(qty:number) {
135152

153+
for (var i = 0; i < qty; i++)
154+
{
155+
this.tiles.push(new Tile(this._game, this, i, this.currentLayer.tileWidth, this.currentLayer.tileHeight));
136156
}
137157

138158
}
@@ -145,9 +165,81 @@ module Phaser {
145165
return this.currentLayer.heightInPixels;
146166
}
147167

168+
// Tile Collision
169+
170+
public setCollisionRange(start: number, end: number, collision?:number = Collision.ANY) {
171+
172+
for (var i = start; i < end; i++)
173+
{
174+
this.tiles[i].allowCollisions = collision;
175+
}
176+
177+
}
178+
179+
public setCollisionByIndex(values:number[], collision?:number = Collision.ANY) {
180+
181+
for (var i = 0; i < values.length; i++)
182+
{
183+
this.tiles[values[i]].allowCollisions = collision;
184+
}
185+
186+
}
187+
188+
// Tile Management
189+
190+
public getTile(x: number, y: number, layer?: number = 0):Tile {
191+
192+
return this.tiles[this.layers[layer].getTileIndex(x, y)];
193+
194+
}
195+
196+
public getTileFromWorldXY(x: number, y: number, layer?: number = 0):Tile {
197+
198+
return this.tiles[this.layers[layer].getTileFromWorldXY(x, y)];
199+
200+
}
201+
202+
public getTileFromInputXY(layer?: number = 0):Tile {
203+
204+
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.worldX, this._game.input.worldY)];
205+
206+
}
207+
208+
public getTileOverlaps(object: GameObject) {
209+
210+
return this.currentLayer.getTileOverlaps(object);
211+
212+
}
213+
214+
// COLLIDE
215+
public collide(objectOrGroup = null, callback = null): bool {
216+
217+
if (objectOrGroup == null)
218+
{
219+
objectOrGroup = this._game.world.group;
220+
}
221+
222+
// Group?
223+
if (objectOrGroup.isGroup == false)
224+
{
225+
if (objectOrGroup.exists && objectOrGroup.allowCollisions != Collision.NONE)
226+
{
227+
this.currentLayer.getTileOverlaps(objectOrGroup);
228+
}
229+
}
230+
else
231+
{
232+
// todo
233+
objectOrGroup.forEachAlive(this.currentLayer.getTileOverlaps);
234+
}
235+
236+
return true;
237+
238+
}
239+
240+
148241
// Set current layer
149242
// Set layer order?
150-
// Get tile from x/y
151243
// Get block of tiles
152244
// Swap tiles around
153245
// Delete tiles of certain type

0 commit comments

Comments
 (0)