2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
2010-05-29 07:25:38 +00:00
# ifndef GAME_CLIENT_COMPONENTS_MAPLAYERS_H
# define GAME_CLIENT_COMPONENTS_MAPLAYERS_H
# include <game/client/component.h>
2017-09-12 18:22:18 +00:00
# include <vector>
# define INDEX_BUFFER_GROUP_WIDTH 12
# define INDEX_BUFFER_GROUP_HEIGHT 9
# define INDEX_BORDER_BUFFER_GROUP_SIZE 20
2010-05-29 07:25:38 +00:00
class CMapLayers : public CComponent
2011-04-13 18:37:12 +00:00
{
2015-08-25 00:11:04 +00:00
friend class CBackground ;
2017-02-21 16:10:08 +00:00
2017-09-12 18:22:18 +00:00
CLayers * m_pLayers ;
class CMapImages * m_pImages ;
2010-05-29 07:25:38 +00:00
int m_Type ;
2011-12-04 13:04:12 +00:00
int m_CurrentLocalTick ;
int m_LastLocalTick ;
bool m_EnvelopeUpdate ;
2010-05-29 07:25:38 +00:00
2010-10-17 08:43:27 +00:00
void MapScreenToGroup ( float CenterX , float CenterY , CMapItemGroup * pGroup , float Zoom = 1.0f ) ;
2017-09-12 18:22:18 +00:00
struct STileLayerVisuals {
~ STileLayerVisuals ( ) { m_IndexBufferGroups . clear ( ) ; }
int m_VisualObjectIndex ;
bool m_IsTextured ;
struct SIndexBufferGroup {
SIndexBufferGroup ( ) : m_ByteOffset ( 0 ) , m_NumTilesToRender ( 0 ) { }
SIndexBufferGroup ( char * Offset ) : m_ByteOffset ( Offset ) , m_NumTilesToRender ( 0 ) { }
char * m_ByteOffset ;
unsigned int m_NumTilesToRender ;
} ;
std : : vector < SIndexBufferGroup > m_IndexBufferGroups ; //we create 12*9 fields of tiles, and thats how the index buffer is build -- and store the byte offsets of each field
SIndexBufferGroup m_BorderTopLeft ;
SIndexBufferGroup m_BorderBottomLeft ;
SIndexBufferGroup m_BorderTopRight ;
SIndexBufferGroup m_BorderBottomRight ;
SIndexBufferGroup m_BorderKillTile ; //end of map kill tile -- game layer only
std : : vector < SIndexBufferGroup > m_TopBorderIndexBufferGroups ; //for the border we create 20x1 fields
std : : vector < SIndexBufferGroup > m_LeftBorderIndexBufferGroups ; //for the border we create 20x1 fields
std : : vector < SIndexBufferGroup > m_RightBorderIndexBufferGroups ; //for the border we create 20x1 fields
std : : vector < SIndexBufferGroup > m_BottomBorderIndexBufferGroups ; //for the border we create 20x1 fields
} ;
std : : vector < STileLayerVisuals > m_TileLayerVisuals ;
int TileLayersOfGroup ( CMapItemGroup * pGroup ) ;
2010-05-29 07:25:38 +00:00
public :
enum
{
TYPE_BACKGROUND = 0 ,
2017-09-12 18:22:18 +00:00
TYPE_BACKGROUND_FORCE ,
2010-05-29 07:25:38 +00:00
TYPE_FOREGROUND ,
} ;
CMapLayers ( int Type ) ;
virtual void OnInit ( ) ;
virtual void OnRender ( ) ;
2017-09-12 18:22:18 +00:00
virtual void OnMapLoad ( ) ;
void RenderTileLayer ( int LayerIndex , vec4 * pColor , CMapItemLayerTilemap * pTileLayer , CMapItemGroup * pGroup ) ;
void DrawTileBorder ( int LayerIndex , vec4 * pColor , CMapItemLayerTilemap * pTileLayer , CMapItemGroup * pGroup , int BorderX0 , int BorderY0 , int BorderX1 , int BorderY1 ) ;
void DrawKillTileBorder ( int LayerIndex , vec4 * pColor , CMapItemLayerTilemap * pTileLayer , CMapItemGroup * pGroup ) ;
2011-12-04 13:04:12 +00:00
void EnvelopeUpdate ( ) ;
2014-10-12 14:12:13 +00:00
static void EnvelopeEval ( float TimeOffset , int Env , float * pChannels , void * pUser ) ;
2010-05-29 07:25:38 +00:00
} ;
# endif