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}
16
17void CEditorImage::OnAttach(CEditorMap *pMap)
18{
19 CMapObject::OnAttach(pMap);
20 m_AutoMapper.OnAttach(pMap);
21}
22
23void CEditorImage::AnalyseTileFlags()
24{
25 std::fill(first: std::begin(arr&: m_aTileFlags), last: std::end(arr&: m_aTileFlags), value: 0);
26
27 size_t TileWidth = m_Width / 16;
28 size_t TileHeight = m_Height / 16;
29 if(TileWidth == TileHeight && m_Format == CImageInfo::FORMAT_RGBA)
30 {
31 int TileId = 0;
32 for(size_t ty = 0; ty < 16; ty++)
33 for(size_t tx = 0; tx < 16; tx++, TileId++)
34 {
35 bool Opaque = true;
36 for(size_t x = 0; x < TileWidth; x++)
37 for(size_t y = 0; y < TileHeight; y++)
38 {
39 size_t p = (ty * TileWidth + y) * m_Width + tx * TileWidth + x;
40 if(m_pData[p * 4 + 3] < 250)
41 {
42 Opaque = false;
43 break;
44 }
45 }
46
47 if(Opaque)
48 m_aTileFlags[TileId] |= TILEFLAG_OPAQUE;
49 }
50 }
51}
52
53void CEditorImage::Free()
54{
55 Graphics()->UnloadTexture(pIndex: &m_Texture);
56 m_AutoMapper.Unload();
57 CImageInfo::Free();
58}
59
60CEditorImage &CEditorImage::operator=(CImageInfo &&Other)
61{
62 CImageInfo *pThis = this;
63 *pThis = std::move(Other);
64 return *this;
65}
66