Commit graph

218 commits

Author SHA1 Message Date
Paul
76aa601d47 TilemapLayer rendering double-copy
- Memory optimization of delta-scroll shifting.
  - The copy canvas is shared between all TilemapLayers
  - The copy is done in segments to reduce the memory usage of the copy
  canvas. Currently this is a 1/4 ratio.

- Device has the feature (by browser) check to see if bitblt works
  - TilemapLayer will automatically enable the double-copy as needed
  - Device.whenReady can be used to override the device value
2014-12-31 09:54:37 -08:00
Paul
0ad21e3c84 Merge remote-tracking branch 'upstream/dev' into wip-tilelayer-safaribug 2014-12-30 23:07:55 -08:00
nextht
18b3a3cc5b Remove useless initilization for tw and th code
tw and th have been initialized twice, the first time is useless.
2014-12-20 17:45:27 +08:00
Paul
466b021ca0 TilemapLayer: Re-added secondary copy-canvas
- This change uses a secondary canvas and rectangle clearing instead of a
  'copy' composition on the same canvas. This should hopefully address
  the flickering issue in Safari and Safari Mobile
2014-12-12 00:26:49 -08:00
paul-reilly
ce603c3510 TilemapParser: fixed check for image collection 2014-12-10 22:42:17 +00:00
Paul
92a20a5f5f TileLayer - globalCompositionOperation set once
This might fix a safari issue; it also avoids repeatedly setting the
[same] composition operation and saving/loading context states.
2014-12-09 20:21:31 -08:00
Paul
47c49b18cf Tilemap - Tiled image size calculation
Addresses https://github.com/photonstorm/phaser/issues/1371 - where Tiled
used floor calculations and Phaser used round calculations.

There are no breaking changes with the demos; however, if there was code
that relied on behavior that _deviated_ from the defactor Tilemap behavior
then may be prone to "incorrect results" if using tileset images that are
not correctly aligned to tilesize multiples.

This also adds/corrects some warnings:
- A warning when the tileset size is not an even multiple (it was
  suppressed due to using `round` prior to the checks.
- A warning if loading an image changes the cols/rows of a Tileset
- A specific warning for Tileset Image Collections which are not yet
  supported
2014-11-26 19:50:07 -08:00
photonstorm
a2aa987920 jshint fixes 2014-11-11 01:09:57 +00:00
photonstorm
a2b7d339a2 Tilemap.createFromTiles will convert all tiles matching the given tile index (or an array of indexes) into Sprites. You can optionally then replace these tiles if you wish. This is perfect for games when you want to turn specific tiles into Sprites for extra control. The Sprites have an optional properties object which they can be populated with. 2014-11-11 01:05:59 +00:00
photonstorm
347978679d docs update 2014-11-11 01:05:59 +00:00
photonstorm
6d8fb60f77 Removed TilemapLayer.index getter as it incorrectly refereneced a property that didn't exist, breaking most demos. Couldn't see an obvious reason for the getter so restored previous property and tested all examples, and all run now (and faster too thanks to the rest of the changes made in TilemapLayer). 2014-11-08 14:50:00 +00:00
Paul
03af5e1582 TilemapLayer/Tileset - Documentation consistency updates for Phaser 2014-10-30 02:00:20 -07:00
Paul
75f13cfe44 TilemapLayer / Tileset documentation to Phaser conventions
- Reverted @member to @property for uniformity
- Expanded some comments
2014-10-28 22:21:47 -07:00
Paul
ce2acdd54c TilemapLayer / Tileset
- Minor regression fix, increasing argument specifity/documentation
2014-10-25 22:17:31 -07:00
Paul
6108091035 Merge branch 'dev' of https://github.com/photonstorm/phaser into wip-tilelayer 2014-10-25 22:10:20 -07:00
Paul
22be4b0bf6 TilemapLayer / Tileset performance and documentation
TilemapLayer
 - Added "delta scroll rendering"
   - Enabled (by default) via `renderSettings.enableScrollDelta`
   - Dramatic CPU reduction: 30% to 2% scrolling 50x37 region
   - Side-effect: fixed some Chrome de-opt issues with `render`
   - Various rendering updates and removal of many `_mc` field
 - Made `index` a read-only propert that reflects the layer.index
 - Creates a local cache from tile index -> tileset, added `resetTilesetCache`
   - Also prevents crash when an index not associated with a tileset is
     used; see `missingImageOverfill`.
 - Various debug options moved to `debugSettings` and simplified; documentation updated.
   - Uses `debugSettings.missingImageOverfill` and `tileColor` (deprecated) to display invalid tileset images
 - Only change the context alpha when the tile alpha changes; in Chrome 38
   this removed a .5% penalty
 - Added `renderSettings` which controls misc. rendering/optimizations.
 - Updated documentation to @member, clarified

Tileset
 - Added `containsTileIndex` method to allow being queried if the specific tile index is handled/supported.
 - Uses a firstgid bias and interlacing to fit the data in single densely packed array.
 - Updated documentation to @member, clarified
2014-10-25 21:48:59 -07:00
Richard Davey
35c42e3073 Tilemaps in WebGL wouldn't update after the first frame due to a subtle change in how Pixi uploads new textures to the GPU. 2014-10-25 10:09:04 +01:00
photonstorm
96fd0ade74 JSDoc fixes. 2014-10-21 22:43:42 +01:00
photonstorm
5e734a6bb6 Pixi v2 UV update fixes. 2014-10-17 16:52:47 +01:00
photonstorm
e5eea56c9b jsdoc updates. 2014-09-16 19:44:04 +01:00
photonstorm
410cfd2d71 Code reformatting. 2014-08-29 18:06:01 +01:00
photonstorm
92386221e4 Tile.setCollision now adjusts the tiles interesting faces list as well, this allows you to create one-way jump tiles without using custom callbacks on a specific tile basis (thanks @RafaelOliveira #886) 2014-08-29 18:03:32 +01:00
photonstorm
5546e5903c Tiled polylines are now imported into the map objects property as well as map collision (#1117) 2014-08-29 16:56:30 +01:00
photonstorm
10e7d8ff7e TilemapParser.getEmptyData now correct adds an empty bodies array into layers. This fixes an issue where p2 couldn't convert a csv map into collision tiles (thanks @sru #845) 2014-08-29 16:30:29 +01:00
photonstorm
2d4d1a050d Tilemap.hasTile now checks the Tile.index value and will return false if the index is -1 (i.e. a non-active tile) (thanks @elgansayer #859) 2014-08-28 04:30:13 +01:00
Richard Davey
afb094a6eb Merge pull request #1126 from beeglebug/feature/tile-properties
copy tile properties to tiles when parsing map
2014-08-28 01:35:20 +01:00
beeglebug
23f077a4e8 copy tile properties to tiles when parsing map 2014-08-21 21:08:05 +01:00
Alessandro Cuzzocrea
5e76eb4834 Added support for Tiled object's type field 2014-08-16 21:44:21 +02:00
photonstorm
9c1f39d284 jshint fix 2014-07-18 01:07:45 +01:00
photonstorm
49bb45c42e Tilemap.swap now accurately swaps from A to B and from B to A (thanks @noidexe #1034) 2014-07-18 00:29:24 +01:00
photonstorm
2293b64c94 Removing debug / console.log output. 2014-07-09 05:49:13 +01:00
sivael
cdaab269a0 Update Tilemap.js 2014-06-27 14:36:06 +02:00
sivael
7fb5c8cf5d Update Tilemap.js 2014-06-27 14:25:56 +02:00
sivael
c7cae6ece7 Update Tilemap.js 2014-06-27 14:21:45 +02:00
sivael
05ce6f60a1 TileMap update performance
Discussion: http://www.html5gamedevs.com/topic/7409-tilemaps-changing/

It should remove the problem of updating stuff in a 100x100 tilemap making the engine recalculate every single update.(390 tiles changed in that map makes it a 100x100x390 loop.
Whould make the recalculate parameter in the setCollision functions unnecessary as well.
2014-06-27 14:10:11 +02:00
photonstorm
e923e230e0 TilemapLayers can now be used with an unbounded camera (a camera that can move beyond the world boundaries). Currently, when an unbounded camera moves outside of the world, tilemaps start acting weird because they only render themselves strictly within the world limits. With this change, the tilemap will continue scrolling and show empty space beyond its edge (thanks @jotson #851)
TilemapLayer.wrap property - if true the map is rendered as if it is on the surface of a toroid (donut) instead of a plane. This allows for games that seamlessly scroll from one edge to the opposite edge of the world without noticing the transition. Note that the World size must match the Map size (thanks @jotson #851)
2014-06-11 00:15:02 +01:00
Richard Davey
fddd1e9f7a Merge pull request #851 from jotson/dev
Render tilemap when camera outside of world bounds, layer wrapping
2014-06-11 00:05:23 +01:00
JeanDavidDaviet
a4b279b9cc updated doc for Phaser.Tilemap#createBlankLayer 2014-06-04 19:01:10 +10:00
John Watson
14e1f0fcc6 Render tilemap when camera outside of world bounds, layer wrapping
Prior to this change, TilemapLayers always restricted themselves to
rendering strictly within the world bounds. If the camera was allowed
to go beyond the world bounds, then the tilemap would appear to stop
scrolling once the camera hit the world edge. This allows the tilemap
to continue scrolling, showing empty space beyond the edge of the map.

Additionally, when the new "wrap" parameter is true, the tilemap will
render its opposite edge in the empty space. This simulates the map as
if it was the surface of a toroid (donut) rather than a flat plane.
2014-05-27 14:51:44 -07:00
Simon Boyé
7e43248412 Fixed Tilemap.removeTile issue to put tile of index -1 instead of null. 2014-05-19 22:58:52 +02:00
photonstorm
cfadaf3e70 Tilemap.layer is a getter/setter to the current layer object (which can be changed with Tilemap.setLayer) 2014-05-15 22:30:32 +01:00
photonstorm
1d13855abb Tilemap.searchTileIndex allows you to search for the first tile matching the given index, with optional skip and reverse parameters. 2014-05-15 19:56:56 +01:00
Richard Davey
5770b654a6 Merge pull request #791 from tigermonkey/dev
[tilemap] parse polygon, ellipses and rectangles
2014-05-14 00:06:53 +01:00
Maximilian Mader
d7ba7b3a62 Improve TileMap's setCollsion functions
Now one can decide in 'setCollision', 'setCollisionBetween', 'setCollisionByExclusion' and 'setCollisionByIndex' to recalculate the collision faces or not.

I was able to decrease the time it takes to set the collisions from 1880ms to 440ms in my case,see http://www.html5gamedevs.com/topic/6328-camera-rendered-area-move-tilemaplayer/?p=38037
2014-05-12 17:42:54 +02:00
photonstorm
041bbd430c Tilemap.getTile has a new nonNull parameter. If true it won't return null for empty tiles, but will return the actual Tile in that location. 2014-05-07 01:30:48 +01:00
photonstorm
91f8f96a76 TilemapWalker allows you to set a location marker into a tilemap. You can then move around with commands such as moveForward, turnLeft, etc.
New consts: Phaser.Tilemap.NORTH, SOUTH, EAST and WEST to use with the TileMapWalker Plugin.
2014-05-07 00:10:48 +01:00
Pablo Barbáchano
7f733a0b82 [tilemap] parse polygon, ellipses and rectangles 2014-05-01 13:13:53 +02:00
photonstorm
422e769a3e Tilemap.createFromObjects will now force the creation of the property again even if it doesn't exist (regression fix from 2.0.4) 2014-05-01 11:42:15 +01:00
photonstorm
55dc748953 Tilemap.getTile and getTileXY used to return null in 2.0.3 but returned a Tile object in 2.0.4 (with an index of -1), they now return null again. 2014-04-29 21:28:14 +01:00
photonstorm
74108148ac CSV Tilemap tiles would incorrectly set the Tile layer reference, causing collision to fail (thanks @Chapelin, fix #692) 2014-04-28 23:21:57 +01:00
photonstorm
e9436293a8 Tilemap.addTilesetImage will now raise a console.warn if you specify an invalid tileset key and not create the tileset rather than pick the default set. 2014-04-28 13:47:27 +01:00
photonstorm
65022ccc55 Blank Tilemaps no longer create null tiles, but instead create Tile objects with an index of -1 which can be replaced and updated like any other tile.
Tilemap.fill would throw an error if called on a blank tilemap full of null values (thanks @DrHackenstein, fix #761)
2014-04-28 02:42:38 +01:00
photonstorm
b1153299c0 Tilemap.fill would throw an error if called on a blank tilemap full of null values (thanks @DrHackenstein, fix #761) 2014-04-28 02:23:07 +01:00
photonstorm
1ef617ca82 Updated Tilemap.destroy documentation to clarify layer removal (issue #740) 2014-04-28 01:39:45 +01:00
photonstorm
e9cb345261 P2.World.convertTilemap now correctly checks the collides parameter of the tiles as it converts them. 2014-04-14 13:52:53 +01:00
Raeven0
7fa9e4639e correct Tilemap.hasTile(...) parameter typing
Member methods of Tilemap which take a layer parameter use getLayer on
that parameter to allow passing int, string, and TilemapLayer objects.
Tilemap.hasTile(...) should do so as well.
2014-04-01 20:26:16 -05:00
photonstorm
38d722c1e5 Tilemap.removeTile(x, y, layer) lets you remove the tile at the given coordinates and updates the collision data.
Tilemap.removeTileWorldXY lets you remove the tile at the given pixel value coordinates and updates the collision data.
If you pass `null` to Tilemap.putTile as the tile parameter it will pass the call over to Tilemap.removeTile.
2014-04-01 13:36:42 +01:00
Christian Wesselhoeft
89a1639952 Fix jshint issues in src/tilemap 2014-03-25 14:56:04 -07:00
Christian Wesselhoeft
61f18b675c Trim trailing whitespace. 2014-03-25 14:56:04 -07:00
photonstorm
26a89f0b84 New build files with tilemap callback fixes in. 2014-03-24 01:39:09 +00:00
photonstorm
49bcd2edd2 Tilemap fixes. 2014-03-24 00:30:05 +00:00
photonstorm
e1c98ba617 You can now create multiple blank layers in a Tilemap. 2014-03-23 23:58:01 +00:00
Richard Davey
eddf1edead Tilemap updates 2014-03-23 10:35:31 +00:00
photonstorm
539d70d581 Testing multi layer blank map updates. 2014-03-22 08:33:38 +00:00
photonstorm
0fa54b0b24 TileSprites now emit outOfBounds and enterBounds events accordingly.
TileSprites working with physics bodies again.
2014-03-21 18:04:24 +00:00
photonstorm
46d5069110 Tilemap.createFromObjects has a new parameter: adjustY, which is true by default. Because Tiled uses a bottom-left coordinate system Phaser used to set the Sprite anchor to 0,1 to compensate. If adjustY is true it now reduces the y value by the object height instead. 2014-03-17 23:54:04 +00:00
photonstorm
90ef694347 Tilemap.createFromObjects used to set the Sprite anchor to 0,1 because Tiled uses a bottom-left coordinate system. It now calculates the offset in TilemapParser. 2014-03-17 23:27:13 +00:00
photonstorm
30a04985f7 Working through blank tilemap fix. 2014-03-17 16:10:19 +00:00
photonstorm
b9ac0d565e Fixed Tile callback check in Arcade Physics (fix #562) 2014-03-16 00:53:50 +00:00
photonstorm
0e29bd4300 Tile Collision Callbacks working properly. CSV / Blank map examples added. Multiple tilesets per map working again. That's it folks! 2014-03-14 04:21:56 +00:00
photonstorm
f3ff9c197f Fixed all the tilemap examples. 2014-03-14 03:26:06 +00:00
photonstorm
017a017b96 TilemapLayer.getRayCastTiles will let you get all tiles that hit the given line for further processing.
Fixed Tilemap collision. Added new TILE_BIAS const to aid with fast/small sprites.
2014-03-14 02:33:58 +00:00
photonstorm
f678d1fd31 Line now has x, y, width, height, top, bottom, left and right properties, so you can effectively get its bounds. 2014-03-14 00:19:45 +00:00
photonstorm
5297497632 Tilemap collision finally getting closer. 2014-03-13 22:49:08 +00:00
photonstorm
e955145707 Added p2 kill and reset test + nearing completion on tilemap collision. 2014-03-13 21:14:18 +00:00
photonstorm
c8e63582a4 Lots of small tweaks to pass jshint. 2014-03-13 16:49:52 +00:00
Dan Cox
3b7039ad32 Documentation change: swap for swapTile
In both Phaser 1.1.6 and 1.2, it says "swapTile" when it means "swap".
2014-03-11 23:56:12 -04:00
Dan Cox
5fcc8db8a4 Tilemap.swap() called twice should not flip values
Repeat calls to swap() should not affect index values a second time.
"swap(1,2); swap(1,2)" should not be the same as "swap(2,1)."

(This also affects Phaser 1.1.6.)
2014-03-11 23:41:37 -04:00
photonstorm
58887d9bc6 Moved all of the Tilemap to P2 body methods into P2 itself (makes more sense this way) and tidied them up. 2014-03-11 15:02:59 +00:00
photonstorm
c73b4eaea0 json is now the default tilemap format when not defined (thanks RyanDansie, #528)
Updated docstrap
2014-03-10 00:50:06 +00:00
photonstorm
1c68ff9042 Tilemap.createFromObjects allows you to specify you own object type to be created if you want a class that extends Phaser.Sprite. 2014-03-07 03:19:07 +00:00
photonstorm
3e93f24583 New split physics system is implemented. Still tidying-up, but ArcadePhysics, P2 and Ninja Physics are in and configured. Lots more examples required, and tilemap collision mostly broken in Arcade at the moment. Time to implement in Ninja. 2014-03-06 06:29:19 +00:00
photonstorm
5a6ae5f696 Tilemap.putTile now correctly re-calculates the collision data based on the new collideIndexes array (fixes #371)
Tilemap.putTile can now insert a tile into a null/blank area of the map (before it could only replace existing tiles)
2014-03-04 03:08:35 +00:00
photonstorm
4a370c82cf You can now load in CSV Tilemaps again and they get created properly (fixes #391)
You can now create blank Tilemaps and then populate them with data later.
2014-03-03 13:45:47 +00:00
photonstorm
d8f5832fa2 Completely empty Tilemaps can now be created. This allows for dynamic map generation at runtime.
Loads of updates across most the Tilemap files. Not finished yet, still CSV loading to do and a multi-tileset issue to resolve, but it's a lot more flexible now.
2014-03-03 05:19:46 +00:00
photonstorm
418a161b46 Testing webgl debug overlay. 2014-03-02 20:51:44 +00:00
photonstorm
09d4a35b7f Fixed issue where Phaser.Canvas.create would always make a screencanvas for CocoonJS, but that should only happen once. New parameter toggles it. 2014-02-28 03:55:06 +00:00
photonstorm
34ee2b0b20 Fixed issue with CocoonJS detection in Device.
Fixed docs issue in Tilemap.
Created landscape pointer test, confirmed working fine (issue #276)
2014-02-28 03:09:04 +00:00
photonstorm
29fcfc515d Fixed TilemapParser - would spit out a tileset warning if margin/spacing were set (fix #485, thanks Cybolic) 2014-02-26 01:20:24 +00:00
photonstorm
994eaff92b StateManager fixes for when you change state in the create function.
TilemapLayer update for WebGL.
2014-02-26 00:58:19 +00:00
Jonas Malm
276ef9c268 Method expects body
Fixes crash in map.generateCollisionData
2014-02-23 17:42:39 +01:00
photonstorm
5a00a0ad97 TilemapParser will now throw a warning if the tileset image isn't the right size for the tile dimensions (fixes #377) 2014-02-21 16:57:45 +00:00
photonstorm
251b819bdb Fixed InputHandler group check #463 2014-02-21 10:06:53 +00:00
photonstorm
5d5c64d22f Tilemap.createCollisionObjects will parse Tiled data for objectgroups and convert polyline instances into physics objects you can collide with in the world.
After defining tiles that collide on a Tilemap, you need to call Tilemap.generateCollisionData(layer) to populate the physics world with the data required.
Debug.renderPhysicsBody updated to take camera location and body rotation into account.
Body movement functions put back to velocity :)
Updated to latest dev version of pixi and latest p2.js
Updated docs
2014-02-18 03:01:51 +00:00
photonstorm
0294a4735d Fixes issues reported in #389 2014-02-10 01:49:58 +00:00
photonstorm
ee3f6d8e7f Tilemap had the wrong @method signatures so most were missing from the docs. 2014-02-08 07:24:40 +00:00
photonstorm
0896c2fac7 Updating copyright year and README. 2014-02-05 16:54:59 +00:00
photonstorm
45b6d5a741 Removed: Debug.renderSpriteTouching, Debug.renderLocalTransformInfo, Debug.renderWorldTransformInfo, Debug.renderSpriteCollision and Debug.dumpLinkedList.
Debug.renderPhysicsBody(body, color) is extremely useful for debugging the new physics bodies. Will draw the outline + points in the color given.
Debug.renderBodyInfo(sprite, x, y, color) will display lots of Sprite body data.
2014-01-31 05:42:20 +00:00
photonstorm
13a86765cb Phaser.CANVAS_PX_ROUND is a boolean. If 'true' the Canvas renderer will Math.floor() all coordinates before drawImage, stopping pixel interpolation. Defaults to false.
Phaser.CANVAS_CLEAR_RECT is a boolean. If 'true' (the default) it will context.clearRect() every frame. If false this is skipped (useful if you know you don't need it)
Collision now works between Sprites positioned via sprite.x/y, sprite.body.x/y or sprite.body.velocity.
If you are tweening a sprite and still want physics collision, set `sprite.body.moves = false` otherwise it will fight against the tween motion.
2014-01-31 04:14:02 +00:00
photonstorm
68b7d22e0d Fixed issue with the camera being slightly out of sync with 'fixedToCamera' sprites. Also fixed 'jitter' issue with camera targets. 2014-01-31 03:32:12 +00:00