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

#include <C4MapScript.h>

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

Public Member Functions

 C4MapScriptMap (C4PropList *prototype)
 
 ~C4MapScriptMap () override
 
void Clear ()
 
C4MapScriptMapGetMapScriptMap () override
 
C4MapScriptLayerCreateLayer (int32_t wdt, int32_t hgt)
 
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
 
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 ()
 
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 321 of file C4MapScript.h.

Constructor & Destructor Documentation

C4MapScriptMap::C4MapScriptMap ( C4PropList prototype)
inline

Definition at line 325 of file C4MapScript.h.

References C4MapScriptLayer::map.

325 : C4MapScriptLayer(prototype, nullptr) { map=this; }
C4MapScriptLayer(C4PropList *prototype, C4MapScriptMap *map)
class C4MapScriptMap * map
Definition: C4MapScript.h:275
C4MapScriptMap::~C4MapScriptMap ( )
inlineoverride

Definition at line 326 of file C4MapScript.h.

References Clear().

326 { Clear(); }

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::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 
)
inherited

Definition at line 533 of file C4MapScript.cpp.

References C4MapScriptLayer::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 
)
inherited

Definition at line 551 of file C4MapScript.cpp.

References C4MapScriptLayer::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 C4MapScriptMap::Clear ( )

Definition at line 618 of file C4MapScript.cpp.

Referenced by ~C4MapScriptMap().

619 {
620  // Layers are owned by map. Free them.
621  for (auto & layer : layers) delete layer;
622  layers.clear();
623 }

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 ( )
inherited

Definition at line 475 of file C4MapScript.cpp.

Referenced by C4MapScriptLayer::CreateSurface(), and C4MapScriptLayer::~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 ( )
inherited

Definition at line 491 of file C4MapScript.cpp.

References C4M_MaxTexIndex, and C4MapScriptLayer::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:

C4MapScriptLayer * C4MapScriptMap::CreateLayer ( int32_t  wdt,
int32_t  hgt 
)

Definition at line 625 of file C4MapScript.cpp.

References C4MapScriptLayer::C4MapScriptLayer(), C4MapScriptLayer::CreateSurface(), C4MapScriptHost::GetLayerPrototype(), and MapScript.

626 {
627  // Create layer and register to map. Layer's created by a map are freed when the map is freed.
629  layers.push_back(new_layer); // push before CreateSurface for exception safety
630  if (!new_layer->CreateSurface(wdt, hgt))
631  {
632  layers.remove(new_layer);
633  delete new_layer;
634  return nullptr;
635  }
636  return new_layer;
637 }
C4MapScriptHost MapScript
C4MapScriptLayer(C4PropList *prototype, C4MapScriptMap *map)
bool CreateSurface(int32_t wdt, int32_t hgt)
C4PropListStatic * GetLayerPrototype()
Definition: C4MapScript.h:351

Here is the call graph for this function:

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

Definition at line 459 of file C4MapScript.cpp.

References C4MapScriptLayer::ClearSurface(), and C4MapScriptLayer::UpdateSurfaceSize().

Referenced by 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 
)
inherited

Definition at line 515 of file C4MapScript.cpp.

References C4MapScriptLayer::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 
)
inherited

Definition at line 589 of file C4MapScript.cpp.

References C4MapScriptLayer::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
inlineinherited

Definition at line 306 of file C4MapScript.h.

References C4MapScriptLayer::HasSurface().

Referenced by C4MapScriptLayer::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
inherited

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
inlineinherited

Definition at line 302 of file C4MapScript.h.

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

Definition at line 281 of file C4MapScript.h.

References C4MapScriptLayer::map.

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

Reimplemented from C4PropList.

Definition at line 280 of file C4MapScript.h.

280 { return this; }
C4MapScriptMap* C4MapScriptMap::GetMapScriptMap ( )
inlineoverridevirtual

Reimplemented from C4PropList.

Definition at line 328 of file C4MapScript.h.

328 { return this; }
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
inlineinherited

Definition at line 305 of file C4MapScript.h.

References C4MapScriptLayer::HasSurface().

Referenced by C4MapScriptLayer::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 
)
inherited

Definition at line 576 of file C4MapScript.cpp.

References C4MapScriptLayer::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
inlineinherited

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
inlineinherited

Definition at line 296 of file C4MapScript.h.

Referenced by C4MapScriptLayer::Blit(), C4MapScriptLayer::ConvertSkyToTransparent(), C4MapScriptLayer::Fill(), C4MapScriptLayer::FindPos(), C4MapScriptLayer::GetBackPix(), C4MapScriptLayer::GetPix(), C4MapScriptLayer::GetPixCount(), and C4MapScriptLayer::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
inlineinherited

Definition at line 308 of file C4MapScript.h.

References C4MapScriptLayer::GetBackPix(), and C4MapScriptLayer::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 ( )
inlineinherited

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
inlineinherited

Definition at line 307 of file C4MapScript.h.

References C4MapScriptLayer::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 C4MapScriptLayer::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 
)
inlineinherited

Definition at line 286 of file C4MapScript.h.

References C4MapScriptLayer::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 ( )
inherited

Definition at line 481 of file C4MapScript.cpp.

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

Referenced by C4MapScriptLayer::CreateSurface(), and C4MapScriptLayer::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
protectedinherited

Definition at line 275 of file C4MapScript.h.

Referenced by C4MapScriptMap(), and C4MapScriptLayer::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: