OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
C4MapScriptLayer Class Reference

#include <C4MapScript.h>

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

Public Member Functions

 C4MapScriptLayer (C4PropList *prototype, C4MapScriptMap *map)
 
 ~C4MapScriptLayer () override
 
C4MapScriptLayerGetMapScriptLayer () override
 
class C4MapScriptMapGetMap ()
 
bool CreateSurface (int32_t wdt, int32_t hgt)
 
void ClearSurface ()
 
void SetSurfaces (std::unique_ptr< CSurface8 > fg, std::unique_ptr< CSurface8 > bg)
 
std::pair< std::unique_ptr
< CSurface8 >, std::unique_ptr
< CSurface8 > > 
ReleaseSurfaces ()
 
bool HasSurface () const
 
void UpdateSurfaceSize ()
 
C4Rect GetBounds () const
 
int32_t GetWdt () const
 
int32_t GetHgt () const
 
uint8_t GetPix (int32_t x, int32_t y, uint8_t outside_col) const
 
uint8_t GetBackPix (int32_t x, int32_t y, uint8_t outside_col) const
 
bool SetPix (int32_t x, int32_t y, uint8_t fg, uint8_t bg) const
 
bool IsPixMasked (int32_t x, int32_t y) const
 
void ConvertSkyToTransparent ()
 
int32_t GetPixCount (const C4Rect &rcBounds, const C4MapScriptMatTexMask &mask)
 
bool Fill (uint8_t fg, uint8_t bg, const C4Rect &rcBounds, const C4MapScriptAlgo *algo)
 
bool Blit (const C4Rect &rcBounds, const C4MapScriptAlgo *algo)
 
bool Blit (const C4MapScriptLayer *src, const C4Rect &src_rect, const C4MapScriptMatTexMask &mask, int32_t tx, int32_t ty)
 
bool FindPos (const C4Rect &search_rect, const C4MapScriptMatTexMask &mask, int32_t *out_x, int32_t *out_y, int32_t max_tries)
 
void CompileFunc (StdCompiler *pComp, C4ValueNumbers *numbers)
 
C4PropListNumberedGetPropListNumbered () override
 
bool IsNumbered () const override
 
void Clear ()
 
virtual const char * GetName () const
 
virtual void SetName (const char *NewName=nullptr)
 
virtual void SetOnFire (bool OnFire)
 
virtual C4Def const * GetDef () const
 
virtual C4DefGetDef ()
 
virtual C4ObjectGetObject ()
 
virtual C4Object const * GetObject () const
 
virtual C4EffectGetEffect ()
 
virtual class C4MapScriptMapGetMapScriptMap ()
 
C4PropListGetPrototype () const
 
void RemoveCyclicPrototypes ()
 
virtual class C4PropListStaticIsStatic ()
 
const class C4PropListStaticIsStatic () const
 
virtual bool Delete ()
 
virtual bool GetPropertyByS (const C4String *k, C4Value *pResult) const
 
virtual C4ValueArrayGetProperties () const
 
virtual void SetPropertyByS (C4String *k, const C4Value &to)
 
virtual void ResetProperty (C4String *k)
 
bool GetProperty (C4PropertyName k, C4Value *pResult) const
 
C4StringGetPropertyStr (C4PropertyName k) const
 
C4ValueArrayGetPropertyArray (C4PropertyName n) const
 
C4AulFuncGetFunc (C4PropertyName k) const
 
C4AulFuncGetFunc (C4String *k) const
 
C4AulFuncGetFunc (const char *k) const
 
C4StringEnumerateOwnFuncs (C4String *prev=nullptr) const
 
C4Value Call (C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
 
C4Value Call (C4String *k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
 
C4Value Call (const char *k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
 
C4PropertyName GetPropertyP (C4PropertyName k) const
 
int32_t GetPropertyBool (C4PropertyName n, bool default_val=false) const
 
int32_t GetPropertyInt (C4PropertyName k, int32_t default_val=0) const
 
C4PropListGetPropertyPropList (C4PropertyName k) const
 
bool HasProperty (C4String *k) const
 
void SetProperty (C4PropertyName k, const C4Value &to)
 
void Freeze ()
 
void Thaw ()
 
void ThawRecursively ()
 
bool IsFrozen () const
 
C4PropListStaticFreezeAndMakeStaticRecursively (std::vector< C4Value > *prop_lists, const C4PropListStatic *parent=nullptr, C4String *key=nullptr)
 
virtual void Denumerate (C4ValueNumbers *)
 
void AppendDataString (StdStrBuf *out, const char *delim, int depth=3, bool ignore_reference_parent=false) const
 
StdStrBuf ToJSON (int depth=10, bool ignore_reference_parent=false) const
 
std::vector< C4String * > GetSortedLocalProperties (bool add_prototype=true) const
 
std::vector< C4String * > GetSortedLocalProperties (const char *prefix, const C4PropList *ignore_overridden) const
 
std::vector< C4String * > GetUnsortedProperties (const char *prefix, C4PropList *ignore_parent=nullptr) const
 
std::vector< C4String * > GetSortedProperties (const char *prefix, C4PropList *ignore_parent=nullptr) const
 
bool operator== (const C4PropList &b) const
 
Iterator begin ()
 
Iterator end ()
 

Static Public Member Functions

static C4PropListGetByNumber (int32_t iNumber)
 
static bool CheckPropList (C4PropList *)
 
static void SetEnumerationIndex (int32_t iMaxObjectNumber)
 
static int32_t GetEnumerationIndex ()
 
static void ResetEnumerationIndex ()
 
static void ShelveNumberedPropLists ()
 
static void UnshelveNumberedPropLists ()
 
static void ClearShelve ()
 
static void ClearNumberedPropLists ()
 
static C4PropListNew (C4PropList *prototype=nullptr)
 
static C4PropListStaticNewStatic (C4PropList *prototype, const C4PropListStatic *parent, C4String *key)
 

Public Attributes

int32_t Number {-1}
 
int32_t Status {1}
 

Protected Member Functions

void AcquireNumber ()
 
void ClearNumber ()
 
void ClearRefs ()
 

Protected Attributes

class C4MapScriptMapmap
 

Static Protected Attributes

static C4Set
< C4PropListNumbered * > 
PropLists
 
static std::vector
< C4PropListNumbered * > 
ShelvedPropLists
 
static int32_t EnumerationIndex = 0
 

Detailed Description

Definition at line 270 of file C4MapScript.h.

Constructor & Destructor Documentation

C4MapScriptLayer::C4MapScriptLayer ( C4PropList prototype,
C4MapScriptMap map 
)

Definition at line 453 of file C4MapScript.cpp.

References C4PropListNumbered::AcquireNumber().

Referenced by C4MapScriptMap::CreateLayer().

453  : C4PropListNumbered(prototype), map(map)
454 {
455  // It seems like numbered PropLists need a number. I don't know why.
456  AcquireNumber();
457 }
C4PropListNumbered(C4PropList *prototype=nullptr)
Definition: C4PropList.cpp:151
class C4MapScriptMap * map
Definition: C4MapScript.h:275

Here is the call graph for this function:

Here is the caller graph for this function:

C4MapScriptLayer::~C4MapScriptLayer ( )
inlineoverride

Definition at line 279 of file C4MapScript.h.

References ClearSurface().

279 { ClearSurface(); }

Here is the call graph for this function:

Member Function Documentation

void C4PropListNumbered::AcquireNumber ( )
protectedinherited

Definition at line 155 of file C4PropList.cpp.

References C4Set< T >::Add(), C4PropListNumbered::EnumerationIndex, C4Set< T >::Get(), C4PropListNumbered::Number, and C4PropListNumbered::PropLists.

Referenced by C4Effect::C4Effect(), C4MapScriptLayer(), and C4Object::Init().

156 {
157  // Enumerate object
158  do
160  while (PropLists.Get(Number));
161  // Add to list
162  PropLists.Add(this);
163 }
T * Add(T const &e)
T & Get(H e) const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236
static int32_t EnumerationIndex
Definition: C4PropList.h:238

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::AppendDataString ( StdStrBuf out,
const char *  delim,
int  depth = 3,
bool  ignore_reference_parent = false 
) const
inherited

Definition at line 518 of file C4PropList.cpp.

References StdStrBuf::Append(), C4Value::GetDataString(), C4Set< T >::GetSize(), C4Set< T >::GetSortedListOfElementPointers(), and C4PropList::IsStatic().

Referenced by C4Value::GetDataString(), and C4Object::GetDataString().

519 {
520  StdStrBuf & DataString = *out;
521  if (depth <= 0 && Properties.GetSize())
522  {
523  DataString.Append("...");
524  return;
525  }
526  bool has_elements = false;
527  // Append prototype
528  if (prototype)
529  {
530  DataString.Append("Prototype = ");
531  DataString.Append(prototype.GetDataString(depth - 1, ignore_reference_parent ? IsStatic() : nullptr));
532  has_elements = true;
533  }
534  // Append other properties
535  std::list<const C4Property *> sorted_props = Properties.GetSortedListOfElementPointers();
536  for (std::list<const C4Property *>::const_iterator p = sorted_props.begin(); p != sorted_props.end(); ++p)
537  {
538  if (has_elements) DataString.Append(delim);
539  DataString.Append((*p)->Key->GetData());
540  DataString.Append(" = ");
541  DataString.Append((*p)->Value.GetDataString(depth - 1, ignore_reference_parent ? IsStatic() : nullptr));
542  has_elements = true;
543  }
544 }
std::list< const T * > GetSortedListOfElementPointers() const
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:85
StdStrBuf GetDataString(int depth=10, const class C4PropListStatic *ignore_reference_parent=nullptr) const
Definition: C4Value.cpp:131
unsigned int GetSize() const
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519

Here is the call graph for this function:

Here is the caller graph for this function:

C4PropList::Iterator C4PropList::begin ( )
inherited

Definition at line 1003 of file C4PropList.cpp.

References C4PropList::begin(), C4Set< T >::First(), C4PropList::GetPrototype(), C4Set< T >::GetSize(), and C4Set< T >::Next().

Referenced by C4PropList::begin(), and C4ParticleProperties::Set().

1004 {
1005  C4PropList::Iterator iter;
1006 
1007  if (GetPrototype())
1008  {
1009  iter = GetPrototype()->begin();
1010  }
1011  else
1012  {
1013  iter.properties = std::make_shared<std::vector<const C4Property*> >();
1014  }
1015  iter.Reserve(Properties.GetSize());
1016 
1017  const C4Property * p = Properties.First();
1018  while (p)
1019  {
1020  iter.AddProperty(p);
1021  p = Properties.Next(p);
1022  }
1023 
1024  iter.Init();
1025  return iter;
1026 }
T const * Next(T const *p) const
unsigned int GetSize() const
Iterator begin()
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4MapScriptLayer::Blit ( const C4Rect rcBounds,
const C4MapScriptAlgo algo 
)

Definition at line 533 of file C4MapScript.cpp.

References HasSurface(), C4Rect::Hgt, C4Rect::Wdt, C4Rect::x, and C4Rect::y.

534 {
535  // safety
536  if (!HasSurface()) return false;
537  assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt);
538  assert(algo);
539  // set all pixels within bounds by algo, if algo is not transparent
540  uint8_t fg, bg;
541  for (int32_t y=rcBounds.y; y<rcBounds.y+rcBounds.Hgt; ++y)
542  for (int32_t x=rcBounds.x; x<rcBounds.x+rcBounds.Wdt; ++x)
543  if (((*algo)(x,y,fg,bg)))
544  {
545  if (fg) fg_surface->_SetPix(x,y,fg);
546  if (bg) bg_surface->_SetPix(x,y,bg);
547  }
548  return true;
549 }
bool HasSurface() const
Definition: C4MapScript.h:296
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30

Here is the call graph for this function:

bool C4MapScriptLayer::Blit ( const C4MapScriptLayer src,
const C4Rect src_rect,
const C4MapScriptMatTexMask mask,
int32_t  tx,
int32_t  ty 
)

Definition at line 551 of file C4MapScript.cpp.

References HasSurface(), C4Rect::Hgt, C4Rect::Wdt, C4Rect::x, and C4Rect::y.

552 {
553  // safety
554  assert(src);
555  if (!HasSurface() || !src->HasSurface()) return false;
556  // cannot assert this, because C4Rect::Contains(C4Rect &) has an off-by-one-error which I don't dare to fix right now
557  // TODO: Fix C4Rect::Contains and check if the sector code still works
558  // assert(src->GetBounds().Contains(src_rect));
559  // copy all pixels that aren't masked
560  uint8_t fg, bg;
561  for (int32_t y=src_rect.y; y<src_rect.y+src_rect.Hgt; ++y)
562  for (int32_t x=src_rect.x; x<src_rect.x+src_rect.Wdt; ++x)
563  {
564  fg = src->fg_surface->_GetPix(x, y);
565  bg = src->bg_surface->_GetPix(x, y);
566 
567  if (col_mask(fg, bg))
568  {
569  fg_surface->_SetPix(x-src_rect.x+tx,y-src_rect.y+ty,fg);
570  bg_surface->_SetPix(x-src_rect.x+tx,y-src_rect.y+ty,bg);
571  }
572  }
573  return true;
574 }
bool HasSurface() const
Definition: C4MapScript.h:296
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30

Here is the call graph for this function:

C4Value C4PropList::Call ( C4PropertyName  k,
C4AulParSet pPars = nullptr,
bool  fPassErrors = false 
)
inlineinherited

Definition at line 110 of file C4PropList.h.

References C4StringTable::P, and Strings.

Referenced by C4Command::Acquire(), C4Object::ActivateEntrance(), C4Object::ActivateMenu(), C4Object::AssignDeath(), C4Object::AssignRemoval(), C4Command::Call(), C4GameScriptHost::Call(), C4Effect::CallEffect(), C4Command::CallFailed(), C4Effect::CallStart(), C4Effect::CallStop(), C4Effect::CallTimer(), C4FindObjectFunc::Check(), C4Effect::ClearAll(), C4Object::Collect(), C4SortObjectFunc::CompareGetValue(), C4Object::Contact(), C4GameObjects::CrossCheck(), C4Landscape::P::DigMaterial2Objects(), C4Object::DirectComContents(), C4Object::DoBreath(), C4Object::DoCon(), C4Object::DoDamage(), C4Object::DoEnergy(), C4Object::DoMovement(), C4ObjectMenu::DoRefillInternal(), C4Object::DoSelect(), C4Object::Enter(), C4RoundResults::EvaluateGame(), C4RoundResults::EvaluateGoals(), C4Object::ExecAction(), C4Object::ExecLife(), C4ScriptGuiWindowAction::ExecuteCommand(), C4Object::ExecuteCommand(), C4Object::Exit(), C4Command::Fail(), C4Command::GetTryEnter(), C4Def::GetValue(), C4Object::GetValue(), GrabLost(), C4GameObjects::GRBroadcast(), C4Landscape::Incinerate(), C4Effect::Init(), C4Player::Init(), C4Game::InitGame(), C4ObjectMenu::IsCloseDenied(), C4Effect::Kill(), C4Object::Lift(), C4Player::MakeCrewMember(), C4Game::NewObject(), ObjectActionJump(), ObjectComGrab(), ObjectComPunch(), ObjectComPut(), ObjectComUnGrab(), C4ObjectMenu::OnSelectionChanged(), C4GameObjects::OnSynchronized(), C4EditCursor::PerformDuplication(), C4EditCursor::PerformDuplicationLegacy(), C4Player::PlaceReadyCrew(), C4Landscape::P::PostFreeShape(), C4Object::Promote(), C4Object::Push(), C4Game::SaveData(), C4Object::SetAction(), C4GUI::FrameDecoration::SetByDef(), C4Object::SetCommand(), C4Player::SetObjectCrewStatus(), C4Object::SetOwner(), C4Object::StatusActivate(), C4Command::Transfer(), and C4Object::UnSelect().

111  { return Call(&Strings.P[k], pPars, fPassErrors); }
C4String P[P_LAST]
C4StringTable Strings
Definition: C4Globals.cpp:42
C4Value Call(C4PropertyName k, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4PropList.h:110

Here is the caller graph for this function:

C4Value C4PropList::Call ( C4String k,
C4AulParSet pPars = nullptr,
bool  fPassErrors = false 
)
inherited

Definition at line 824 of file C4PropList.cpp.

References C4PropList::C4Value, C4AulFunc::Exec(), C4PropList::GetFunc(), and C4PropList::Status.

825 {
826  if (!Status) return C4Value();
827  C4AulFunc *pFn = GetFunc(k);
828  if (!pFn) return C4Value();
829  return pFn->Exec(this, Pars, fPassErrors);
830 }
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:105
friend class C4Value
Definition: C4PropList.h:165
C4Value Exec(C4PropList *p=nullptr, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4AulFunc.h:73
int32_t Status
Definition: C4PropList.h:168

Here is the call graph for this function:

C4Value C4PropList::Call ( const char *  k,
C4AulParSet pPars = nullptr,
bool  fPassErrors = false 
)
inherited

Definition at line 832 of file C4PropList.cpp.

References C4PropList::C4Value, C4AulFunc::Exec(), FormatString(), C4AulScriptEngine::GetErrorHandler(), C4PropList::GetFunc(), C4AulErrorHandler::OnError(), ScriptEngine, C4PropList::Status, and C4AulError::what().

833 {
834  if (!Status) return C4Value();
835  assert(s && s[0]);
836  C4AulFunc *pFn = GetFunc(s);
837  if (!pFn)
838  {
839  if (s[0] != '~')
840  {
841  C4AulExecError err(FormatString("Undefined function: %s", s).getData());
842  if (fPassErrors)
843  throw err;
844  ::ScriptEngine.GetErrorHandler()->OnError(err.what());
845  }
846  return C4Value();
847  }
848  return pFn->Exec(this, Pars, fPassErrors);
849 }
C4AulErrorHandler * GetErrorHandler() const
Definition: C4Aul.h:173
C4AulScriptEngine ScriptEngine
Definition: C4Globals.cpp:43
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:105
friend class C4Value
Definition: C4PropList.h:165
C4Value Exec(C4PropList *p=nullptr, C4AulParSet *pPars=nullptr, bool fPassErrors=false)
Definition: C4AulFunc.h:73
int32_t Status
Definition: C4PropList.h:168
virtual void OnError(const char *msg)=0
#define s
StdStrBuf FormatString(const char *szFmt,...)
Definition: StdBuf.cpp:270

Here is the call graph for this function:

bool C4PropListNumbered::CheckPropList ( C4PropList pObj)
staticinherited

Definition at line 80 of file C4PropList.cpp.

References C4Set< T >::First(), C4Set< T >::Next(), and C4PropListNumbered::PropLists.

Referenced by C4Object::SetOCF(), C4Object::UpdateOCF(), and C4PropList::~C4PropList().

81 {
82  if (!pObj) return false;
83  C4PropListNumbered * const * p = PropLists.First();
84  while (p)
85  {
86  if (*p == pObj)
87  return true;
88  p = PropLists.Next(p);
89  }
90  return false;
91 }
T const * Next(T const *p) const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::Clear ( )
inlineinherited

Definition at line 66 of file C4PropList.h.

References C4Set< T >::Clear(), and C4Value::Set0().

Referenced by C4ExtraScriptHost::Clear(), C4Def::Clear(), C4PropListNumbered::ClearNumberedPropLists(), C4ScriptHost::DeleteOwnedPropLists(), and C4Def::~C4Def().

66 { constant = false; Properties.Clear(); prototype.Set0(); }
void Set0()
Definition: C4Value.h:336
void Clear()

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::ClearNumber ( )
protectedinherited

Definition at line 165 of file C4PropList.cpp.

References C4PropListNumbered::Number, C4PropListNumbered::PropLists, and C4Set< T >::Remove().

Referenced by C4PropListNumbered::ShelveNumberedPropLists().

166 {
167  // Make proplist invisible during denumeration process
168  if (Number != -1)
169  {
170  PropLists.Remove(this);
171  Number = -1;
172  }
173 }
void Remove(H e)
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::ClearNumberedPropLists ( )
staticinherited

Definition at line 137 of file C4PropList.cpp.

References C4PropList::Clear(), C4Set< T >::First(), C4Set< T >::Next(), and C4PropListNumbered::PropLists.

Referenced by C4Game::Clear().

138 {
139  // empty all proplists to ensure safe deletion of proplists with circular references
140  // note that this the call to Clear() might delete some prop lists. So it is assumed that
141  // PropLists does not shrink its table as the number of values goes down
142  C4PropListNumbered *const* p_next = PropLists.First(), *const* p;
143  while ((p = p_next))
144  {
145  p_next = PropLists.Next(p);
146  // check *p since it might have been deleted by clearing the previous prop list
147  if (*p) (*p)->Clear();
148  }
149 }
void Clear()
Definition: C4PropList.h:66
T const * Next(T const *p) const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::ClearRefs ( )
inlineprotectedinherited

Definition at line 156 of file C4PropList.h.

References C4Value::Set0().

Referenced by C4Object::AssignRemoval().

156 { while (FirstRef) FirstRef->Set0(); }
void Set0()
Definition: C4Value.h:336

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::ClearShelve ( )
staticinherited

Definition at line 131 of file C4PropList.cpp.

References C4PropListNumbered::ShelvedPropLists.

Referenced by C4Game::Clear().

132 {
133  // cleanup shelve - used in game clear, un unsuccessful section load, etc.
134  ShelvedPropLists.clear();
135 }
static std::vector< C4PropListNumbered * > ShelvedPropLists
Definition: C4PropList.h:237

Here is the caller graph for this function:

void C4MapScriptLayer::ClearSurface ( )

Definition at line 475 of file C4MapScript.cpp.

Referenced by CreateSurface(), and ~C4MapScriptLayer().

476 {
477  fg_surface.reset(); bg_surface.reset();
478  // if there is no surface, width and height parameters are undefined. no need to update them.
479 }

Here is the caller graph for this function:

void C4PropListNumbered::CompileFunc ( StdCompiler pComp,
C4ValueNumbers numbers 
)
inherited

Definition at line 180 of file C4PropList.cpp.

References C4Set< T >::Add(), C4PropList::CompileFunc(), StdCompiler::excCorrupt(), C4Set< T >::Get(), StdCompiler::isDeserializer(), C4PropListNumbered::Number, C4PropListNumbered::PropLists, StdCompiler::SEP_SEP2, StdCompiler::Separator(), and StdCompiler::Value().

Referenced by C4Effect::CompileFunc().

181 {
182  int32_t n = Number;
183  pComp->Value(n);
185  C4PropList::CompileFunc(pComp, numbers);
186  if (pComp->isDeserializer())
187  {
188  if (PropLists.Get(n))
189  {
190  pComp->excCorrupt("multiple PropLists with Number %d", n);
191  return;
192  }
193  // Once this proplist has a Number, it has to be in PropLists. See the destructor below.
194  Number = n;
195  PropLists.Add(this);
196  }
197 }
virtual bool Separator(Sep eSep=SEP_SEP)
Definition: StdCompiler.h:119
void CompileFunc(StdCompiler *pComp, C4ValueNumbers *)
Definition: C4PropList.cpp:397
void excCorrupt(const char *szMessage,...)
Definition: StdCompiler.h:249
T * Add(T const &e)
T & Get(H e) const
void Value(const T &rStruct)
Definition: StdCompiler.h:161
virtual bool isDeserializer()
Definition: StdCompiler.h:53
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236

Here is the call graph for this function:

Here is the caller graph for this function:

void C4MapScriptLayer::ConvertSkyToTransparent ( )

Definition at line 491 of file C4MapScript.cpp.

References C4M_MaxTexIndex, and HasSurface().

492 {
493  // Convert all sky (color==C4M_MaxTexIndex) pixels to transparent (color==0)
494  // Needed because C4Landscape map zoom assumes sky to be 0
495  if (!HasSurface()) return;
496  for (int32_t y=0; y<fg_surface->Hgt; ++y)
497  {
498  for (int32_t x=0; x<fg_surface->Wdt; ++x)
499  {
500  if (fg_surface->_GetPix(x,y) == C4M_MaxTexIndex)
501  fg_surface->_SetPix(x,y, 0);
502 
503  if (bg_surface->_GetPix(x,y) == C4M_MaxTexIndex)
504  bg_surface->_SetPix(x,y, 0);
505  }
506  }
507 }
bool HasSurface() const
Definition: C4MapScript.h:296
const int C4M_MaxTexIndex
Definition: C4Constants.h:51

Here is the call graph for this function:

bool C4MapScriptLayer::CreateSurface ( int32_t  wdt,
int32_t  hgt 
)

Definition at line 459 of file C4MapScript.cpp.

References ClearSurface(), and UpdateSurfaceSize().

Referenced by C4MapScriptMap::CreateLayer().

460 {
461  // Create new surface of given size. Surface is filled with color 0
462  ClearSurface();
463  if (wdt<=0 || hgt<=0) return false;
464  fg_surface = std::make_unique<CSurface8>();
465  bg_surface = std::make_unique<CSurface8>();
466  if (!fg_surface->Create(wdt, hgt) || !bg_surface->Create(wdt, hgt))
467  {
468  ClearSurface();
469  return false;
470  }
472  return true;
473 }
void UpdateSurfaceSize()

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool C4PropList::Delete ( )
inlinevirtualinherited

Reimplemented in C4PropListStaticMember, C4PropListStatic, C4PropListScript, and C4Def.

Definition at line 90 of file C4PropList.h.

Referenced by C4ScriptHost::DeleteOwnedPropLists().

90 { return false; }

Here is the caller graph for this function:

void C4PropList::Denumerate ( C4ValueNumbers numbers)
virtualinherited

Reimplemented in C4Object, C4AulScriptEngine, and C4Effect.

Definition at line 350 of file C4PropList.cpp.

References C4Value::Denumerate(), C4Set< T >::First(), C4Set< T >::Next(), C4PropList::RemoveCyclicPrototypes(), and C4Property::Value.

Referenced by C4Value::Denumerate(), and C4Object::Denumerate().

351 {
352  const C4Property * p = Properties.First();
353  while (p)
354  {
355  const_cast<C4Value &>(p->Value).Denumerate(numbers);
356  p = Properties.Next(p);
357  }
358  prototype.Denumerate(numbers);
360 }
void RemoveCyclicPrototypes()
Definition: C4PropList.cpp:430
C4Value Value
Definition: C4PropList.h:55
virtual void Denumerate(C4ValueNumbers *)
Definition: C4PropList.cpp:350
void Denumerate(C4ValueNumbers *)
Definition: C4Value.cpp:251
T const * Next(T const *p) const
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

Iterator C4PropList::end ( )
inlineinherited

Definition at line 206 of file C4PropList.h.

Referenced by C4ParticleProperties::Set().

206 { return Iterator(); }

Here is the caller graph for this function:

C4String * C4PropList::EnumerateOwnFuncs ( C4String prev = nullptr) const
inherited

Definition at line 936 of file C4PropList.cpp.

References C4Set< T >::First(), C4Set< T >::Get(), C4Value::getFunction(), C4Property::Key, C4Set< T >::Next(), and C4Property::Value.

937 {
938  const C4Property * p = prev ? Properties.Next(&Properties.Get(prev)) : Properties.First();
939  while (p)
940  {
941  if (p->Value.getFunction())
942  return p->Key;
943  p = Properties.Next(p);
944  }
945  return nullptr;
946 }
C4Value Value
Definition: C4PropList.h:55
T & Get(H e) const
T const * Next(T const *p) const
C4String * Key
Definition: C4PropList.h:54
T const * First() const
C4AulFunc * getFunction() const
Definition: C4Value.h:119

Here is the call graph for this function:

bool C4MapScriptLayer::Fill ( uint8_t  fg,
uint8_t  bg,
const C4Rect rcBounds,
const C4MapScriptAlgo algo 
)

Definition at line 515 of file C4MapScript.cpp.

References HasSurface(), C4Rect::Hgt, C4Rect::Wdt, C4Rect::x, and C4Rect::y.

516 {
517  // safety
518  uint8_t temp_fg, temp_bg;
519  if (!HasSurface()) return false;
520  assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt);
521  // set all non-masked pixels within bounds that fulfill algo
522  for (int32_t y=rcBounds.y; y<rcBounds.y+rcBounds.Hgt; ++y)
523  for (int32_t x=rcBounds.x; x<rcBounds.x+rcBounds.Wdt; ++x)
524  if (!algo || (*algo)(x,y,temp_fg,temp_bg))
525  {
526  fg_surface->_SetPix(x,y,fg);
527  bg_surface->_SetPix(x,y,bg);
528  }
529 
530  return true;
531 }
bool HasSurface() const
Definition: C4MapScript.h:296
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30

Here is the call graph for this function:

bool C4MapScriptLayer::FindPos ( const C4Rect search_rect,
const C4MapScriptMatTexMask mask,
int32_t *  out_x,
int32_t *  out_y,
int32_t  max_tries 
)

Definition at line 589 of file C4MapScript.cpp.

References HasSurface(), C4Rect::Hgt, Random(), C4Rect::Wdt, C4Rect::x, and C4Rect::y.

590 {
591  // safety
592  if (!HasSurface() || search_rect.Wdt<=0 || search_rect.Hgt<=0) return false;
593  // Search random positions
594  for (int32_t i=0; i<max_tries; ++i)
595  {
596  int32_t x=search_rect.x + Random(search_rect.Wdt);
597  int32_t y=search_rect.y + Random(search_rect.Hgt);
598  if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; }
599  }
600  // Nothing found yet: Start at a random position and search systemically
601  // (this guantuess to find a pixel if there is one, but favours border pixels)
602  int32_t sx=search_rect.x + Random(search_rect.Wdt);
603  int32_t sy=search_rect.y + Random(search_rect.Hgt);
604  for (int32_t x = sx; x < search_rect.x + search_rect.Wdt; ++x)
605  if (col_mask(fg_surface->_GetPix(x,sy), bg_surface->_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; }
606  for (int32_t y = sy + 1; y<search_rect.y + search_rect.Hgt; ++y)
607  for (int32_t x = search_rect.x; x < search_rect.x + search_rect.Wdt; ++x)
608  if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; }
609  for (int32_t y = search_rect.y; y<sy; ++y)
610  for (int32_t x = search_rect.x; x < search_rect.x + search_rect.Wdt; ++x)
611  if (col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x,y))) { *out_x=x; *out_y=y; return true; }
612  for (int32_t x = search_rect.x; x<sx; ++x)
613  if (col_mask(fg_surface->_GetPix(x,sy), bg_surface->_GetPix(x,sy))) { *out_x=x; *out_y=sy; return true; }
614  // Nothing found
615  return false;
616 }
uint32_t Random()
Definition: C4Random.cpp:43
bool HasSurface() const
Definition: C4MapScript.h:296
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30

Here is the call graph for this function:

void C4PropList::Freeze ( )
inlineinherited

Definition at line 128 of file C4PropList.h.

Referenced by C4PropList::FreezeAndMakeStaticRecursively().

128 { constant = true; }

Here is the caller graph for this function:

C4PropListStatic * C4PropList::FreezeAndMakeStaticRecursively ( std::vector< C4Value > *  prop_lists,
const C4PropListStatic parent = nullptr,
C4String key = nullptr 
)
inherited

Definition at line 303 of file C4PropList.cpp.

References C4VPropList(), C4PropList::Freeze(), C4PropList::FreezeAndMakeStaticRecursively(), C4PropListStatic::GetParent(), C4PropListStatic::GetParentKeyName(), C4PropList::GetPropertyByS(), C4Value::getPropList(), C4PropList::GetPrototype(), C4PropList::GetSortedLocalProperties(), C4PropList::IsStatic(), C4PropList::NewStatic(), C4Value::SetPropList(), and C4PropList::Status.

Referenced by C4PropList::FreezeAndMakeStaticRecursively(), and C4AulScriptEngine::Link().

304 {
305  Freeze();
306  // Already static?
307  C4PropListStatic *this_static = IsStatic();
308  if (!this_static)
309  {
310  // Make self static by creating a copy and replacing all references
311  this_static = NewStatic(GetPrototype(), parent, key);
312  this_static->Properties.Swap(&Properties); // grab properties
313  this_static->Status = Status;
314  C4Value holder = C4VPropList(this);
315  while (FirstRef && FirstRef->NextRef)
316  {
317  C4Value *ref = FirstRef;
318  if (ref == &holder) ref = ref->NextRef;
319  ref->SetPropList(this_static);
320  }
321  // store reference
322  if (prop_lists)
323  {
324  prop_lists->push_back(C4VPropList(this_static));
325  }
326  // "this" should be deleted as holder goes out of scope
327  }
328  // Iterate over sorted list of elements to make static
329  // Must iterate over sorted list because the order must be defined, just in case it's a network game
330  // and a non-static child proplist is available through different paths it should still get the same name
331  auto prop_names = this_static->GetSortedLocalProperties(false);
332  for (auto prop_name : prop_names)
333  {
334  C4Value child_val;
335  this_static->GetPropertyByS(prop_name, &child_val);
336  C4PropList *child_proplist = child_val.getPropList();
337  if (child_proplist)
338  {
339  // Avoid infinite recursion: Only freeze into unfrozen children and "true" static children
340  C4PropListStatic *child_static = child_proplist->IsStatic();
341  if (!child_static || (child_static->GetParent() == this_static && child_static->GetParentKeyName() == prop_name))
342  {
343  child_proplist->FreezeAndMakeStaticRecursively(prop_lists, this_static, prop_name);
344  }
345  }
346  }
347  return this_static;
348 }
C4PropListStatic * FreezeAndMakeStaticRecursively(std::vector< C4Value > *prop_lists, const C4PropListStatic *parent=nullptr, C4String *key=nullptr)
Definition: C4PropList.cpp:303
void Freeze()
Definition: C4PropList.h:128
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:85
C4String * GetParentKeyName()
Definition: C4PropList.h:271
std::vector< C4String * > GetSortedLocalProperties(bool add_prototype=true) const
Definition: C4PropList.cpp:576
virtual bool GetPropertyByS(const C4String *k, C4Value *pResult) const
Definition: C4PropList.cpp:753
C4Value C4VPropList(C4PropList *p)
Definition: C4Value.h:245
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
int32_t Status
Definition: C4PropList.h:168
static C4PropListStatic * NewStatic(C4PropList *prototype, const C4PropListStatic *parent, C4String *key)
Definition: C4PropList.cpp:70
void SetPropList(C4PropList *PropList)
Definition: C4Value.h:141
const C4PropListStatic * GetParent() const
Definition: C4PropList.h:270
C4PropList * getPropList() const
Definition: C4Value.h:116

Here is the call graph for this function:

Here is the caller graph for this function:

uint8_t C4MapScriptLayer::GetBackPix ( int32_t  x,
int32_t  y,
uint8_t  outside_col 
) const
inline

Definition at line 306 of file C4MapScript.h.

References HasSurface().

Referenced by IsPixMasked(), and C4MapScriptAlgoLayer::operator()().

306 { return (!HasSurface()||x<0||y<0||x>=bg_surface->Wdt||y>=bg_surface->Hgt) ? outside_col : bg_surface->_GetPix(x,y); }
bool HasSurface() const
Definition: C4MapScript.h:296

Here is the call graph for this function:

Here is the caller graph for this function:

C4Rect C4MapScriptLayer::GetBounds ( ) const

Definition at line 509 of file C4MapScript.cpp.

Referenced by FnParRect().

510 {
511  // Return bounding rectangle of surface. Surface always starts at 0,0.
512  return fg_surface ? C4Rect(0,0,fg_surface->Wdt,fg_surface->Hgt) : C4Rect();
513 }
Definition: C4Rect.h:27

Here is the caller graph for this function:

C4PropList * C4PropListNumbered::GetByNumber ( int32_t  iNumber)
staticinherited

Definition at line 75 of file C4PropList.cpp.

References C4Set< T >::Get(), and C4PropListNumbered::PropLists.

Referenced by C4Value::Denumerate(), and C4GameObjects::ObjectPointer().

76 {
77  return PropLists.Get(iNumber);
78 }
T & Get(H e) const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236

Here is the call graph for this function:

Here is the caller graph for this function:

C4Def const * C4PropList::GetDef ( ) const
virtualinherited

Reimplemented in C4Def.

Definition at line 681 of file C4PropList.cpp.

References C4PropList::GetDef(), and C4PropList::GetPrototype().

Referenced by C4Value::_getDef(), ConstructionCheck(), C4Game::CreateObject(), C4Game::CreateObjectConstruction(), C4AulExec::DirectExec(), C4GameMessage::Draw(), C4Game::DrawPropListSpecImage(), C4AulExec::FnTranslate(), C4PropList::GetDef(), C4Value::getDef(), C4GameMessage::Init(), C4Object::Init(), C4FindObjectDef::IsImpossible(), C4PropList::operator==(), C4ScriptHost::Parse(), C4AulParse::Parse_Script(), C4Game::PlaceAnimal(), C4Game::PlaceVegetation(), and C4ScriptGuiWindowProperty::Set().

682 {
683  if (GetPrototype()) return GetPrototype()->GetDef();
684  return nullptr;
685 }
virtual C4Def const * GetDef() const
Definition: C4PropList.cpp:681
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

Here is the caller graph for this function:

C4Def * C4PropList::GetDef ( )
virtualinherited

Reimplemented in C4Def.

Definition at line 675 of file C4PropList.cpp.

References C4PropList::GetDef(), and C4PropList::GetPrototype().

676 {
677  if (GetPrototype()) return GetPrototype()->GetDef();
678  return nullptr;
679 }
virtual C4Def const * GetDef() const
Definition: C4PropList.cpp:681
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

C4Effect * C4PropList::GetEffect ( )
virtualinherited

Reimplemented in C4Effect.

Definition at line 705 of file C4PropList.cpp.

References C4PropList::GetEffect(), and C4PropList::GetPrototype().

Referenced by C4ValueConv< C4Effect * >::_FromC4V(), C4Value::GetDataString(), and C4PropList::GetEffect().

706 {
707  if (GetPrototype()) return GetPrototype()->GetEffect();
708  return nullptr;
709 }
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
virtual C4Effect * GetEffect()
Definition: C4PropList.cpp:705

Here is the call graph for this function:

Here is the caller graph for this function:

static int32_t C4PropListNumbered::GetEnumerationIndex ( )
inlinestaticinherited

Definition at line 225 of file C4PropList.h.

References C4PropListNumbered::EnumerationIndex.

Referenced by C4Game::NewObject(), C4EditCursor::PerformDuplication(), and C4ControlSyncCheck::Set().

225 { return EnumerationIndex; }
static int32_t EnumerationIndex
Definition: C4PropList.h:238

Here is the caller graph for this function:

C4AulFunc* C4PropList::GetFunc ( C4PropertyName  k) const
inlineinherited

Definition at line 105 of file C4PropList.h.

References C4StringTable::P, and Strings.

Referenced by C4Effect::AssignCallbackFunctions(), C4PropList::Call(), C4Effect::CallDamage(), C4Value::CompileFunc(), C4ScriptHost::CopyPropList(), C4Effect::DoCall(), C4PropList::GetFunc(), C4Effect::Init(), C4MapScriptHost::InitializeMap(), C4Object::PutAwayUnusedObject(), C4MaterialReaction::ResolveScriptFuncs(), C4MCOverlay::SetField(), C4AulCompiler::PreparseAstVisitor::visit(), and C4AulCompiler::CodegenAstVisitor::visit().

106  { return GetFunc(&Strings.P[k]); }
C4String P[P_LAST]
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:105
C4StringTable Strings
Definition: C4Globals.cpp:42

Here is the caller graph for this function:

C4AulFunc * C4PropList::GetFunc ( C4String k) const
inherited

Definition at line 799 of file C4PropList.cpp.

References C4Set< T >::Get(), C4PropList::GetFunc(), C4Value::getFunction(), C4PropList::GetPrototype(), C4Set< T >::Has(), and C4Property::Value.

800 {
801  assert(k);
802  if (Properties.Has(k))
803  {
804  return Properties.Get(k).Value.getFunction();
805  }
806  if (GetPrototype())
807  {
808  return GetPrototype()->GetFunc(k);
809  }
810  return nullptr;
811 }
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:105
T & Get(H e) const
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
C4AulFunc * getFunction() const
Definition: C4Value.h:119

Here is the call graph for this function:

C4AulFunc * C4PropList::GetFunc ( const char *  k) const
inherited

Definition at line 813 of file C4PropList.cpp.

References C4StringTable::FindString(), C4PropList::GetFunc(), s, and Strings.

814 {
815  assert(s);
816  if (s[0] == '~') ++s;
817  C4String * k = Strings.FindString(s);
818  // this string is entirely unused
819  if (!k)
820  return nullptr;
821  return GetFunc(k);
822 }
C4String * FindString(const char *strString) const
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:105
C4StringTable Strings
Definition: C4Globals.cpp:42
#define s

Here is the call graph for this function:

int32_t C4MapScriptLayer::GetHgt ( ) const
inline

Definition at line 302 of file C4MapScript.h.

302 { return fg_surface ? fg_surface->Hgt : 0; }
class C4MapScriptMap* C4MapScriptLayer::GetMap ( )
inline

Definition at line 281 of file C4MapScript.h.

References map.

281 { return map; }
class C4MapScriptMap * map
Definition: C4MapScript.h:275
C4MapScriptLayer* C4MapScriptLayer::GetMapScriptLayer ( )
inlineoverridevirtual

Reimplemented from C4PropList.

Definition at line 280 of file C4MapScript.h.

280 { return this; }
class C4MapScriptMap * C4PropList::GetMapScriptMap ( )
virtualinherited

Reimplemented in C4MapScriptMap.

Definition at line 693 of file C4PropList.cpp.

References C4PropList::GetMapScriptMap(), and C4PropList::GetPrototype().

Referenced by C4PropList::GetMapScriptMap().

694 {
695  if (GetPrototype()) return GetPrototype()->GetMapScriptMap();
696  return nullptr;
697 }
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
virtual class C4MapScriptMap * GetMapScriptMap()
Definition: C4PropList.cpp:693

Here is the call graph for this function:

Here is the caller graph for this function:

const char * C4PropList::GetName ( ) const
virtualinherited

Reimplemented in C4PropListStatic.

Definition at line 645 of file C4PropList.cpp.

References C4String::GetCStr(), C4PropList::GetPropertyStr(), P_Name, and s.

Referenced by C4Object::ActivateMenu(), C4Effect::AssignCallbackFunctions(), C4Effect::C4Effect(), C4PropertyPath::C4PropertyPath(), C4Object::CanConcatPictureWith(), C4FindObjectAction::Check(), C4Game::CheckObjectEnumeration(), C4Effect::ClearAll(), ConstructionCheck(), C4Effect::DoCall(), C4EditCursor::DoContextMenu(), C4ObjectMenu::DoRefillInternal(), C4Object::Draw(), C4ScriptGuiWindow::Draw(), C4Game::DrawCrewOverheadText(), C4Object::ExecLife(), C4Effect::Get(), C4Effect::GetCount(), C4Object::GetDataString(), C4Object::GetInfoString(), C4Effect::Init(), C4Effect::Kill(), C4Object::Lift(), C4Game::NewObject(), ObjectComDig(), C4Object::Promote(), C4Object::Push(), C4Object::SetAction(), C4Object::SetOCF(), C4Effect::TempRemoveUpperEffects(), C4Object::UpdateOCF(), and C4EditCursor::UpdateStatusBar().

646 {
648  if (!s) return "";
649  return s->GetCStr();
650 }
const char * GetCStr() const
Definition: C4StringTable.h:49
C4String * GetPropertyStr(C4PropertyName k) const
Definition: C4PropList.cpp:771
#define s

Here is the call graph for this function:

Here is the caller graph for this function:

C4Object * C4PropList::GetObject ( )
virtualinherited

Reimplemented in C4Object.

Definition at line 663 of file C4PropList.cpp.

References C4PropList::GetObject(), and C4PropList::GetPrototype().

Referenced by C4Value::_getObj(), C4EditCursor::AddToSelection(), C4PropertyPath::C4PropertyPath(), C4ScriptGuiWindowAction::ClearPointers(), ThisImpl< C4Object >::Conv(), C4GameMessage::Draw(), C4ScriptGuiWindowAction::ExecuteCommand(), FnGetEffectsFor(), C4Value::GetDataString(), C4Value::getObj(), C4PropList::GetObject(), C4GameMessage::Init(), Object(), C4GameObjects::ObjectPointer(), C4EditCursor::RemoveFromSelection(), and C4ScriptGuiWindowProperty::Set().

664 {
665  if (GetPrototype()) return GetPrototype()->GetObject();
666  return nullptr;
667 }
virtual C4Object * GetObject()
Definition: C4PropList.cpp:663
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

Here is the caller graph for this function:

C4Object const * C4PropList::GetObject ( ) const
virtualinherited

Reimplemented in C4Object.

Definition at line 669 of file C4PropList.cpp.

References C4PropList::GetObject(), and C4PropList::GetPrototype().

670 {
671  if (GetPrototype()) return GetPrototype()->GetObject();
672  return nullptr;
673 }
virtual C4Object * GetObject()
Definition: C4PropList.cpp:663
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

uint8_t C4MapScriptLayer::GetPix ( int32_t  x,
int32_t  y,
uint8_t  outside_col 
) const
inline

Definition at line 305 of file C4MapScript.h.

References HasSurface().

Referenced by IsPixMasked(), and C4MapScriptAlgoLayer::operator()().

305 { return (!HasSurface()||x<0||y<0||x>=fg_surface->Wdt||y>=fg_surface->Hgt) ? outside_col : fg_surface->_GetPix(x,y); }
bool HasSurface() const
Definition: C4MapScript.h:296

Here is the call graph for this function:

Here is the caller graph for this function:

int32_t C4MapScriptLayer::GetPixCount ( const C4Rect rcBounds,
const C4MapScriptMatTexMask mask 
)

Definition at line 576 of file C4MapScript.cpp.

References HasSurface(), C4Rect::Hgt, C4Rect::Wdt, C4Rect::x, and C4Rect::y.

577 {
578  // safety
579  if (!HasSurface()) return 0;
580  assert(rcBounds.x>=0 && rcBounds.y>=0 && rcBounds.x+rcBounds.Wdt<=fg_surface->Wdt && rcBounds.y+rcBounds.Hgt<=fg_surface->Hgt);
581  // count matching pixels in rect
582  int32_t count = 0;
583  for (int32_t y=rcBounds.y; y<rcBounds.y+rcBounds.Hgt; ++y)
584  for (int32_t x=rcBounds.x; x<rcBounds.x+rcBounds.Wdt; ++x)
585  count += col_mask(fg_surface->_GetPix(x,y), bg_surface->_GetPix(x, y));
586  return count;
587 }
bool HasSurface() const
Definition: C4MapScript.h:296
int32_t Wdt
Definition: C4Rect.h:30
int32_t y
Definition: C4Rect.h:30
int32_t x
Definition: C4Rect.h:30
int32_t Hgt
Definition: C4Rect.h:30

Here is the call graph for this function:

C4ValueArray * C4PropList::GetProperties ( ) const
virtualinherited

Reimplemented in C4Object, and C4Effect.

Definition at line 910 of file C4PropList.cpp.

References a, C4V_String, C4VString(), C4Set< T >::First(), C4PropList::GetProperties(), C4PropList::GetPrototype(), C4ValueArray::GetSize(), C4Set< T >::GetSize(), C4Property::Key, C4Set< T >::Next(), and C4ValueArray::SetSize().

Referenced by C4ScriptGuiWindow::CreateFromPropList(), C4PropList::GetProperties(), C4Effect::GetProperties(), C4Object::GetProperties(), and C4ScriptGuiWindowProperty::Set().

911 {
912  C4ValueArray * a;
913  int i;
914  if (GetPrototype())
915  {
916  a = GetPrototype()->GetProperties();
917  i = a->GetSize();
918  a->SetSize(i + Properties.GetSize());
919  }
920  else
921  {
922  a = new C4ValueArray(Properties.GetSize());
923  i = 0;
924  }
925  const C4Property * p = Properties.First();
926  while (p)
927  {
928  assert(p->Key != nullptr && "Proplist key is nullpointer");
929  (*a)[i++] = C4VString(p->Key);
930  assert(((*a)[i - 1].GetType() == C4V_String) && "Proplist key is non-string");
931  p = Properties.Next(p);
932  }
933  return a;
934 }
#define a
T const * Next(T const *p) const
unsigned int GetSize() const
virtual C4ValueArray * GetProperties() const
Definition: C4PropList.cpp:910
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
void SetSize(int32_t inSize)
int32_t GetSize() const
Definition: C4ValueArray.h:36
C4String * Key
Definition: C4PropList.h:54
C4Value C4VString(C4String *pStr)
Definition: C4Value.h:246
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4PropList::GetProperty ( C4PropertyName  k,
C4Value pResult 
) const
inlineinherited

Definition at line 101 of file C4PropList.h.

References C4PropList::GetPropertyByS(), C4StringTable::P, and Strings.

Referenced by C4MapScriptAlgoFilter::C4MapScriptAlgoFilter(), C4MapScriptAlgoModifier::C4MapScriptAlgoModifier(), C4MapScriptAlgoPolygon::C4MapScriptAlgoPolygon(), C4MapScriptAlgoRndChecker::C4MapScriptAlgoRndChecker(), C4FindObjectProcedure::Check(), C4DefGraphics::Draw(), C4GraphicsOverlay::Draw(), C4Object::DrawFaceImpl(), C4Object::DrawLine(), C4Object::ExecAction(), C4Object::GetAction(), C4Def::GetActionByName(), C4Object::GetDragImage(), C4Object::GetParallaxity(), C4MapScriptAlgo::GetXYProps(), C4GameMessage::Init(), C4Object::IsVisible(), C4ScriptUniform::Push(), C4Object::SetAction(), C4Object::SetActionByName(), and C4GraphicsOverlay::UpdateFacet().

102  { return GetPropertyByS(&Strings.P[k], pResult); }
C4String P[P_LAST]
C4StringTable Strings
Definition: C4Globals.cpp:42
virtual bool GetPropertyByS(const C4String *k, C4Value *pResult) const
Definition: C4PropList.cpp:753

Here is the call graph for this function:

Here is the caller graph for this function:

C4ValueArray * C4PropList::GetPropertyArray ( C4PropertyName  n) const
inherited

Definition at line 785 of file C4PropList.cpp.

References C4Set< T >::Get(), C4Value::getArray(), C4PropList::GetPropertyArray(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, Strings, and C4Property::Value.

Referenced by C4EditCursor::DoContextMenu(), C4PropList::GetPropertyArray(), and C4FoWLight::Update().

786 {
787  C4String * k = &Strings.P[n];
788  if (Properties.Has(k))
789  {
790  return Properties.Get(k).Value.getArray();
791  }
792  if (GetPrototype())
793  {
794  return GetPrototype()->GetPropertyArray(n);
795  }
796  return nullptr;
797 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
C4ValueArray * getArray() const
Definition: C4Value.h:118
C4ValueArray * GetPropertyArray(C4PropertyName n) const
Definition: C4PropList.cpp:785

Here is the call graph for this function:

Here is the caller graph for this function:

int32_t C4PropList::GetPropertyBool ( C4PropertyName  n,
bool  default_val = false 
) const
inherited

Definition at line 868 of file C4PropList.cpp.

References C4Set< T >::Get(), C4Value::getBool(), C4PropList::GetPropertyBool(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, Strings, and C4Property::Value.

Referenced by C4PropList::GetPropertyBool().

869 {
870  C4String * k = &Strings.P[n];
871  if (Properties.Has(k))
872  {
873  return Properties.Get(k).Value.getBool();
874  }
875  if (GetPrototype())
876  {
877  return GetPrototype()->GetPropertyBool(n, default_val);
878  }
879  return default_val;
880 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
bool getBool() const
Definition: C4Value.h:113
int32_t GetPropertyBool(C4PropertyName n, bool default_val=false) const
Definition: C4PropList.cpp:868
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4PropList::GetPropertyByS ( const C4String k,
C4Value pResult 
) const
virtualinherited

Reimplemented in C4Object, and C4Effect.

Definition at line 753 of file C4PropList.cpp.

References C4Set< T >::Get(), C4PropList::GetPropertyByS(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, P_Prototype, Strings, and C4Property::Value.

Referenced by C4Value::CompileFunc(), C4ScriptGuiWindow::CreateFromPropList(), C4PropList::FreezeAndMakeStaticRecursively(), C4Def::GetActionByName(), C4DefList::GetAllDefs(), C4PropList::GetProperty(), C4PropList::GetPropertyByS(), C4Effect::GetPropertyByS(), C4Object::GetPropertyByS(), C4Game::GetTranslatedString(), C4ValueArraySortPropertycomp::operator()(), C4ScriptGuiWindowProperty::Set(), C4Object::SetActionByName(), C4PropList::ThawRecursively(), C4ScriptHost::UnlinkOwnedFunctions(), C4GraphicsOverlay::UpdateFacet(), and C4AulCompiler::ConstexprEvaluator::visit().

754 {
755  if (Properties.Has(k))
756  {
757  *pResult = Properties.Get(k).Value;
758  return true;
759  }
760  else if (k == &Strings.P[P_Prototype])
761  {
762  *pResult = prototype;
763  return true;
764  }
765  else if(GetPrototype())
766  return GetPrototype()->GetPropertyByS(k, pResult);
767  else
768  return false;
769 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
virtual bool GetPropertyByS(const C4String *k, C4Value *pResult) const
Definition: C4PropList.cpp:753
C4PropList * GetPrototype() const
Definition: C4PropList.h:81

Here is the call graph for this function:

Here is the caller graph for this function:

int32_t C4PropList::GetPropertyInt ( C4PropertyName  k,
int32_t  default_val = 0 
) const
inherited

Definition at line 882 of file C4PropList.cpp.

References C4Set< T >::Get(), C4Value::getInt(), C4PropList::GetPropertyInt(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, Strings, and C4Property::Value.

Referenced by C4MouseControl::ButtonUpDragScript(), C4MapScriptAlgoEllipsis::C4MapScriptAlgoEllipsis(), C4MapScriptAlgoLines::C4MapScriptAlgoLines(), C4MapScriptAlgoOffset::C4MapScriptAlgoOffset(), C4MapScriptAlgoPolygon::C4MapScriptAlgoPolygon(), C4MapScriptAlgoRect::C4MapScriptAlgoRect(), C4MapScriptAlgoRndChecker::C4MapScriptAlgoRndChecker(), C4MapScriptAlgoRotate::C4MapScriptAlgoRotate(), C4MapScriptAlgoScale::C4MapScriptAlgoScale(), C4MapScriptAlgoTurbulence::C4MapScriptAlgoTurbulence(), C4Object::Contact(), C4Object::ContactAction(), C4Object::DoBreath(), C4Object::DoEnergy(), C4Object::DoMovement(), C4MouseControl::DragNone(), C4Object::Draw(), C4Object::DrawActionFace(), C4Game::DrawPropListSpecImage(), C4Object::DrawTopFace(), C4Command::Enter(), C4Object::ExecAction(), C4Object::ExecLife(), C4Object::ExecMovement(), C4ValueProviderAction::Execute(), C4Command::Exit(), C4Command::FlightControl(), FnParAlgo(), C4SoundModifierList::Get(), C4SoundModifier::GetBoolProp(), C4SoundModifier::GetFloatProp(), C4Def::GetPlane(), C4PropList::GetPropertyInt(), C4Object::GetSolidMaskPlane(), C4Object::Init(), C4Object::IsVisible(), C4Command::MoveTo(), ObjectActionThrow(), ObjectComDrop(), ObjectComJump(), C4Game::PlaceAnimal(), C4Game::PlaceVegetation(), C4Object::Push(), C4Command::Put(), C4Object::ResetProperty(), C4Object::SetAction(), C4Object::SetDir(), C4Object::SetOCF(), C4Object::SetPhase(), C4Object::SideBounds(), C4Command::Throw(), C4Object::UpdateActionFace(), C4MouseControl::UpdateCursorTarget(), C4GraphicsOverlay::UpdateFacet(), C4Object::UpdateFlipDir(), C4Object::UpdateOCF(), and C4Object::VerticalBounds().

883 {
884  C4String * k = &Strings.P[n];
885  if (Properties.Has(k))
886  {
887  return Properties.Get(k).Value.getInt();
888  }
889  if (GetPrototype())
890  {
891  return GetPrototype()->GetPropertyInt(n, default_val);
892  }
893  return default_val;
894 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
int32_t getInt() const
Definition: C4Value.h:112
int32_t GetPropertyInt(C4PropertyName k, int32_t default_val=0) const
Definition: C4PropList.cpp:882

Here is the call graph for this function:

Here is the caller graph for this function:

C4PropertyName C4PropList::GetPropertyP ( C4PropertyName  k) const
inherited

Definition at line 851 of file C4PropList.cpp.

References C4Set< T >::Get(), C4PropList::GetPropertyP(), C4PropList::GetPrototype(), C4Value::getStr(), C4Set< T >::Has(), C4StringTable::P, P_LAST, Strings, and C4Property::Value.

Referenced by C4Object::ContactAction(), C4Object::ExecAction(), C4Object::ExecMovement(), C4Object::GetProcedure(), C4PropList::GetPropertyP(), ObjectComDrop(), C4Object::SetAction(), C4Object::SideBounds(), and C4Object::VerticalBounds().

852 {
853  C4String * k = &Strings.P[n];
854  if (Properties.Has(k))
855  {
856  C4String * v = Properties.Get(k).Value.getStr();
857  if (v >= &Strings.P[0] && v < &Strings.P[P_LAST])
858  return C4PropertyName(v - &Strings.P[0]);
859  return P_LAST;
860  }
861  if (GetPrototype())
862  {
863  return GetPrototype()->GetPropertyP(n);
864  }
865  return P_LAST;
866 }
C4PropertyName GetPropertyP(C4PropertyName k) const
Definition: C4PropList.cpp:851
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
C4String * getStr() const
Definition: C4Value.h:117
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
C4PropertyName

Here is the call graph for this function:

Here is the caller graph for this function:

C4PropList * C4PropList::GetPropertyPropList ( C4PropertyName  k) const
inherited

Definition at line 896 of file C4PropList.cpp.

References C4Set< T >::Get(), C4PropList::GetPropertyPropList(), C4Value::getPropList(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, Strings, and C4Property::Value.

Referenced by C4MapScriptAlgoLayer::C4MapScriptAlgoLayer(), C4Game::DrawPropListSpecImage(), C4PropList::GetPropertyPropList(), and C4GameMessage::Init().

897 {
898  C4String * k = &Strings.P[n];
899  if (Properties.Has(k))
900  {
901  return Properties.Get(k).Value.getPropList();
902  }
903  if (GetPrototype())
904  {
905  return GetPrototype()->GetPropertyPropList(n);
906  }
907  return nullptr;
908 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
C4PropList * GetPropertyPropList(C4PropertyName k) const
Definition: C4PropList.cpp:896
C4PropList * getPropList() const
Definition: C4Value.h:116

Here is the call graph for this function:

Here is the caller graph for this function:

C4String * C4PropList::GetPropertyStr ( C4PropertyName  k) const
inherited

Definition at line 771 of file C4PropList.cpp.

References C4Set< T >::Get(), C4PropList::GetPropertyStr(), C4PropList::GetPrototype(), C4Value::getStr(), C4Set< T >::Has(), C4StringTable::P, Strings, and C4Property::Value.

Referenced by C4Game::DrawPropListSpecImage(), C4Object::ExecAction(), C4PropList::GetName(), C4PropListStatic::GetName(), C4PropList::GetPropertyStr(), C4Game::GetTranslatedString(), C4Object::SetAction(), C4Object::SetDir(), C4MouseControl::UpdateCursorTarget(), and C4GraphicsOverlay::UpdateFacet().

772 {
773  C4String * k = &Strings.P[n];
774  if (Properties.Has(k))
775  {
776  return Properties.Get(k).Value.getStr();
777  }
778  if (GetPrototype())
779  {
780  return GetPrototype()->GetPropertyStr(n);
781  }
782  return nullptr;
783 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
C4String * getStr() const
Definition: C4Value.h:117
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
C4String * GetPropertyStr(C4PropertyName k) const
Definition: C4PropList.cpp:771

Here is the call graph for this function:

Here is the caller graph for this function:

C4PropListNumbered * C4PropListNumbered::GetPropListNumbered ( )
overridevirtualinherited

Reimplemented from C4PropList.

Definition at line 175 of file C4PropList.cpp.

176 {
177  return this;
178 }
C4PropList* C4PropList::GetPrototype ( ) const
inlineinherited
std::vector< C4String * > C4PropList::GetSortedLocalProperties ( bool  add_prototype = true) const
inherited

Definition at line 576 of file C4PropList.cpp.

References C4Set< T >::GetSortedListOfElementPointers(), C4StringTable::P, P_Prototype, and Strings.

Referenced by C4PropList::FreezeAndMakeStaticRecursively(), and C4Game::GetTranslatedString().

577 {
578  // return property list without descending into prototype
579  std::list<const C4Property *> sorted_props = Properties.GetSortedListOfElementPointers();
580  std::vector< C4String * > result;
581  result.reserve(sorted_props.size() + add_prototype);
582  if (add_prototype) result.push_back(&::Strings.P[P_Prototype]); // implicit prototype for every prop list
583  for (auto p : sorted_props) result.push_back(p->Key);
584  return result;
585 }
C4String P[P_LAST]
std::list< const T * > GetSortedListOfElementPointers() const
C4StringTable Strings
Definition: C4Globals.cpp:42

Here is the call graph for this function:

Here is the caller graph for this function:

std::vector< C4String * > C4PropList::GetSortedLocalProperties ( const char *  prefix,
const C4PropList ignore_overridden 
) const
inherited

Definition at line 587 of file C4PropList.cpp.

References a, b, C4Set< T >::First(), C4String::GetCStr(), C4PropList::GetPrototype(), C4PropList::HasProperty(), C4Set< T >::Next(), C4StringTable::P, P_Prototype, and Strings.

588 {
589  // return property list without descending into prototype
590  // ignore properties that have been overridden by proplist given in ignore_overridden or any of its prototypes up to and excluding this
591  std::vector< C4String * > result;
592  for (const C4Property *pp = Properties.First(); pp; pp = Properties.Next(pp))
593  if (pp->Key != &::Strings.P[P_Prototype])
594  if (!prefix || pp->Key->GetData().BeginsWith(prefix))
595  {
596  // Override check
597  const C4PropList *check = ignore_overridden;
598  bool overridden = false;
599  if (check && check != this)
600  {
601  if (check->HasProperty(pp->Key)) { overridden = true; break; }
602  check = check->GetPrototype();
603  }
604  result.push_back(pp->Key);
605  }
606  // Sort
607  std::sort(result.begin(), result.end(), [](const C4String *a, const C4String *b) -> bool
608  {
609  return strcmp(a->GetCStr(), b->GetCStr()) < 0;
610  });
611  return result;
612 }
C4String P[P_LAST]
#define b
const char * GetCStr() const
Definition: C4StringTable.h:49
#define a
T const * Next(T const *p) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
bool HasProperty(C4String *k) const
Definition: C4PropList.h:118
T const * First() const

Here is the call graph for this function:

std::vector< C4String * > C4PropList::GetSortedProperties ( const char *  prefix,
C4PropList ignore_parent = nullptr 
) const
inherited

Definition at line 632 of file C4PropList.cpp.

References a, b, C4String::GetCStr(), and C4PropList::GetUnsortedProperties().

633 {
634  // Return property list with descending into prototype
635  // But do not include Prototype property
636  std::vector< C4String * > result = GetUnsortedProperties(prefix, ignore_parent);
637  // Sort
638  std::sort(result.begin(), result.end(), [](const C4String *a, const C4String *b) -> bool
639  {
640  return strcmp(a->GetCStr(), b->GetCStr()) < 0;
641  });
642  return result;
643 }
#define b
const char * GetCStr() const
Definition: C4StringTable.h:49
#define a
std::vector< C4String * > GetUnsortedProperties(const char *prefix, C4PropList *ignore_parent=nullptr) const
Definition: C4PropList.cpp:614

Here is the call graph for this function:

std::vector< C4String * > C4PropList::GetUnsortedProperties ( const char *  prefix,
C4PropList ignore_parent = nullptr 
) const
inherited

Definition at line 614 of file C4PropList.cpp.

References C4Set< T >::First(), C4PropList::GetPrototype(), C4Set< T >::Next(), C4StringTable::P, P_Prototype, and Strings.

Referenced by C4PropList::GetSortedProperties(), and C4PropList::ThawRecursively().

615 {
616  // Return property list with descending into prototype
617  // But do not include Prototype property
618  std::vector< C4String * > result;
619  const C4PropList *p = this;
620  do
621  {
622  for (const C4Property *pp = p->Properties.First(); pp; pp = p->Properties.Next(pp))
623  if (pp->Key != &::Strings.P[P_Prototype])
624  if (!prefix || pp->Key->GetData().BeginsWith(prefix))
625  result.push_back(pp->Key);
626  p = p->GetPrototype();
627  if (p == ignore_parent) break;
628  } while (p);
629  return result;
630 }
C4String P[P_LAST]
T const * Next(T const *p) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

int32_t C4MapScriptLayer::GetWdt ( ) const
inline

Definition at line 301 of file C4MapScript.h.

301 { return fg_surface ? fg_surface->Wdt : 0; }
bool C4PropList::HasProperty ( C4String k) const
inlineinherited

Definition at line 118 of file C4PropList.h.

References C4Set< T >::Has().

Referenced by C4PropList::GetSortedLocalProperties(), C4MapScriptAlgo::GetXYProps(), C4AulCompiler::PreparseAstVisitor::visit(), and C4AulCompiler::ConstantResolver::visit().

118 { return Properties.Has(k); }
bool Has(H e) const

Here is the call graph for this function:

Here is the caller graph for this function:

bool C4MapScriptLayer::HasSurface ( ) const
inline

Definition at line 296 of file C4MapScript.h.

Referenced by Blit(), ConvertSkyToTransparent(), Fill(), FindPos(), GetBackPix(), GetPix(), GetPixCount(), and SetPix().

296 { return fg_surface && fg_surface->Bits && bg_surface && bg_surface->Bits; }

Here is the caller graph for this function:

bool C4PropList::IsFrozen ( ) const
inlineinherited

Definition at line 131 of file C4PropList.h.

Referenced by C4PropList::ThawRecursively().

131 { return constant; }

Here is the caller graph for this function:

bool C4PropListNumbered::IsNumbered ( ) const
inlineoverridevirtualinherited

Reimplemented from C4PropList.

Definition at line 220 of file C4PropList.h.

220 { return true; }
bool C4MapScriptLayer::IsPixMasked ( int32_t  x,
int32_t  y 
) const
inline

Definition at line 308 of file C4MapScript.h.

References GetBackPix(), and GetPix().

308 { return GetPix(x,y,0) != 0 || GetBackPix(x,y,0) != 0; } // masking: If pixel is inside surface and not transparent
uint8_t GetBackPix(int32_t x, int32_t y, uint8_t outside_col) const
Definition: C4MapScript.h:306
uint8_t GetPix(int32_t x, int32_t y, uint8_t outside_col) const
Definition: C4MapScript.h:305

Here is the call graph for this function:

virtual class C4PropListStatic* C4PropList::IsStatic ( )
inlinevirtualinherited
const class C4PropListStatic* C4PropList::IsStatic ( ) const
inlineinherited

Definition at line 86 of file C4PropList.h.

References C4PropList::IsStatic().

Referenced by C4PropList::IsStatic().

86 { return const_cast<C4PropList*>(this)->IsStatic(); }
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:85

Here is the call graph for this function:

Here is the caller graph for this function:

C4PropList * C4PropList::New ( C4PropList prototype = nullptr)
staticinherited

Definition at line 64 of file C4PropList.cpp.

Referenced by CompileNewFunc(), FnPlaceVegetation(), C4ScriptGuiWindowProperty::ToC4Value(), C4ScriptGuiWindow::ToC4Value(), and C4AulCompiler::ConstexprEvaluator::visit().

65 {
66  C4PropList * r = new C4PropListScript(prototype);
67  return r;
68 }

Here is the caller graph for this function:

C4PropListStatic * C4PropList::NewStatic ( C4PropList prototype,
const C4PropListStatic parent,
C4String key 
)
staticinherited

Definition at line 70 of file C4PropList.cpp.

Referenced by C4PropListScen::C4PropListScen(), C4ScriptHost::CopyPropList(), C4PropList::FreezeAndMakeStaticRecursively(), C4ScenarioParameterDefs::RegisterScriptConstants(), and C4AulCompiler::ConstexprEvaluator::visit().

71 {
72  return new C4PropListStatic(prototype, parent, key);
73 }

Here is the caller graph for this function:

bool C4PropList::operator== ( const C4PropList b) const
inherited

Definition at line 379 of file C4PropList.cpp.

References C4Set< T >::First(), C4Set< T >::Get(), C4PropList::GetDef(), C4Set< T >::GetSize(), C4PropList::IsNumbered(), C4Property::Key, C4Set< T >::Next(), and C4Property::Value.

380 {
381  // every numbered proplist has a unique number and is only identical to itself
382  if (this == &b) return true;
383  if (IsNumbered() || b.IsNumbered()) return false;
384  if (Properties.GetSize() != b.Properties.GetSize()) return false;
385  if (GetDef() != b.GetDef()) return false;
386  const C4Property * p = Properties.First();
387  while (p)
388  {
389  const C4Property & bp = b.Properties.Get(p->Key);
390  if (!bp) return false;
391  if (p->Value != bp.Value) return false;
392  p = Properties.Next(p);
393  }
394  return true;
395 }
C4Value Value
Definition: C4PropList.h:55
virtual C4Def const * GetDef() const
Definition: C4PropList.cpp:681
T & Get(H e) const
T const * Next(T const *p) const
unsigned int GetSize() const
C4String * Key
Definition: C4PropList.h:54
virtual bool IsNumbered() const
Definition: C4PropList.h:88
T const * First() const

Here is the call graph for this function:

std::pair<std::unique_ptr<CSurface8>, std::unique_ptr<CSurface8> > C4MapScriptLayer::ReleaseSurfaces ( )
inline

Definition at line 292 of file C4MapScript.h.

293  {
294  return std::make_pair(std::move(fg_surface), std::move(bg_surface));
295  }
void C4PropList::RemoveCyclicPrototypes ( )
inherited

Definition at line 430 of file C4PropList.cpp.

References C4Value::getPropList(), and C4Value::Set0().

Referenced by C4PropList::Denumerate().

431 {
432  // clear any cyclic prototype chains
433  // Use prototype.getPropList() instead of GetPrototype() because denumeration might not be completed yet
434  for(C4PropList * it = prototype.getPropList(); it; it = it->prototype.getPropList())
435  if(it == this)
436  {
437  prototype.Set0();
438  }
439 }
void Set0()
Definition: C4Value.h:336
C4PropList * getPropList() const
Definition: C4Value.h:116

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::ResetEnumerationIndex ( )
staticinherited

Definition at line 99 of file C4PropList.cpp.

References C4PropListNumbered::EnumerationIndex, C4Set< T >::GetSize(), and C4PropListNumbered::PropLists.

Referenced by C4Game::Clear().

100 {
101  assert(!PropLists.GetSize());
102  EnumerationIndex = 0;
103 }
unsigned int GetSize() const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236
static int32_t EnumerationIndex
Definition: C4PropList.h:238

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::ResetProperty ( C4String k)
virtualinherited

Reimplemented in C4Object, and C4Effect.

Definition at line 969 of file C4PropList.cpp.

References C4StringTable::P, P_Prototype, C4Set< T >::Remove(), C4Value::Set0(), and Strings.

Referenced by C4Effect::ResetProperty(), C4Object::ResetProperty(), C4PropList::SetName(), and C4ScriptHost::UnlinkOwnedFunctions().

970 {
971  if (k == &Strings.P[P_Prototype])
972  prototype.Set0();
973  else
974  Properties.Remove(k);
975 }
C4String P[P_LAST]
void Set0()
Definition: C4Value.h:336
C4StringTable Strings
Definition: C4Globals.cpp:42
void Remove(H e)

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::SetEnumerationIndex ( int32_t  iMaxObjectNumber)
staticinherited

Definition at line 93 of file C4PropList.cpp.

References C4PropListNumbered::EnumerationIndex.

Referenced by C4Game::CheckObjectEnumeration(), and C4GameObjects::PostLoad().

94 {
95  // update object enumeration index now, because calls like OnSynchronized might create objects
96  EnumerationIndex = std::max(EnumerationIndex, iMaxObjectNumber);
97 }
static int32_t EnumerationIndex
Definition: C4PropList.h:238

Here is the caller graph for this function:

void C4PropList::SetName ( const char *  NewName = nullptr)
virtualinherited

Reimplemented in C4Object.

Definition at line 652 of file C4PropList.cpp.

References C4VString(), C4StringTable::P, P_Name, C4PropList::ResetProperty(), C4PropList::SetProperty(), and Strings.

Referenced by c4_mapgen_handle_set_map_library(), C4MapScriptHost::InitFunctionMap(), and C4Object::SetName().

653 {
654  if (!NewName)
656  else
657  {
658  SetProperty(P_Name, C4VString(NewName));
659  }
660 }
virtual void ResetProperty(C4String *k)
Definition: C4PropList.cpp:969
C4String P[P_LAST]
void SetProperty(C4PropertyName k, const C4Value &to)
Definition: C4PropList.h:120
C4StringTable Strings
Definition: C4Globals.cpp:42
C4Value C4VString(C4String *pStr)
Definition: C4Value.h:246

Here is the call graph for this function:

Here is the caller graph for this function:

virtual void C4PropList::SetOnFire ( bool  OnFire)
inlinevirtualinherited

Reimplemented in C4Object.

Definition at line 69 of file C4PropList.h.

Referenced by C4Effect::ClearAll(), C4Effect::Init(), C4Effect::Kill(), C4Effect::TempReaddUpperEffects(), and C4Effect::TempRemoveUpperEffects().

69 { }

Here is the caller graph for this function:

bool C4MapScriptLayer::SetPix ( int32_t  x,
int32_t  y,
uint8_t  fg,
uint8_t  bg 
) const
inline

Definition at line 307 of file C4MapScript.h.

References HasSurface().

307 { 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; }
bool HasSurface() const
Definition: C4MapScript.h:296

Here is the call graph for this function:

void C4PropList::SetProperty ( C4PropertyName  k,
const C4Value to 
)
inlineinherited

Definition at line 120 of file C4PropList.h.

References C4StringTable::P, C4PropList::SetPropertyByS(), and Strings.

Referenced by C4Game::AllocateTranslatedString(), C4Effect::C4Effect(), C4Object::ChangeDef(), C4Object::Init(), C4DefScriptHost::Parse(), C4ScriptHost::Preparse(), C4Object::SetAction(), C4PropList::SetName(), C4ScriptGuiWindow::ToC4Value(), C4ScriptHost::UnLink(), and UpdateSurfaceSize().

121  { SetPropertyByS(&Strings.P[k], to); }
C4String P[P_LAST]
C4StringTable Strings
Definition: C4Globals.cpp:42
virtual void SetPropertyByS(C4String *k, const C4Value &to)
Definition: C4PropList.cpp:948

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::SetPropertyByS ( C4String k,
const C4Value to 
)
virtualinherited

Reimplemented in C4Object, C4PropListScen, and C4Effect.

Definition at line 948 of file C4PropList.cpp.

References C4Set< T >::Add(), C4Set< T >::Get(), C4Value::getPropList(), C4PropList::GetPrototype(), C4Set< T >::Has(), C4StringTable::P, P_Prototype, C4Value::SetPropList(), Strings, and C4Property::Value.

Referenced by C4AulDefFunc::C4AulDefFunc(), C4PropListScen::C4PropListScen(), C4ScriptHost::CopyPropList(), C4PropList::SetProperty(), C4Effect::SetPropertyByS(), C4PropListScen::SetPropertyByS(), C4Object::SetPropertyByS(), C4ScriptGuiWindowProperty::ToC4Value(), C4ScriptGuiWindow::ToC4Value(), C4ScriptHost::UnlinkOwnedFunctions(), C4AulCompiler::PreparseAstVisitor::visit(), C4AulCompiler::ConstexprEvaluator::visit(), and C4AulCompiler::ConstantResolver::visit().

949 {
950  assert(!constant);
951  if (k == &Strings.P[P_Prototype])
952  {
953  C4PropList * newpt = to.getPropList();
954  for(C4PropList * it = newpt; it; it = it->GetPrototype())
955  if(it == this)
956  throw C4AulExecError("Trying to create cyclic prototype structure");
957  prototype.SetPropList(newpt);
958  }
959  else if (Properties.Has(k))
960  {
961  Properties.Get(k).Value = to;
962  }
963  else
964  {
965  Properties.Add(C4Property(k, to));
966  }
967 }
C4String P[P_LAST]
C4Value Value
Definition: C4PropList.h:55
T * Add(T const &e)
bool Has(H e) const
T & Get(H e) const
C4StringTable Strings
Definition: C4Globals.cpp:42
C4PropList * GetPrototype() const
Definition: C4PropList.h:81
void SetPropList(C4PropList *PropList)
Definition: C4Value.h:141
C4PropList * getPropList() const
Definition: C4Value.h:116

Here is the call graph for this function:

Here is the caller graph for this function:

void C4MapScriptLayer::SetSurfaces ( std::unique_ptr< CSurface8 fg,
std::unique_ptr< CSurface8 bg 
)
inline

Definition at line 286 of file C4MapScript.h.

References UpdateSurfaceSize().

287  {
288  fg_surface = std::move(fg);
289  bg_surface = std::move(bg);
291  }
void UpdateSurfaceSize()

Here is the call graph for this function:

void C4PropListNumbered::ShelveNumberedPropLists ( )
staticinherited

Definition at line 105 of file C4PropList.cpp.

References C4PropListNumbered::ClearNumber(), C4Set< T >::First(), C4Set< T >::GetSize(), C4Set< T >::Next(), C4PropListNumbered::Number, C4PropListNumbered::PropLists, and C4PropListNumbered::ShelvedPropLists.

Referenced by C4Game::CompileFunc().

106 {
107  // unnumber all proplists and put them on the shelve. To be used on remaining objects before a savegame load.
108  assert(ShelvedPropLists.empty());
110  C4PropListNumbered *const* p_next = PropLists.First(), *const* p;
111  while ((p = p_next))
112  {
113  p_next = PropLists.Next(p);
114  C4PropListNumbered *pl = *p;
115  if (pl->Number != -1)
116  {
117  pl->ClearNumber();
118  ShelvedPropLists.push_back(pl);
119  }
120  }
121 }
static std::vector< C4PropListNumbered * > ShelvedPropLists
Definition: C4PropList.h:237
T const * Next(T const *p) const
unsigned int GetSize() const
static C4Set< C4PropListNumbered * > PropLists
Definition: C4PropList.h:236
T const * First() const

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropList::Thaw ( )
inlineinherited

Definition at line 129 of file C4PropList.h.

Referenced by C4PropList::ThawRecursively(), and C4ScriptHost::UnlinkOwnedFunctions().

129 { constant = false; }

Here is the caller graph for this function:

void C4PropList::ThawRecursively ( )
inherited

Definition at line 283 of file C4PropList.cpp.

References C4PropList::GetPropertyByS(), C4Value::getPropList(), C4AulScriptEngine::GetPropList(), C4PropList::GetUnsortedProperties(), C4PropList::IsFrozen(), C4PropList::IsStatic(), s, ScriptEngine, C4PropList::Thaw(), and C4PropList::ThawRecursively().

Referenced by C4PropList::ThawRecursively(), and C4AulScriptEngine::UnLink().

284 {
285  //thaw self and all owned properties
286  Thaw();
288  //if (s) LogF("Thaw: %s", s->GetDataString().getData());
289  auto prop_names = GetUnsortedProperties(nullptr, ::ScriptEngine.GetPropList());
290  for (auto prop_name : prop_names)
291  {
292  C4Value child_val;
293  GetPropertyByS(prop_name, &child_val);
294  //LogF(" %s=%s", prop_name->GetCStr(), child_val.GetDataString(1).getData());
295  C4PropList *child_proplist = child_val.getPropList();
296  if (child_proplist && child_proplist->IsFrozen())
297  {
298  child_proplist->ThawRecursively();
299  }
300  }
301 }
void Thaw()
Definition: C4PropList.h:129
C4PropListStatic * GetPropList()
Definition: C4Aul.h:151
C4AulScriptEngine ScriptEngine
Definition: C4Globals.cpp:43
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:85
virtual bool GetPropertyByS(const C4String *k, C4Value *pResult) const
Definition: C4PropList.cpp:753
void ThawRecursively()
Definition: C4PropList.cpp:283
bool IsFrozen() const
Definition: C4PropList.h:131
std::vector< C4String * > GetUnsortedProperties(const char *prefix, C4PropList *ignore_parent=nullptr) const
Definition: C4PropList.cpp:614
#define s
C4PropList * getPropList() const
Definition: C4Value.h:116

Here is the call graph for this function:

Here is the caller graph for this function:

StdStrBuf C4PropList::ToJSON ( int  depth = 10,
bool  ignore_reference_parent = false 
) const
inherited

Definition at line 546 of file C4PropList.cpp.

References StdStrBuf::Append(), C4PropList::C4Value, C4Set< T >::GetSize(), C4Set< T >::GetSortedListOfElementPointers(), C4PropList::IsStatic(), and C4Value::ToJSON().

Referenced by C4Value::ToJSON().

547 {
548  if (depth <= 0 && Properties.GetSize())
549  {
550  throw new C4JSONSerializationError("maximum depth reached");
551  }
552  StdStrBuf DataString;
553  DataString = "{";
554  bool has_elements = false;
555  // Append prototype
556  if (prototype)
557  {
558  DataString.Append("Prototype:");
559  DataString.Append(prototype.ToJSON(depth - 1, ignore_reference_parent ? IsStatic() : nullptr));
560  has_elements = true;
561  }
562  // Append other properties
563  std::list<const C4Property *> sorted_props = Properties.GetSortedListOfElementPointers();
564  for (std::list<const C4Property *>::const_iterator p = sorted_props.begin(); p != sorted_props.end(); ++p)
565  {
566  if (has_elements) DataString.Append(",");
567  DataString.Append(C4Value((*p)->Key).ToJSON());
568  DataString.Append(":");
569  DataString.Append((*p)->Value.ToJSON(depth - 1, ignore_reference_parent ? IsStatic() : nullptr));
570  has_elements = true;
571  }
572  DataString.Append("}");
573  return DataString;
574 }
std::list< const T * > GetSortedListOfElementPointers() const
friend class C4Value
Definition: C4PropList.h:165
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:85
unsigned int GetSize() const
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519
StdStrBuf ToJSON(int depth=10, const class C4PropListStatic *ignore_reference_parent=nullptr) const
Definition: C4Value.cpp:189

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PropListNumbered::UnshelveNumberedPropLists ( )
staticinherited

Definition at line 123 of file C4PropList.cpp.

References C4PropListNumbered::ShelvedPropLists.

Referenced by C4Game::LoadScenarioSection(), and C4GameObjects::PostLoad().

124 {
125  // re-insert shelved proplists into main list and give them a number
126  for (auto & ShelvedPropList : ShelvedPropLists)
127  ShelvedPropList->AcquireNumber();
128  ShelvedPropLists.clear();
129 }
static std::vector< C4PropListNumbered * > ShelvedPropLists
Definition: C4PropList.h:237

Here is the caller graph for this function:

void C4MapScriptLayer::UpdateSurfaceSize ( )

Definition at line 481 of file C4MapScript.cpp.

References C4VInt(), P_Hgt, P_Wdt, and C4PropList::SetProperty().

Referenced by CreateSurface(), and SetSurfaces().

482 {
483  // Called when surface size changes: Update internal property values
484  if (fg_surface)
485  {
486  SetProperty(P_Wdt, C4VInt(fg_surface->Wdt));
487  SetProperty(P_Hgt, C4VInt(fg_surface->Hgt));
488  }
489 }
C4Value C4VInt(int32_t i)
Definition: C4Value.h:242
void SetProperty(C4PropertyName k, const C4Value &to)
Definition: C4PropList.h:120

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

int32_t C4PropListNumbered::EnumerationIndex = 0
staticprotectedinherited
class C4MapScriptMap* C4MapScriptLayer::map
protected

Definition at line 275 of file C4MapScript.h.

Referenced by C4MapScriptMap::C4MapScriptMap(), and GetMap().

std::vector< C4PropListNumbered * > C4PropListNumbered::ShelvedPropLists
staticprotectedinherited
int32_t C4PropList::Status {1}
inherited

Definition at line 168 of file C4PropList.h.

Referenced by C4Command::Acquire(), C4Command::Activate(), C4GameObjects::Add(), C4ObjectList::Add(), C4FoW::Add(), C4EditCursor::AddToSelection(), C4Object::AssignDeath(), C4ObjectList::AssignInfo(), C4Object::AssignRemoval(), C4Object::At(), C4PropList::Call(), C4Game::CastObjects(), C4ObjectList::CheckCategorySort(), C4ObjectList::CheckSort(), C4Effect::ClearAll(), C4ObjectList::ClearInfo(), C4Object::Collect(), C4Object::CompileFunc(), C4GameObjects::CrossCheck(), C4ObjectList::DeleteObjects(), C4ObjectList::Denumerate(), C4Landscape::P::DigMaterial2Objects(), C4Object::DirectComContents(), C4Effect::DoDamage(), C4Object::Draw(), C4Game::DrawCrewOverheadText(), C4Object::DrawSelectMark(), C4Object::DrawTopFace(), C4EditCursor::EMMoveObject(), C4Object::Enter(), C4Object::ExecAction(), C4SoundInstance::Execute(), C4Effect::Execute(), C4Object::Execute(), C4ScriptGuiWindowAction::ExecuteCommand(), C4Command::Fail(), C4FindObject::Find(), C4ObjectList::Find(), C4ObjectList::FindOther(), C4GameObjects::FixObjectOrder(), C4PropList::FreezeAndMakeStaticRecursively(), C4Object::GetArea(), C4EditCursor::GetCurrentSelectionPosition(), C4Object::GetEntranceArea(), C4Object::GetInfoString(), C4ObjectList::GetListID(), C4Object::GetMomentum(), C4ObjectList::GetObject(), C4Object::GrabInfo(), GrabLost(), C4GameObjects::GRBroadcast(), C4GameMessage::Init(), C4Effect::Init(), C4Object::IsMoveableBySolidMask(), C4GraphicsOverlay::IsValid(), C4Object::Lift(), C4ObjectList::ListIDCount(), C4Player::MakeCrewMember(), C4ObjectList::MassCount(), C4Object::MenuCommand(), C4GameMessageList::New(), C4Game::NewObject(), ObjectComGrab(), ObjectComUnGrab(), C4ObjectList::ObjectCount(), C4EditCursor::PerformDuplicationLegacy(), C4Landscape::P::PostFreeShape(), C4GameObjects::PostLoad(), C4Object::Push(), C4GameObjects::Remove(), C4EditCursor::RemoveFromSelection(), C4AulScriptContext::ReturnDump(), C4GameObjects::SafeObjectPointer(), C4Object::SetAction(), C4Object::SetGraphics(), C4GameObjects::SetOCF(), C4Object::SetOCF(), C4Object::StatusActivate(), C4Object::StatusDeactivate(), C4Effect::TempReaddUpperEffects(), C4Effect::TempRemoveUpperEffects(), C4ObjectList::UpdateFaces(), C4ObjectList::UpdateGraphics(), C4Object::UpdateOCF(), C4Object::UpdatePos(), C4Object::UpdateSolidMask(), C4GameObjects::UpdateSolidMasks(), C4ObjectList::ValidateOwners(), and C4ObjectList::Write().


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