20 #ifndef INC_C4MapScript
21 #define INC_C4MapScript
35 std::vector<bool> sky_mask;
36 std::vector<bool> tunnel_mask;
61 virtual bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const = 0;
102 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
108 int32_t seed, set_percentage, checker_wdt, checker_hgt;
109 bool is_fixed_offset;
113 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
123 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
134 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
140 struct Pt { int32_t x,y; };
141 std::vector<Pt> poly;
148 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
154 int32_t lx,ly,distance,ox,oy;
159 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
179 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
188 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
197 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
206 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
216 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
226 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
233 enum {Precision=1000};
237 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
243 int32_t amp[2], scale[2], seed, iterations;
247 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
253 int32_t left[2], top[2], right[2], bottom[2];
254 void ResolveBorderProps(int32_t *p);
258 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
268 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
277 bool operator () (int32_t x, int32_t y, uint8_t& fg, uint8_t& bg)
const override;
284 std::unique_ptr<CSurface8> fg_surface;
285 std::unique_ptr<CSurface8> bg_surface;
298 void SetSurfaces(std::unique_ptr<CSurface8> fg, std::unique_ptr<CSurface8> bg)
300 fg_surface = std::move(fg);
301 bg_surface = std::move(bg);
306 return std::make_pair(std::move(fg_surface), std::move(bg_surface));
308 bool HasSurface()
const {
return fg_surface && fg_surface->Bits && bg_surface && bg_surface->Bits; }
313 int32_t
GetWdt()
const {
return fg_surface ? fg_surface->Wdt : 0; }
314 int32_t
GetHgt()
const {
return fg_surface ? fg_surface->Hgt : 0; }
317 uint8_t
GetPix(int32_t x, int32_t y, uint8_t outside_col)
const {
return (!
HasSurface()||x<0||y<0||x>=fg_surface->Wdt||y>=fg_surface->Hgt) ? outside_col : fg_surface->_GetPix(x,y); }
318 uint8_t
GetBackPix(int32_t x, int32_t y, uint8_t outside_col)
const {
return (!
HasSurface()||x<0||y<0||x>=bg_surface->Wdt||y>=bg_surface->Hgt) ? outside_col : bg_surface->_GetPix(x,y); }
319 bool SetPix(int32_t x, int32_t y, uint8_t fg, uint8_t bg)
const {
if (!
HasSurface()||x<0||y<0||x>=bg_surface->Wdt||y>=bg_surface->Hgt)
return false; fg_surface->_SetPix(x,y,fg); bg_surface->_SetPix(x,y,bg);
return true; }
335 std::list<C4MapScriptLayer *> layers;
const int C4M_MaxTexIndex
C4MapScriptHost MapScript
bool FnParTexCol(C4String *mattex, uint8_t &fg, uint8_t &bg)
C4MapScriptAlgoAnd(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoBorder(const C4PropList *props)
C4MapScriptAlgoEllipse(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoFilter(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
virtual bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const =0
bool GetXYProps(const C4PropList *props, C4PropertyName k, int32_t *out_xy, bool zero_defaults)
virtual ~C4MapScriptAlgo()=default
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoLayer(const C4MapScriptLayer *layer)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoLines(const C4PropList *props)
~C4MapScriptAlgoModifier() override
C4MapScriptAlgoModifier(const C4PropList *props, int32_t min_ops=0, int32_t max_ops=0)
std::vector< C4MapScriptAlgo * > operands
C4MapScriptAlgoNot(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoOffset(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoOr(const C4PropList *props)
C4MapScriptAlgoPolygon(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoRect(const C4PropList *props)
C4MapScriptAlgoRndChecker(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoRotate(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoScale(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoSetMaterial(C4MapScriptAlgo *inner, int fg, int bg)
~C4MapScriptAlgoSetMaterial() override
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4MapScriptAlgoTurbulence(const C4PropList *props)
C4MapScriptAlgoXor(const C4PropList *props)
bool operator()(int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
C4PropListStatic * GetLayerPrototype()
bool InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, std::unique_ptr< CSurface8 > *pmap_fg_surface, std::unique_ptr< CSurface8 > *pmap_bg_surface)
C4PropListStatic * GetPropList() override
void AddEngineFunctions() override
bool Load(C4Group &, const char *, const char *, C4LangStringTable *) override
bool LoadData(const char *, const char *, C4LangStringTable *) override
void InitFunctionMap(C4AulScriptEngine *pEngine)
~C4MapScriptHost() override
bool Fill(uint8_t fg, uint8_t bg, const C4Rect &rcBounds, const C4MapScriptAlgo *algo)
uint8_t GetPix(int32_t x, int32_t y, uint8_t outside_col) const
C4MapScriptLayer * GetMapScriptLayer() override
bool SetPix(int32_t x, int32_t y, uint8_t fg, uint8_t bg) const
C4MapScriptLayer(C4PropList *prototype, C4MapScriptMap *map)
~C4MapScriptLayer() override
int32_t GetPixCount(const C4Rect &rcBounds, const C4MapScriptMatTexMask &mask)
class C4MapScriptMap * GetMap()
bool Blit(const C4Rect &rcBounds, const C4MapScriptAlgo *algo)
bool CreateSurface(int32_t wdt, int32_t hgt)
bool IsPixMasked(int32_t x, int32_t y) const
void ConvertSkyToTransparent()
bool FindPos(const C4Rect &search_rect, const C4MapScriptMatTexMask &mask, int32_t *out_x, int32_t *out_y, int32_t max_tries)
void SetSurfaces(std::unique_ptr< CSurface8 > fg, std::unique_ptr< CSurface8 > bg)
std::pair< std::unique_ptr< CSurface8 >, std::unique_ptr< CSurface8 > > ReleaseSurfaces()
class C4MapScriptMap * map
uint8_t GetBackPix(int32_t x, int32_t y, uint8_t outside_col) const
~C4MapScriptMap() override
C4MapScriptMap * GetMapScriptMap() override
C4MapScriptLayer * CreateLayer(int32_t wdt, int32_t hgt)
C4MapScriptMap(C4PropList *prototype)
void Init(const C4Value &spec)
bool operator()(uint8_t fg, uint8_t bg) const
C4MapScriptMatTexMask(const C4Value &spec)