Game object tile mappings and tunnel colors are now part of the ClassicMap
parent
e4f678919b
commit
6af5adddb8
|
@ -141,5 +141,43 @@ ltjs.ClassicMap = Class( 'ClassicMap' )
|
|||
'public getDimensions': function()
|
||||
{
|
||||
return [ 16, 16 ];
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve map of object codes to their appropriate tiles
|
||||
*
|
||||
* @return {Array.<string>}
|
||||
*/
|
||||
'public getObjectTileMap': function()
|
||||
{
|
||||
// we return these values here instead of returning, say, a constant,
|
||||
// because we would have to clone it to ensure that our inner state
|
||||
// would not be altered
|
||||
return [
|
||||
'dirt', 'tup', 'base', 'water', 'block', 'mblock', 'brick',
|
||||
'atup', 'atright', 'atdown', 'atleft', 'mirrorul', 'mirrorur',
|
||||
'mirrordr', 'mirrordl', 'owup', 'owright', 'owdown', 'owleft',
|
||||
'cblock', 'rmirrorul', 'rmirrorur', 'rmirrordr', 'rmirrordl',
|
||||
'ice', 'thinice'
|
||||
];
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve tunnel colors
|
||||
*
|
||||
* These colors will be rendered in the background and will bleed through
|
||||
* the transparent portions of the tile. We use explicit HEX codes rather
|
||||
* than CSS color names because environments may vary the colors used.
|
||||
*
|
||||
* @return {Array.<string>}
|
||||
*/
|
||||
'public getTunnelColors': function()
|
||||
{
|
||||
return [
|
||||
'#ff0000', '#00ff00', '#0000ff', '#00ffff', // r g b c
|
||||
'#ffff00', '#ff00ff', '#ffffff', '#808080' // y m w b
|
||||
];
|
||||
}
|
||||
} );
|
||||
|
|
24
lib/Map.js
24
lib/Map.js
|
@ -69,5 +69,27 @@ ltjs.Map = Interface( 'Map',
|
|||
*
|
||||
* @return {Array.<number>} width and height in tiles
|
||||
*/
|
||||
'public getDimensions': []
|
||||
'public getDimensions': [],
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve map of object codes to their appropriate tiles
|
||||
*
|
||||
* @return {Array.<string>}
|
||||
*/
|
||||
'public getObjectTileMap': [],
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve tunnel colors
|
||||
*
|
||||
* These colors will be rendered in the background and will bleed through
|
||||
* the transparent portions of the tile. A total of eight colors should be
|
||||
* returned. They may be specified in any CSS format, but explicit values
|
||||
* are recommended since color names (e.g. 'green') can vary between
|
||||
* environments.
|
||||
*
|
||||
* @return {Array.<string>}
|
||||
*/
|
||||
'public getTunnelColors': []
|
||||
} );
|
||||
|
|
|
@ -54,38 +54,6 @@ ltjs.MapRender = Class( 'MapRender',
|
|||
*/
|
||||
'private _tiles': {},
|
||||
|
||||
/**
|
||||
* Maps each "game object" in the map to a tile id
|
||||
* TODO: abstract
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
'private _objMap': [
|
||||
'dirt', 'tup', 'base', 'water', 'block', 'mblock', 'brick',
|
||||
'atup', 'atright', 'atdown', 'atleft', 'mirrorul', 'mirrorur',
|
||||
'mirrordr', 'mirrordl', 'owup', 'owright', 'owdown', 'owleft',
|
||||
'cblock', 'rmirrorul', 'rmirrorur', 'rmirrordr', 'rmirrordl',
|
||||
'ice', 'thinice'
|
||||
],
|
||||
|
||||
/**
|
||||
* Colors used to identify tunnels
|
||||
*
|
||||
* These colors will be rendered in the background and will bleed through
|
||||
* the transparent portions of the tile. We use explicit HEX codes rather
|
||||
* than CSS color names because environments may vary the colors used.
|
||||
*
|
||||
* Taken from ColorList in LTANK2.C in the original sources. Note that there
|
||||
* is an endianness difference.
|
||||
*
|
||||
* TODO: abstract
|
||||
*
|
||||
* @type {Array.<string>}
|
||||
*/
|
||||
'private _tunnelColors': [
|
||||
'#ff0000', '#00ff00', '#0000ff', '#00ffff', // r g b c
|
||||
'#ffff00', '#ff00ff', '#ffffff', '#808080' // y m w b
|
||||
],
|
||||
|
||||
|
||||
/**
|
||||
* Initialize renderer with a canvas context and a tile set
|
||||
|
@ -202,7 +170,9 @@ ltjs.MapRender = Class( 'MapRender',
|
|||
var objs = map.getObjects(),
|
||||
size = map.getDimensions(),
|
||||
i = objs.length,
|
||||
tiles = this._tiles,
|
||||
omap = map.getObjectTileMap(),
|
||||
|
||||
tunnel_colors = map.getTunnelColors(),
|
||||
|
||||
// get the width and height from one of the tiles
|
||||
t = this._tiles.dirt.data,
|
||||
|
@ -214,14 +184,14 @@ ltjs.MapRender = Class( 'MapRender',
|
|||
while ( i-- )
|
||||
{
|
||||
var oid = objs[ i ],
|
||||
tid = this._objMap[ oid ],
|
||||
tid = omap[ oid ],
|
||||
x = ( Math.floor( i / size[ 0 ] ) * w ),
|
||||
y = ( ( i % size[ 1 ] ) * h );
|
||||
|
||||
// tunnels are handled a bit differently than other objects
|
||||
if ( this._isTunnel( oid ) )
|
||||
{
|
||||
this._renderTunnel( oid, x, y );
|
||||
this._renderTunnel( oid, x, y, tunnel_colors );
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -283,14 +253,16 @@ ltjs.MapRender = Class( 'MapRender',
|
|||
* @param {number} x left position
|
||||
* @param {number} y top position
|
||||
*
|
||||
* @param {Array.<string>} colors tunnel colors
|
||||
*
|
||||
* @return {undefined}
|
||||
*/
|
||||
'private _renderTunnel': function( oid, x, y )
|
||||
'private _renderTunnel': function( oid, x, y, colors )
|
||||
{
|
||||
// get the tunnel id by stripping off the tunnel bitmask and grab the
|
||||
// associated color
|
||||
var tunnel_id = ( ( +oid ^ this.__self.$( '_TMASK' ) ) / 2 ),
|
||||
color = this._tunnelColors[ tunnel_id ] || 'black',
|
||||
color = colors[ tunnel_id ] || 'black',
|
||||
tdata = this._tiles.tunnel.data;
|
||||
|
||||
// fill tile with the appropriate background color for this tile
|
||||
|
|
Loading…
Reference in New Issue