ddnet/src/game/client/components/maplayers.h

77 lines
2.7 KiB
C
Raw Normal View History

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>
#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
{
2015-08-25 00:11:04 +00:00
friend class CBackground;
2017-02-21 16:10:08 +00:00
CLayers *m_pLayers;
class CMapImages *m_pImages;
2010-05-29 07:25:38 +00:00
int m_Type;
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);
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,
TYPE_BACKGROUND_FORCE,
2010-05-29 07:25:38 +00:00
TYPE_FOREGROUND,
};
CMapLayers(int Type);
virtual void OnInit();
virtual void OnRender();
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);
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