OpenClonk
C4MapScriptAlgoLayer Class Reference

#include <C4MapScript.h>

Inheritance diagram for C4MapScriptAlgoLayer:
[legend]
Collaboration diagram for C4MapScriptAlgoLayer:
[legend]

Public Member Functions

 C4MapScriptAlgoLayer (const C4MapScriptLayer *layer)
 
 C4MapScriptAlgoLayer (const C4PropList *props)
 
bool operator() (int32_t x, int32_t y, uint8_t &fg, uint8_t &bg) const override
 

Protected Member Functions

bool GetXYProps (const C4PropList *props, C4PropertyName k, int32_t *out_xy, bool zero_defaults)
 

Detailed Description

Definition at line 95 of file C4MapScript.h.

Constructor & Destructor Documentation

◆ C4MapScriptAlgoLayer() [1/2]

C4MapScriptAlgoLayer::C4MapScriptAlgoLayer ( const C4MapScriptLayer layer)
inline

Definition at line 99 of file C4MapScript.h.

99 : layer(layer) {}

◆ C4MapScriptAlgoLayer() [2/2]

C4MapScriptAlgoLayer::C4MapScriptAlgoLayer ( const C4PropList props)

Definition at line 52 of file C4MapScriptAlgo.cpp.

53 {
54  // Get MAPALGO_Layer properties
55  C4PropList *layer_pl = props->GetPropertyPropList(P_Layer);
56  if (!layer_pl || !(layer = layer_pl->GetMapScriptLayer()))
57  throw C4AulExecError(R"(C4MapScriptAlgoLayer: Expected layer in "Layer" property.)");
58 }
@ P_Layer
C4PropList * GetPropertyPropList(C4PropertyName k) const
Definition: C4PropList.cpp:869
virtual class C4MapScriptLayer * GetMapScriptLayer()
Definition: C4PropList.cpp:660

References C4PropList::GetMapScriptLayer(), C4PropList::GetPropertyPropList(), and P_Layer.

Here is the call graph for this function:

Member Function Documentation

◆ GetXYProps()

bool C4MapScriptAlgo::GetXYProps ( const C4PropList props,
C4PropertyName  k,
int32_t *  out_xy,
bool  zero_defaults 
)
protectedinherited

Definition at line 26 of file C4MapScriptAlgo.cpp.

27 {
28  // Evaluate property named "k" in proplist props to store two numbers in out_xy:
29  // If props->k is a single integer, fill both numbers in out_xy with it
30  // If props->k is an array, check that it contains two numbers and store them in out_xy
31  if (!props->HasProperty(&Strings.P[k]))
32  {
33  if (zero_defaults) out_xy[0] = out_xy[1] = 0;
34  return false;
35  }
36  C4Value val; C4ValueArray *arr;
37  props->GetProperty(k, &val);
38  if ((arr = val.getArray()))
39  {
40  if (arr->GetSize() != 2)
41  throw C4AulExecError(FormatString(R"(C4MapScriptAlgo: Expected either integer or array with two integer elements in property "%s".)", Strings.P[k].GetCStr()).getData());
42  out_xy[0] = arr->GetItem(0).getInt();
43  out_xy[1] = arr->GetItem(1).getInt();
44  }
45  else
46  {
47  out_xy[0] = out_xy[1] = val.getInt();
48  }
49  return true;
50 }
C4StringTable Strings
Definition: C4Globals.cpp:42
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270
bool HasProperty(C4String *k) const
Definition: C4PropList.h:122
bool GetProperty(C4PropertyName k, C4Value *pResult) const
Definition: C4PropList.h:105
const char * GetCStr() const
Definition: C4StringTable.h:49
C4String P[P_LAST]
const C4Value & GetItem(int32_t iElem) const
Definition: C4ValueArray.h:38
int32_t GetSize() const
Definition: C4ValueArray.h:36
C4ValueArray * getArray() const
Definition: C4Value.h:118
int32_t getInt() const
Definition: C4Value.h:112
const char * getData() const
Definition: StdBuf.h:442

References FormatString(), C4Value::getArray(), C4String::GetCStr(), StdStrBuf::getData(), C4Value::getInt(), C4ValueArray::GetItem(), C4PropList::GetProperty(), C4ValueArray::GetSize(), C4PropList::HasProperty(), C4StringTable::P, and Strings.

Referenced by C4MapScriptAlgoBorder::C4MapScriptAlgoBorder(), and C4MapScriptAlgoTurbulence::C4MapScriptAlgoTurbulence().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator()()

bool C4MapScriptAlgoLayer::operator() ( int32_t  x,
int32_t  y,
uint8_t &  fg,
uint8_t &  bg 
) const
overridevirtual

Implements C4MapScriptAlgo.

Definition at line 60 of file C4MapScriptAlgo.cpp.

61 {
62  fg = layer->GetPix(x,y,0);
63  bg = layer->GetBackPix(x,y,0);
64 
65  // Evaluate MAPALGO_Layer at x,y: Just query pixel in layer. Pixels outside the layer range are zero.
66  return fg != 0 || bg != 0;
67 }
uint8_t GetPix(int32_t x, int32_t y, uint8_t outside_col) const
Definition: C4MapScript.h:317
uint8_t GetBackPix(int32_t x, int32_t y, uint8_t outside_col) const
Definition: C4MapScript.h:318

References C4MapScriptLayer::GetBackPix(), and C4MapScriptLayer::GetPix().

Here is the call graph for this function:

The documentation for this class was generated from the following files: