1#include "image.h"
2
3#include <game/mapitems.h>
4
5CEditorImage::CEditorImage(CEditorMap *pMap) :
6 CMapObject(pMap),
7 m_AutoMapper(pMap)
8{
9 m_Texture.Invalidate();
10}
11
12CEditorImage::~CEditorImage()
13{
14 Graphics()->UnloadTexture(pIndex: &m_Texture);
15 free(ptr: m_pData);
16 m_pData = nullptr;
17}
18
19void CEditorImage::OnAttach(CEditorMap *pMap)
20{
21 CMapObject::OnAttach(pMap);
22 m_AutoMapper.OnAttach(pMap);
23}
24
25void CEditorImage::AnalyseTileFlags()
26{
27 std::fill(first: std::begin(arr&: m_aTileFlags), last: std::end(arr&: m_aTileFlags), value: 0);
28
29 size_t TileWidth = m_Width / 16;
30 size_t TileHeight = m_Height / 16;
31 if(TileWidth == TileHeight && m_Format == CImageInfo::FORMAT_RGBA)
32 {
33 int TileId = 0;
34 for(size_t ty = 0; ty < 16; ty++)
35 for(size_t tx = 0; tx < 16; tx++, TileId++)
36 {
37 bool Opaque = true;
38 for(size_t x = 0; x < TileWidth; x++)
39 for(size_t y = 0; y < TileHeight; y++)
40 {
41 size_t p = (ty * TileWidth + y) * m_Width + tx * TileWidth + x;
42 if(m_pData[p * 4 + 3] < 250)
43 {
44 Opaque = false;
45 break;
46 }
47 }
48
49 if(Opaque)
50 m_aTileFlags[TileId] |= TILEFLAG_OPAQUE;
51 }
52 }
53}
54
55void CEditorImage::Free()
56{
57 Graphics()->UnloadTexture(pIndex: &m_Texture);
58 m_AutoMapper.Unload();
59 CImageInfo::Free();
60}
61