void TToweredTrainUnit::Draw() { TField *f = GetField(X, Y); TSprite *s, *sst; int rrx = GetRelX(X), rry = GetRelY(Y); int drawx = 28 * (rrx - rry) + LittleX + 28; int drawy = 14 * (rrx + rry - (f->Height)) + LittleY + 14; if ((!SelectCrossLock) && (SelectedUnit == this)) { void *oldb = MapBuf; MapBuf = FullBuf; DrawL2Selector(drawx-LittleX, drawy+28-LittleY, f->Terrain, BmpSelected); MapBuf = oldb; } s = GetSprite(); DrawSprite(drawx, drawy, s); if (ActualSprite < 8/*tj.jsme v rovine*/) { s = UnitsSprites[Type][40 + WpnOrient]; DrawSprite(drawx + SpriteLocators[Type][SpriteOrient*2], drawy + SpriteLocators[Type][SpriteOrient*2+1], s); } s = GetSmoke(); if (s) DrawSprite(drawx, drawy, s); if (iniShowStatusbar && (!StatusbarLock)) { if ((sst = GetStatusBar()) != NULL) { DrawSprite(drawx, drawy, sst); memfree(sst); } } GetDrawRect(&(LD_rect[ID])); LD_used[ID] = TRUE; }
void TToweredTrainUnit::GetDrawRect(TRect *r) { TRect r1; TField *f = GetField(X, Y); TSprite *s = GetSprite(); int rrx = GetRelX(X), rry = GetRelY(Y); int drawx = 28 * (rrx - rry) + LittleX + 28; int drawy = 14 * (rrx + rry - (f->Height)) + LittleY + 14; r->x1 = drawx - s->dx, r->y1 = drawy - s->dy; r->x2 = r->x1 + s->w, r->y2 = r->y1 + s->h; s = UnitsSprites[Type][40 + WpnOrient]; r1.x1 = drawx + SpriteLocators[Type][SpriteOrient*2] - s->dx, r1.y1 = drawy + SpriteLocators[Type][SpriteOrient*2+1] - s->dy; r1.x2 = r1.x1 + s->w, r1.y2 = r1.y1 + s->h; Union(r, &r1); s = GetSmoke(); if (s) { r1.x1 = drawx - s->dx, r1.y1 = drawy - s->dy; r1.x2 = r1.x1 + s->w, r1.y2 = r1.y1 + s->h; Union(r, &r1); } }
bool cFurnaceEntity::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) { UNUSED(a_Dt); if (m_FuelBurnTime <= 0) { // If a furnace is out of fuel, the progress bar reverses at twice the speed of cooking. m_TimeCooked = std::max((m_TimeCooked - 2), 0); // Reset progressbars, block type, and bail out m_BlockType = E_BLOCK_FURNACE; a_Chunk.FastSetBlock(GetRelX(), m_PosY, GetRelZ(), E_BLOCK_FURNACE, m_BlockMeta); UpdateProgressBars(); return false; } if (m_IsCooking) { m_TimeCooked++; if (m_TimeCooked >= m_NeedCookTime) { // Finished smelting one item FinishOne(); } } m_TimeBurned++; if (m_TimeBurned >= m_FuelBurnTime) { // The current fuel has been exhausted, use another one, if possible BurnNewFuel(); } UpdateProgressBars(); return true; }
void ProcessFieldAnim(int x, int y) { int oldt, t; TSprite *s; int rx, ry, drawx, drawy; t = oldt = GetField(x, y)->Terrain2; t = CycleF(t, 389, 390, 900, 901, 902, 903, 904, 905); t = CycleF(t, 391, 392, 906, 907, 908, 909, 910, 911); t = CycleF(t, 395, 396, 397, 912, 913, 914, 915, 916); t = CycleF(t, 398, 399, 400, 918, 919, 920, 921, 922); if (t != oldt) { PlaceL2(x, y, t, 1); s = (TSprite*)(BmpTerr2[GetField(x, y)->Terrain2]); if (s) { rx = GetRelX(x), ry = GetRelY(y); drawx = 28 * (rx - ry) + 28; drawy = 14 * (rx + ry - (GetField(x, y)->Height)) + 14; StartDraw(drawx - s->dx, drawy - s->dy, s->w, s->h); PaintUnits(); EndDraw(); } } }
void DrawField(int x, int y) { TField *f = GetField(x, y); word Ter1 = f->Terrain; word Ter2 = f->Terrain2; int rx = GetRelX(x), ry = GetRelY(y); int drawx = VIEW_OFS_X + 28 * (rx - ry); int drawy = VIEW_OFS_Y + 14 * (rx + ry - (f->Height)); int localx = drawx/2, localy = drawy/2; int ldx = (x < 0) ? 0xFF : ((x >= MapSizeX) ? 0xFF : x); int ldy = (y < 0) ? 0xFF : ((y >= MapSizeY) ? 0xFF : y); if ((drawx < 0) || (drawy < 0) || (drawx > VIEW_PIXSZ_X - FIELD_X) || (drawy > VIEW_PIXSZ_Y - TerrOfssEnd[Ter1])) return; // PLNA VIDITELNOST: if (f->Visib == 2) { // Prvni vrstva terenu & lokalizace: if ((Ter1 % 256) < tofsL1B) { DrawTerrA(drawx, drawy, BmpTerr1[Ter1]); DrawLocalA(LocalBufX, localx, localy, ldx); DrawLocalA(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1C) { DrawTerrB(drawx, drawy, BmpTerr1[Ter1]); DrawLocalB(LocalBufX, localx, localy, ldx); DrawLocalB(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1D) { DrawTerrC(drawx, drawy, BmpTerr1[Ter1]); DrawLocalC(LocalBufX, localx, localy, ldx); DrawLocalC(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1E) { DrawTerrD(drawx, drawy, BmpTerr1[Ter1]); DrawLocalD(LocalBufX, localx, localy, ldx); DrawLocalD(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1F) { DrawTerrE(drawx, drawy, BmpTerr1[Ter1]); DrawLocalE(LocalBufX, localx, localy, ldx); DrawLocalE(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1G) { DrawTerrF(drawx, drawy, BmpTerr1[Ter1]); DrawLocalF(LocalBufX, localx, localy, ldx); DrawLocalF(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1H) { DrawTerrG(drawx, drawy, BmpTerr1[Ter1]); DrawLocalG(LocalBufX, localx, localy, ldx); DrawLocalG(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1I) { DrawTerrH(drawx, drawy, BmpTerr1[Ter1]); DrawLocalH(LocalBufX, localx, localy, ldx); DrawLocalH(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1J) { DrawTerrI(drawx, drawy, BmpTerr1[Ter1]); DrawLocalI(LocalBufX, localx, localy, ldx); DrawLocalI(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1K) { DrawTerrJ(drawx, drawy, BmpTerr1[Ter1]); DrawLocalJ(LocalBufX, localx, localy, ldx); DrawLocalJ(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1L) { DrawTerrK(drawx, drawy, BmpTerr1[Ter1]); DrawLocalK(LocalBufX, localx, localy, ldx); DrawLocalK(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1M) { DrawTerrL(drawx, drawy, BmpTerr1[Ter1]); DrawLocalL(LocalBufX, localx, localy, ldx); DrawLocalL(LocalBufY, localx, localy, ldy); } else { DrawTerrM(drawx, drawy, BmpTerr1[Ter1]); DrawLocalM(LocalBufX, localx, localy, ldx); DrawLocalM(LocalBufY, localx, localy, ldy); } // Druha vrstva terenu: if (Ter2 != 0) { if (Ter2 < tofsL2B) DrawUpTerrA(drawx, drawy, BmpTerr2[Ter2]); else if (Ter2 < tofsL2C) DrawUpTerrB(drawx, drawy, BmpTerr2[Ter2]); else if (Ter2 < tofsL2D) DrawUpTerrC(drawx, drawy, BmpTerr2[Ter2]); else if (Ter2 < tofsL2E) DrawUpTerrD(drawx, drawy, BmpTerr2[Ter2]); else if (Ter2 < tofsL2Spec) DrawUpTerrE(drawx, drawy, BmpTerr2[Ter2]); } // Pomocne zobrazovace: if (f->HasHelper) DrawRangesOnField(x, y, drawx, drawy); // Jednotky: // if (f->Unit != 0xFF) {} } // CASTECNA VIDITELNOST: else if (f->Visib == 1) { // Prvni vrstva terenu & lokalizace: if ((Ter1 % 256) < tofsL1B) { DrawTerrA(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalA(LocalBufX, localx, localy, ldx); DrawLocalA(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1C) { DrawTerrB(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalB(LocalBufX, localx, localy, ldx); DrawLocalB(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1D) { DrawTerrC(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalC(LocalBufX, localx, localy, ldx); DrawLocalC(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1E) { DrawTerrD(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalD(LocalBufX, localx, localy, ldx); DrawLocalD(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1F) { DrawTerrE(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalE(LocalBufX, localx, localy, ldx); DrawLocalE(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1G) { DrawTerrF(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalF(LocalBufX, localx, localy, ldx); DrawLocalF(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1H) { DrawTerrG(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalG(LocalBufX, localx, localy, ldx); DrawLocalG(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1I) { DrawTerrH(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalH(LocalBufX, localx, localy, ldx); DrawLocalH(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1J) { DrawTerrI(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalI(LocalBufX, localx, localy, ldx); DrawLocalI(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1K) { DrawTerrJ(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalJ(LocalBufX, localx, localy, ldx); DrawLocalJ(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1L) { DrawTerrK(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalK(LocalBufX, localx, localy, ldx); DrawLocalK(LocalBufY, localx, localy, ldy); } else if ((Ter1 % 256) < tofsL1M) { DrawTerrL(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalL(LocalBufX, localx, localy, ldx); DrawLocalL(LocalBufY, localx, localy, ldy); } else { DrawTerrM(drawx, drawy, BmpTerr1D[Ter1]); DrawLocalM(LocalBufX, localx, localy, ldx); DrawLocalM(LocalBufY, localx, localy, ldy); } // Druha vrstva terenu: if (Ter2 != 0) { if (!DontDrawL2[Ter2]) { if (Ter2 < tofsL2B) DrawUpTerrA(drawx, drawy, BmpTerr2D[Ter2]); else if (Ter2 < tofsL2C) DrawUpTerrB(drawx, drawy, BmpTerr2D[Ter2]); else if (Ter2 < tofsL2D) DrawUpTerrC(drawx, drawy, BmpTerr2D[Ter2]); else if (Ter2 < tofsL2E) DrawUpTerrD(drawx, drawy, BmpTerr2D[Ter2]); else if (Ter2 < tofsL2Spec) DrawUpTerrE(drawx, drawy, BmpTerr2D[Ter2]); } } // Pomocne zobrazovace: if (f->HasHelper) DrawRangesOnField(x, y, drawx, drawy); } // NULOVA VIDITELNOST: else { // Prvni vrstva terenu & lokalizace: if ((Ter1 % 256) < tofsL1B) { DrawTerrA(drawx, drawy, BmpTerr1[0]); DrawLocalA(LocalBufX, localx, localy, 0xFF); DrawLocalA(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1C) { DrawTerrB(drawx, drawy, BmpTerr1[tofsL1B]); DrawLocalB(LocalBufX, localx, localy, 0xFF); DrawLocalB(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1D) { DrawTerrC(drawx, drawy, BmpTerr1[tofsL1C]); DrawLocalC(LocalBufX, localx, localy, 0xFF); DrawLocalC(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1E) { DrawTerrD(drawx, drawy, BmpTerr1[tofsL1D]); DrawLocalD(LocalBufX, localx, localy, 0xFF); DrawLocalD(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1F) { DrawTerrE(drawx, drawy, BmpTerr1[tofsL1E]); DrawLocalE(LocalBufX, localx, localy, 0xFF); DrawLocalE(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1G) { DrawTerrF(drawx, drawy, BmpTerr1[tofsL1F]); DrawLocalF(LocalBufX, localx, localy, 0xFF); DrawLocalF(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1H) { DrawTerrG(drawx, drawy, BmpTerr1[tofsL1G]); DrawLocalG(LocalBufX, localx, localy, 0xFF); DrawLocalG(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1I) { DrawTerrH(drawx, drawy, BmpTerr1[tofsL1H]); DrawLocalH(LocalBufX, localx, localy, 0xFF); DrawLocalH(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1J) { DrawTerrI(drawx, drawy, BmpTerr1[tofsL1I]); DrawLocalI(LocalBufX, localx, localy, 0xFF); DrawLocalI(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1K) { DrawTerrJ(drawx, drawy, BmpTerr1[tofsL1J]); DrawLocalJ(LocalBufX, localx, localy, 0xFF); DrawLocalJ(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1L) { DrawTerrK(drawx, drawy, BmpTerr1[tofsL1K]); DrawLocalK(LocalBufX, localx, localy, 0xFF); DrawLocalK(LocalBufY, localx, localy, 0xFF); } else if ((Ter1 % 256) < tofsL1M) { DrawTerrL(drawx, drawy, BmpTerr1[tofsL1L]); DrawLocalL(LocalBufX, localx, localy, 0xFF); DrawLocalL(LocalBufY, localx, localy, 0xFF); } else { DrawTerrM(drawx, drawy, BmpTerr1[tofsL1M]); DrawLocalM(LocalBufX, localx, localy, 0xFF); DrawLocalM(LocalBufY, localx, localy, 0xFF); } } }