63 int xcnt,ycnt,iTx,iTy;
84 for (ycnt=0; ycnt<pClipRect->
Hgt; ++ycnt)
87 for (xcnt=0; xcnt<pClipRect->
Wdt; ++xcnt,++pPix)
93 iTx=pClipRect->
x+xcnt; iTy=pClipRect->
y+ycnt;
146 for (ycnt = 0; ycnt < pClipRect->
Hgt; ycnt++)
152 for (xcnt = 0; xcnt < pClipRect->
Wdt; xcnt++)
155 int32_t iMx =
fixtoi(xa + ya) + w / 2;
156 int32_t iMy =
fixtoi(xb + yb) + h / 2;
158 if (iMx >= 0 && iMy >= 0 && iMx < w && iMy < h && pSolidMask->_GetPix(iMx+mx0, iMy+my0))
176 xa += Ma1; xb += Mb1;
179 ya += Ma2; yb += Mb2;
190 if (dx !=
Fix0 || dy != 0)
221 if (!pSolidMask)
return 0;
276 if (pSolid->MaskPut)
if (pSolid->MaskPutRect.Overlap(
MaskPutRect))
281 pSolid->MaskPut =
false;
283 pSolid->Put(
false, &ClipRect,
false);
287 if (fBackupAttachment)
300 bool has_dup =
false;
307 if (has_dup)
continue;
310 for (; iVtx < pObj->Shape.VtxNum; ++iVtx)
311 if (pObj->Shape.GetVertexContact(iVtx, pObj->Action.t_attach |
CNAT_Bottom, pObj->GetX(), pObj->GetY(),
DensityProvider(*
this)))
313 if (iVtx == pObj->Shape.VtxNum)
continue;
349 for (
int y = where.
y; y < where.
y + where.
Hgt; ++y)
351 for (
int x = where.
x; x < where.
x + where.
Wdt; ++x)
370 for (
int y = where.
y; y < where.
y + where.
Hgt; ++y)
372 for (
int x = where.
x; x < where.
x + where.
Wdt; ++x)
391 for (
int y = where.
y; y < where.
y + where.
Hgt; ++y)
393 for (
int x = where.
x; x < where.
x + where.
Wdt; ++x)
494 if (!hGroup.
LoadEntry(szFilename, &png_buf))
return nullptr;
497 for (
size_t y=0u; y<png.
iHgt; ++y)
498 for (
size_t x=0u; x<png.
iWdt; ++x)
499 result->
SetPix(x,y,((png.
GetPix(x,y)>>24)<128) ? 0x00 : 0xff);
const int32_t C4M_Vehicle
constexpr bool SOLIDMASK_DEBUG
bool IsSomeVehicle(BYTE mat)
C4Fixed itofix(int32_t x)
C4Real Cos(const C4Real &fAngle)
int fixtoi(const C4Fixed &x)
C4Real Sin(const C4Real &fAngle)
C4Surface * GetBitmap(DWORD dwClr=0)
void Set(C4Surface &rSfc)
void DrawX(C4Surface *sfcTarget, float iX, float iY, float iWdt, float iHgt, int32_t iPhaseX=0, int32_t iPhaseY=0) const
void DrawXR(C4Surface *sfcTarget, int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, int32_t iPhaseX=0, int32_t iPhaseY=0, int32_t r=0)
bool LoadEntry(const char *entry_name, char **buffer, size_t *size_info=nullptr, int zeros_to_append=0)
C4ObjectList * NextObjectShapes(C4ObjectList *pPrev, C4LSector **ppSct)
C4ObjectList * FirstObjectShapes(C4LSector **ppSct)
BYTE GetPix(int32_t x, int32_t y) const
BYTE _GetPix(int32_t x, int32_t y) const
static const uint8_t Transparent
bool _SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix)
int32_t GetHeight() const
void CheckInstabilityRange(int32_t tx, int32_t ty)
void _SetPix2Tmp(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix)
int32_t GetMatCount(int material) const
bool SetPix2(int32_t x, int32_t y, BYTE fgPix, BYTE bgPix)
bool IsMoveableBySolidMask(int ComparisonPlane) const
int32_t GetSolidMaskPlane() const
int32_t iLastAttachMovementFrame
void MovePosition(int32_t dx, int32_t dy)
C4DefGraphics * GetGraphics() const
void Intersect(const C4Rect &r2)
bool ContactCheck(int32_t cx, int32_t cy, uint32_t *border_hack_contacts=nullptr, bool collide_halfvehic=false)
int32_t GetDensity(int32_t x, int32_t y) const override
static C4SolidMask * Last
class C4Object ** ppAttachingObjects
void Draw(C4TargetFacet &cgo)
static void RemoveSolidMasks()
void PutTemporary(C4Rect where)
int iAttachingObjectsCapacity
C4SolidMask(C4Object *pForObject)
void Put(bool fCauseInstability, C4TargetRect *pClipRect, bool fRestoreAttachment)
static void PutSolidMasks()
void Repair(C4Rect where)
static CSurface8 * LoadMaskFromFile(class C4Group &hGroup, const char *szFilename)
void Remove(bool fBackupAttachment)
static bool CheckConsistency()
void RemoveTemporary(C4Rect where)
static C4SolidMask * First
int iAttachingObjectsCount
void SetHalfVehicle(bool set)
void Set(int32_t iX, int32_t iY, int32_t iWdt, int32_t iHgt, int32_t iTX, int32_t iTY)
bool ClipBy(C4TargetRect &rClip)
bool Load(BYTE *pFile, int iSize)
DWORD GetPix(int iX, int iY)
BYTE _GetPix(int x, int y) const
void SetPix(int iX, int iY, BYTE byCol)