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

#include <C4PXS.h>

Collaboration diagram for C4PXSSystem:
[legend]

Public Member Functions

 C4PXSSystem ()
 
 ~C4PXSSystem ()
 
void Default ()
 
void Clear ()
 
void Execute ()
 
void Draw (C4TargetFacet &cgo)
 
void Cast (int32_t mat, int32_t num, int32_t tx, int32_t ty, int32_t level)
 
bool Create (int32_t mat, C4Real ix, C4Real iy, C4Real ixdir=Fix0, C4Real iydir=Fix0)
 
bool Load (C4Group &hGroup)
 
bool Save (C4Group &hGroup)
 
int32_t GetCount () const
 
int32_t GetCount (int32_t mat) const
 
int32_t GetCount (int32_t mat, int32_t x, int32_t y, int32_t wdt, int32_t hgt) const
 

Public Attributes

size_t Count
 

Protected Member Functions

C4PXSNew ()
 

Protected Attributes

C4PXS PXS [PXSMax]
 

Detailed Description

Definition at line 38 of file C4PXS.h.

Constructor & Destructor Documentation

C4PXSSystem::C4PXSSystem ( )

Definition at line 148 of file C4PXS.cpp.

References Default().

149 {
150  Default();
151 }
void Default()
Definition: C4PXS.cpp:158

Here is the call graph for this function:

C4PXSSystem::~C4PXSSystem ( )

Definition at line 153 of file C4PXS.cpp.

References Clear().

154 {
155  Clear();
156 }
void Clear()
Definition: C4PXS.cpp:163

Here is the call graph for this function:

Member Function Documentation

void C4PXSSystem::Cast ( int32_t  mat,
int32_t  num,
int32_t  tx,
int32_t  ty,
int32_t  level 
)

Definition at line 308 of file C4PXS.cpp.

References Create(), itofix(), and Random().

Referenced by C4Landscape::P::BlastMaterial2Objects().

309 {
310  int32_t cnt;
311  for (cnt=0; cnt<num; cnt++)
312  {
313  // Must do these calculation steps separately, because the order of
314  // invokations of Random() is not defined if they're used as parameters
315  C4Real xdir = itofix(Random(level+1)-level/2); xdir/=10;
316  C4Real ydir = itofix(Random(level+1)-level); ydir/=10;
317  Create(mat,
318  itofix(tx),itofix(ty),
319  xdir,
320  ydir);
321  }
322 }
uint32_t Random()
Definition: C4Random.cpp:43
bool Create(int32_t mat, C4Real ix, C4Real iy, C4Real ixdir=Fix0, C4Real iydir=Fix0)
Definition: C4PXS.cpp:174
Definition: C4Real.h:58
C4Fixed itofix(int32_t x)
Definition: C4Real.h:261

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PXSSystem::Clear ( )

Definition at line 163 of file C4PXS.cpp.

Referenced by C4Game::Clear(), C4Game::InitGame(), Load(), and ~C4PXSSystem().

164 {
165 }

Here is the caller graph for this function:

bool C4PXSSystem::Create ( int32_t  mat,
C4Real  ix,
C4Real  iy,
C4Real  ixdir = Fix0,
C4Real  iydir = Fix0 
)

Definition at line 174 of file C4PXS.cpp.

References C4PXS::Mat, MatValid(), New(), C4PXS::x, C4PXS::xdir, C4PXS::y, and C4PXS::ydir.

Referenced by Cast(), C4Landscape::CheckInstability(), C4Landscape::InsertMaterial(), C4MaterialMap::mrfConvert(), and C4Landscape::P::ShakeFreePix().

175 {
176  C4PXS *pxp;
177  if (!MatValid(mat)) return false;
178  if (!(pxp=New())) return false;
179  pxp->Mat=mat;
180  pxp->x=ix; pxp->y=iy;
181  pxp->xdir=ixdir; pxp->ydir=iydir;
182  return true;
183 }
C4PXS * New()
Definition: C4PXS.cpp:167
Definition: C4PXS.h:25
C4Real y
Definition: C4PXS.h:30
C4Real ydir
Definition: C4PXS.h:30
int32_t Mat
Definition: C4PXS.h:29
C4Real xdir
Definition: C4PXS.h:30
C4Real x
Definition: C4PXS.h:30
bool MatValid(int32_t mat)
Definition: C4Material.h:210

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PXSSystem::Default ( )

Definition at line 158 of file C4PXS.cpp.

References Count.

Referenced by C4PXSSystem(), and C4Game::Default().

159 {
160  Count=0;
161 }
size_t Count
Definition: C4PXS.h:44

Here is the caller graph for this function:

void C4PXSSystem::Draw ( C4TargetFacet cgo)

Definition at line 197 of file C4PXS.cpp.

References Abs(), C4BltVertex::color, Config, C4Rect::Contains(), Count, DwTo4UB(), C4Rect::Enlarge(), fixtof(), fixtoi(), C4BltVertex::ftx, C4BltVertex::fty, CStdPalette::GetClr(), C4Landscape::GetPal(), C4Facet::GetPhaseNum(), C4Config::Graphics, C4Surface::Hgt, C4Facet::Hgt, Landscape, C4MaterialMap::Map, C4PXS::Mat, Mat2PixColDefault(), MaterialMap, MNone, pDraw, C4Draw::PerformMultiLines(), C4Draw::PerformMultiPix(), C4Draw::PerformMultiTris(), PXS, C4Material::PXSFace, C4ConfigGraphics::PXSGfx, C4MaterialCore::PXSGfxRt, C4MaterialCore::PXSGfxSize, C4Facet::Surface, C4TargetFacet::TargetX, C4TargetFacet::TargetY, C4Surface::texture, C4BltVertex::tx, C4TargetRect::tx, C4BltVertex::ty, C4TargetRect::ty, C4Surface::Wdt, C4Facet::Wdt, C4PXS::x, C4Facet::X, C4PXS::xdir, C4PXS::y, C4Facet::Y, C4PXS::ydir, and z.

Referenced by C4Viewport::Draw().

198 {
199  // Draw PXS in this region
200  C4Rect VisibleRect(cgo.TargetX, cgo.TargetY, cgo.Wdt, cgo.Hgt);
201  VisibleRect.Enlarge(20);
202 
203  // Go through all PXS and build vertex arrays. The vertex arrays are
204  // then submitted to the GL in one go.
205  std::vector<C4BltVertex> pixVtx;
206  std::vector<C4BltVertex> lineVtx;
207  std::map<int, std::vector<C4BltVertex> > bltVtx;
208  // TODO: reserve some space to avoid too many allocations
209  // TODO: keep vertex mem allocated between draw invocations
210 
211  float cgox = cgo.X - cgo.TargetX, cgoy = cgo.Y - cgo.TargetY;
212  // First pass: draw simple PXS (lines/pixels)
213  for (size_t i = 0; i < Count; i++)
214  {
215  C4PXS *pxp = &PXS[i];
216  if (pxp->Mat != MNone && VisibleRect.Contains(fixtoi(pxp->x), fixtoi(pxp->y)))
217  {
218  C4Material *pMat = &::MaterialMap.Map[pxp->Mat];
219  const DWORD dwMatClr = ::Landscape.GetPal()->GetClr((BYTE) (Mat2PixColDefault(pxp->Mat)));
220  if(pMat->PXSFace.Surface)
221  {
222  int32_t pnx, pny;
223  pMat->PXSFace.GetPhaseNum(pnx, pny);
224  int32_t fcWdt = pMat->PXSFace.Wdt;
225  int32_t fcHgt = pMat->PXSFace.Hgt;
226  // calculate draw width and tile to use (random-ish)
227  uint32_t size = (1103515245 * i + 12345) >> 3;
228  float z = pMat->PXSGfxSize * (0.625f + 0.05f * int(size % 16));
229  pny = (i / pnx) % pny; pnx = i % pnx;
230 
231  const float w = z;
232  const float h = z * fcHgt / fcWdt;
233  const float x1 = fixtof(pxp->x) + cgox + z * pMat->PXSGfxRt.tx / fcWdt;
234  const float y1 = fixtof(pxp->y) + cgoy + z * pMat->PXSGfxRt.ty / fcHgt;
235  const float x2 = x1 + w;
236  const float y2 = y1 + h;
237 
238  const float sfcWdt = pMat->PXSFace.Surface->Wdt;
239  const float sfcHgt = pMat->PXSFace.Surface->Hgt;
240 
241  C4BltVertex vtx[6];
242  vtx[0].tx = (pnx + 0.f) * fcWdt / sfcWdt; vtx[0].ty = (pny + 0.f) * fcHgt / sfcHgt;
243  vtx[0].ftx = x1; vtx[0].fty = y1;
244  vtx[1].tx = (pnx + 1.f) * fcWdt / sfcWdt; vtx[1].ty = (pny + 0.f) * fcHgt / sfcHgt;
245  vtx[1].ftx = x2; vtx[1].fty = y1;
246  vtx[2].tx = (pnx + 1.f) * fcWdt / sfcWdt; vtx[2].ty = (pny + 1.f) * fcHgt / sfcHgt;
247  vtx[2].ftx = x2; vtx[2].fty = y2;
248  vtx[3].tx = (pnx + 0.f) * fcWdt / sfcWdt; vtx[3].ty = (pny + 1.f) * fcHgt / sfcHgt;
249  vtx[3].ftx = x1; vtx[3].fty = y2;
250  DwTo4UB(0xFFFFFFFF, vtx[0].color);
251  DwTo4UB(0xFFFFFFFF, vtx[1].color);
252  DwTo4UB(0xFFFFFFFF, vtx[2].color);
253  DwTo4UB(0xFFFFFFFF, vtx[3].color);
254  vtx[4] = vtx[2];
255  vtx[5] = vtx[0];
256 
257  std::vector<C4BltVertex>& vec = bltVtx[pxp->Mat];
258  vec.push_back(vtx[0]);
259  vec.push_back(vtx[1]);
260  vec.push_back(vtx[2]);
261  vec.push_back(vtx[3]);
262  vec.push_back(vtx[4]);
263  vec.push_back(vtx[5]);
264  }
265  else
266  {
267  // old-style: unicolored pixels or lines
268  if (fixtoi(pxp->xdir) || fixtoi(pxp->ydir))
269  {
270  // lines for stuff that goes whooosh!
271  int len = fixtoi(Abs(pxp->xdir) + Abs(pxp->ydir));
272  const DWORD dwMatClrLen = uint32_t(std::max<int>(dwMatClr >> 24, 195 - (195 - (dwMatClr >> 24)) / len)) << 24 | (dwMatClr & 0xffffff);
273  C4BltVertex begin, end;
274  begin.ftx = fixtof(pxp->x - pxp->xdir) + cgox; begin.fty = fixtof(pxp->y - pxp->ydir) + cgoy;
275  end.ftx = fixtof(pxp->x) + cgox; end.fty = fixtof(pxp->y) + cgoy;
276  DwTo4UB(dwMatClrLen, begin.color);
277  DwTo4UB(dwMatClrLen, end.color);
278  lineVtx.push_back(begin);
279  lineVtx.push_back(end);
280  }
281  else
282  {
283  // single pixels for slow stuff
284  C4BltVertex vtx;
285  vtx.ftx = fixtof(pxp->x) + cgox;
286  vtx.fty = fixtof(pxp->y) + cgoy;
287  DwTo4UB(dwMatClr, vtx.color);
288  pixVtx.push_back(vtx);
289  }
290  }
291  }
292  }
293 
294  if(!pixVtx.empty()) pDraw->PerformMultiPix(cgo.Surface, &pixVtx[0], pixVtx.size(), nullptr);
295  if(!lineVtx.empty()) pDraw->PerformMultiLines(cgo.Surface, &lineVtx[0], lineVtx.size(), 1.0f, nullptr);
296 
297  // PXS graphics disabled?
298  if (!Config.Graphics.PXSGfx)
299  return;
300 
301  for(std::map<int, std::vector<C4BltVertex> >::const_iterator iter = bltVtx.begin(); iter != bltVtx.end(); ++iter)
302  {
303  C4Material *pMat = &::MaterialMap.Map[iter->first];
304  pDraw->PerformMultiTris(cgo.Surface, &iter->second[0], iter->second.size(), nullptr, pMat->PXSFace.Surface->texture.get(), nullptr, nullptr, 0, nullptr);
305  }
306 }
float fty
Definition: C4Draw.h:64
C4Config Config
Definition: C4Config.cpp:833
float Y
Definition: C4Facet.h:118
#define z
int Wdt
Definition: C4Surface.h:65
float tx
Definition: C4Draw.h:62
C4TargetRect PXSGfxRt
Definition: C4Material.h:117
unsigned char color[4]
Definition: C4Draw.h:63
bool GetPhaseNum(int32_t &rX, int32_t &rY)
Definition: C4Facet.cpp:472
C4Material * Map
Definition: C4Material.h:169
Definition: C4PXS.h:25
Definition: C4Rect.h:27
uint8_t BYTE
float ty
Definition: C4Draw.h:62
C4Real y
Definition: C4PXS.h:30
int Hgt
Definition: C4Surface.h:65
virtual void PerformMultiTris(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, const C4BltTransform *pTransform, C4TexRef *pTex, C4TexRef *pOverlay, C4TexRef *pNormal, DWORD dwOverlayClrMod, C4ShaderCall *shader_call)=0
DWORD GetClr(BYTE byCol)
Definition: StdColors.h:186
C4ConfigGraphics Graphics
Definition: C4Config.h:253
size_t Count
Definition: C4PXS.h:44
void DwTo4UB(DWORD dwClr, unsigned char(&r)[4])
Definition: C4Draw.h:29
C4Real ydir
Definition: C4PXS.h:30
const int32_t MNone
Definition: C4Constants.h:177
virtual void PerformMultiPix(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, C4ShaderCall *shader_call)=0
C4Landscape Landscape
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
int32_t tx
Definition: C4Rect.h:79
C4Draw * pDraw
Definition: C4Draw.cpp:42
int32_t ty
Definition: C4Rect.h:79
virtual void PerformMultiLines(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, float width, C4ShaderCall *shader_call)=0
int32_t Mat
Definition: C4PXS.h:29
int32_t PXSGfx
Definition: C4Config.h:109
int32_t PXSGfxSize
Definition: C4Material.h:118
std::unique_ptr< C4TexRef > texture
Definition: C4Surface.h:78
float TargetX
Definition: C4Facet.h:165
float Hgt
Definition: C4Facet.h:118
C4Real xdir
Definition: C4PXS.h:30
C4MaterialMap MaterialMap
Definition: C4Material.cpp:970
CStdPalette * GetPal() const
C4Real x
Definition: C4PXS.h:30
float ftx
Definition: C4Draw.h:64
float fixtof(const C4Fixed &x)
Definition: C4Real.h:257
BYTE Mat2PixColDefault(int32_t mat)
Definition: C4Material.h:235
T Abs(T val)
Definition: Standard.h:42
C4Surface * Surface
Definition: C4Facet.h:117
float TargetY
Definition: C4Facet.h:165
uint32_t DWORD
int fixtoi(const C4Fixed &x)
Definition: C4Real.h:259
C4Facet PXSFace
Definition: C4Material.h:157
float Wdt
Definition: C4Facet.h:118
float X
Definition: C4Facet.h:118

Here is the call graph for this function:

Here is the caller graph for this function:

void C4PXSSystem::Execute ( )

Definition at line 185 of file C4PXS.cpp.

References Count, MNone, and PXS.

Referenced by C4Game::Execute().

186 {
187  for (size_t i = 0; i < Count; i++)
188  {
189  if (!PXS[i].Execute())
190  {
191  assert(PXS[i].Mat == MNone);
192  PXS[i--] = PXS[--Count];
193  }
194  }
195 }
size_t Count
Definition: C4PXS.h:44
const int32_t MNone
Definition: C4Constants.h:177
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
void Execute()
Definition: C4PXS.cpp:185

Here is the caller graph for this function:

int32_t C4PXSSystem::GetCount ( ) const
inline

Definition at line 56 of file C4PXS.h.

References Count.

56 { return Count; } // count all PXS
size_t Count
Definition: C4PXS.h:44
int32_t C4PXSSystem::GetCount ( int32_t  mat) const

Definition at line 397 of file C4PXS.cpp.

References Count, and PXS.

398 {
399  // count PXS of given material
400  int32_t result = 0;
401  for (size_t i = 0; i < Count; i++)
402  {
403  if (PXS[i].Mat == mat) ++result;
404  }
405  return result;
406 }
size_t Count
Definition: C4PXS.h:44
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
int32_t C4PXSSystem::GetCount ( int32_t  mat,
int32_t  x,
int32_t  y,
int32_t  wdt,
int32_t  hgt 
) const

Definition at line 408 of file C4PXS.cpp.

References Count, Inside(), C4PXS::Mat, MNone, PXS, C4PXS::x, and C4PXS::y.

409 {
410  // count PXS of given material in given area
411  int32_t result = 0;
412  for (size_t i = 0; i < Count; i++)
413  {
414  const C4PXS *pxp = &PXS[i];
415  if (pxp->Mat == mat || mat == MNone)
416  if (Inside(pxp->x, x, x + wdt - 1) && Inside(pxp->y, y, y + hgt - 1))
417  ++result;
418  }
419  return result;
420 }
Definition: C4PXS.h:25
C4Real y
Definition: C4PXS.h:30
size_t Count
Definition: C4PXS.h:44
const int32_t MNone
Definition: C4Constants.h:177
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
int32_t Mat
Definition: C4PXS.h:29
C4Real x
Definition: C4PXS.h:30
bool Inside(T ival, U lbound, V rbound)
Definition: Standard.h:43

Here is the call graph for this function:

bool C4PXSSystem::Load ( C4Group hGroup)

Definition at line 357 of file C4PXS.cpp.

References C4Group::AccessEntry(), C4CFN_PXS, Clear(), Count, FLOAT_TO_FIXED(), C4PXS::Mat, MNone, PXS, PXSMax, C4Group::Read(), C4PXS::x, C4PXS::xdir, C4PXS::y, and C4PXS::ydir.

Referenced by C4Game::InitGame().

358 {
359  // load new
360  size_t iBinSize, PXSNum;
361  if (!hGroup.AccessEntry(C4CFN_PXS,&iBinSize)) return false;
362  // clear previous
363  Clear();
364  // using C4Real or float?
365  int32_t iNumForm = 1;
366  if (iBinSize % sizeof(C4PXS) == 4)
367  {
368  if (!hGroup.Read(&iNumForm, sizeof (iNumForm))) return false;
369  if (!Inside<int32_t>(iNumForm, 1, 2)) return false;
370  iBinSize -= 4;
371  }
372  // old pxs-files have no tag for the number format
373  else if (iBinSize % sizeof(C4PXS) != 0) return false;
374  // calc chunk count
375  PXSNum = iBinSize / sizeof(C4PXS);
376  if (PXSNum > PXSMax) return false;
377  if (!hGroup.Read(PXS, iBinSize)) return false;
378  // count the PXS, Peter!
379  Count = PXSNum;
380  // convert num format, if neccessary
381  for (size_t i = 0; i < Count; i++)
382  {
383  C4PXS *pxp = &PXS[i];
384  if (pxp->Mat != MNone)
385  {
386  // convert number format
387 #ifdef C4REAL_USE_FIXNUM
388  if (iNumForm == 2) { FLOAT_TO_FIXED(&pxp->x); FLOAT_TO_FIXED(&pxp->y); FLOAT_TO_FIXED(&pxp->xdir); FLOAT_TO_FIXED(&pxp->ydir); }
389 #else
390  if (iNumForm == 1) { FIXED_TO_FLOAT(&pxp->x); FIXED_TO_FLOAT(&pxp->y); FIXED_TO_FLOAT(&pxp->xdir); FIXED_TO_FLOAT(&pxp->ydir); }
391 #endif
392  }
393  }
394  return true;
395 }
const size_t PXSMax
Definition: C4PXS.h:36
bool AccessEntry(const char *szWildCard, size_t *iSize=nullptr, char *sFileName=nullptr, bool NeedsToBeAGroup=false)
Definition: C4Group.cpp:1695
Definition: C4PXS.h:25
C4Real y
Definition: C4PXS.h:30
size_t Count
Definition: C4PXS.h:44
C4Real ydir
Definition: C4PXS.h:30
const int32_t MNone
Definition: C4Constants.h:177
void Clear()
Definition: C4PXS.cpp:163
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
int32_t Mat
Definition: C4PXS.h:29
C4Real xdir
Definition: C4PXS.h:30
C4Real x
Definition: C4PXS.h:30
#define C4CFN_PXS
Definition: C4Components.h:75
void FLOAT_TO_FIXED(C4Real *pVal)
Definition: C4Real.h:318
bool Read(void *pBuffer, size_t iSize) override
Definition: C4Group.cpp:1125

Here is the call graph for this function:

Here is the caller graph for this function:

C4PXS * C4PXSSystem::New ( )
protected

Definition at line 167 of file C4PXS.cpp.

References Count, PXS, and PXSMax.

Referenced by Create().

168 {
169  if (Count < PXSMax)
170  return &PXS[Count++];
171  return nullptr;
172 }
const size_t PXSMax
Definition: C4PXS.h:36
size_t Count
Definition: C4PXS.h:44
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46

Here is the caller graph for this function:

bool C4PXSSystem::Save ( C4Group hGroup)

Definition at line 324 of file C4PXS.cpp.

References C4Config::AtTempPath(), C4CFN_PXS, C4CFN_TempPXS, CStdFile::Close(), Config, Count, CStdFile::Create(), C4Group::Delete(), C4Group::Move(), PXS, and CStdFile::Write().

Referenced by C4Game::LoadScenarioSection().

325 {
326  if (Count == 0)
327  {
328  hGroup.Delete(C4CFN_PXS);
329  return true;
330  }
331 
332  // Save chunks to temp file
333  CStdFile hTempFile;
334  if (!hTempFile.Create(Config.AtTempPath(C4CFN_TempPXS)))
335  return false;
336 #ifdef C4REAL_USE_FIXNUM
337  int32_t iNumFormat = 1;
338 #else
339  int32_t iNumFormat = 2;
340 #endif
341  if (!hTempFile.Write(&iNumFormat, sizeof (iNumFormat)))
342  return false;
343  if (!hTempFile.Write(PXS, Count * sizeof(C4PXS)))
344  return false;
345 
346  if (!hTempFile.Close())
347  return false;
348 
349  // Move temp file to group
350  if (!hGroup.Move( Config.AtTempPath(C4CFN_TempPXS),
351  C4CFN_PXS ))
352  return false;
353 
354  return true;
355 }
bool Close(StdBuf **ppMemory=nullptr)
Definition: CStdFile.cpp:151
C4Config Config
Definition: C4Config.cpp:833
bool Create(const char *szFileName, bool fCompressed=false, bool fExecutable=false, bool fMemory=false)
Definition: CStdFile.cpp:49
Definition: C4PXS.h:25
bool Delete(const char *szFiles, bool fRecursive=false)
Definition: C4Group.cpp:1334
size_t Count
Definition: C4PXS.h:44
bool Write(const void *pBuffer, int iSize)
Definition: CStdFile.cpp:240
bool Move(const char *szFile, const char *szAddAs)
Definition: C4Group.cpp:1325
C4PXS PXS[PXSMax]
Definition: C4PXS.h:46
#define C4CFN_PXS
Definition: C4Components.h:75
const char * AtTempPath(const char *szFilename)
Definition: C4Config.cpp:540
#define C4CFN_TempPXS
Definition: C4Components.h:158

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

size_t C4PXSSystem::Count

Definition at line 44 of file C4PXS.h.

Referenced by Default(), Draw(), Execute(), GetCount(), Load(), New(), Save(), and C4ControlSyncCheck::Set().

C4PXS C4PXSSystem::PXS[PXSMax]
protected

Definition at line 46 of file C4PXS.h.

Referenced by Draw(), Execute(), GetCount(), Load(), New(), and Save().


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