void MinerGob::Draw(DibBitmap *pbm, int xViewOrigin, int yViewOrigin, int nLayer) { #ifdef DRAW_OCCUPIED_TILE_INDICATOR { WRect wrcT; GetTilePaddedWRect(&wrcT); Rect rcT; rcT.FromWorldRect(&wrcT); rcT.Offset(-xViewOrigin, -yViewOrigin); DrawBorder(pbm, &rcT, 1, GetColor(kiclrWhite)); } #endif if (m_fHidden) return; MobileUnitGob::Draw(pbm, xViewOrigin, yViewOrigin, nLayer); if (m_st == kstMinerSuck && nLayer == knLayerDepthSorted) { SetAnimationStrip(&m_aniVacuum, m_ani.GetStrip()); m_aniVacuum.Draw(pbm, PcFromUwc(m_wx) - xViewOrigin, PcFromUwc(m_wy) - yViewOrigin); } else if (nLayer == knLayerSelection && (m_ff & kfGobSelected)) { Rect rcT; rcT.FromWorldRect(&m_pmuntc->wrcUIBounds); rcT.Offset(PcFromUwc(m_wx) - xViewOrigin, PcFromUwc(m_wy) - yViewOrigin); DrawFullnessIndicator(pbm, &rcT, m_nGalaxiteAmount / knGalaxiteValue / 2, knMinerGalaxiteMax / knGalaxiteValue / 2); } }
void TankGob::Draw(DibBitmap *pbm, int xViewOrigin, int yViewOrigin, int nLayer) { if (nLayer == knLayerDepthSorted) { #ifdef DRAW_OCCUPIED_TILE_INDICATOR { WRect wrcT; GetTilePaddedWRect(&wrcT); Rect rcT; rcT.FromWorldRect(&wrcT); rcT.Offset(-xViewOrigin, -yViewOrigin); DrawBorder(pbm, &rcT, 1, GetColor(kiclrWhite)); } #endif Side side = m_pplr->GetSide(); if (m_ff & kfGobDrawFlashed) side = (Side)-1; // Draw base int x = PcFromUwc(m_wx) - xViewOrigin; int y = PcFromUwc(m_wy) - yViewOrigin; m_ani.Draw(pbm, x, y, side); // Draw turret // The turret is aligned with the base's special point Point ptBaseSpecial; m_ani.GetSpecialPoint(&ptBaseSpecial); m_aniTurret.Draw(pbm, x + ptBaseSpecial.x, y + ptBaseSpecial.y, side); } else { MobileUnitGob::Draw(pbm, xViewOrigin, yViewOrigin, nLayer); } }
void ReplicatorGob::Draw(DibBitmap *pbm, int xViewOrigin, int yViewOrigin, int nLayer) { if (nLayer == knLayerDepthSorted) { int x = PcFromUwc(m_wx) - xViewOrigin; int y = PcFromUwc(m_wy) - yViewOrigin; Side side = m_pplr->GetSide(); if (m_ff & kfGobDrawFlashed) side = (Side)-1; m_ani.SetFrame(0); m_ani.SetStrip(m_fEnabled ? 2 : 0); m_ani.Draw(pbm, x, y, side); m_ani.SetStrip(m_fEnabled ? 3 : 1); #if defined(IPHONE) || defined(SDL) // When this is scaled up by 1 1/3 (scaling 24 art to 32), // the upper right quadrant piece is 55 high, which translates after // rounding to 73, yet the lower right quad piece wants to go at // location 56 (effectively) which scales to 75, so there is a gap. m_ani.Draw(pbm, x, y - 1, side); // ugly hack #else m_ani.Draw(pbm, x, y, side); #endif if (m_fReplicating) { m_ani.SetStrip(m_pmuntc->panid->GetStripIndex("l 0")); m_ani.SetFrame(m_ifrmLights / 2); m_ani.Draw(pbm, x, y, side); } } else if (nLayer == knLayerSelection) { if (m_ff & kfGobSelected) { Rect rcT; rcT.FromWorldRect(&m_puntc->wrcUIBounds); rcT.Offset(-xViewOrigin + PcFromWc(m_wx), -yViewOrigin + PcFromWc(m_wy)); DrawSelectionIndicator(pbm, &rcT, m_fxHealth, m_puntc->GetArmorStrength()); } } else { StructGob::Draw(pbm, xViewOrigin, yViewOrigin, nLayer); } }
void ReplicatorGob::GetClippingBounds(Rect *prc) { // Union of the two strips that combine to form the Replicator image m_pstruc->panid->GetBounds(0, 0, prc); Rect rcT; m_pstruc->panid->GetBounds(1, 0, &rcT); prc->Union(&rcT); // If selected, union with that rect if (gwfPerfOptions & kfPerfSelectionBrackets) { if (m_ff & kfGobSelected) { Rect rcSel; rcSel.FromWorldRect(&m_pstruc->wrcUIBounds); // rcSel.top -= kcyHealthBar; prc->Union(&rcSel); } } prc->Offset(PcFromUwc(m_wx), PcFromUwc(m_wy)); }