/** * Draw episode B guardian. * * @param ticks Time * @param change Time since last iteration */ void DeckGuardian::draw (unsigned int ticks, int change) { Anim* anim; if (next) next->draw(ticks, change); // If the event has been removed from the grid, do not show it if (!set) return; // Draw the boss if (stage < 3) { // Draw unit anim = level->getAnim(29 + stage); if (stage == 0) { width = F8; drawnX = x - F64; } else if (stage == 1) { width = F8; drawnX = x + F32 - F8; } else if (stage == 2) { width = F64 + F32; drawnX = x - F64; } drawnY = y + F32; height = F32; if (ticks < flashTime) anim->flashPalette(0); if (stage == 0) anim->draw(getDrawX(change) - F64, getDrawY(change) + F32); else if (stage == 1) anim->draw(getDrawX(change) + F32 - F8 - F4, getDrawY(change) + F32); else anim->draw(getDrawX(change) + F8 - F64, getDrawY(change) + F32); if (ticks < flashTime) anim->restorePalette(); } return; }
/** * Draw episode 1 guardian. * * @param ticks Time * @param change Time since last iteration */ void MedGuardian::draw(unsigned int ticks, int change) { Anim *stageAnim; unsigned char frame; if (next) next->draw(ticks, change); fixed xChange = getDrawX(change); fixed yChange = getDrawY(change); frame = ticks / (set->animSpeed << 5); if (stage == 0) stageAnim = anim; else stageAnim = level->getAnim(set->anims[E_LFINISHANIM | (animType & 1)] & 0x7F); stageAnim->setFrame(frame + gridX + gridY, true); if (ticks < flashTime) stageAnim->flashPalette(0); drawnX = x + anim->getXOffset(); drawnY = y + anim->getYOffset() + stageAnim->getOffset(); stageAnim->draw(xChange, yChange); if (ticks < flashTime) stageAnim->restorePalette(); return; }
/** * Draw spring event. * * @param ticks Time * @param change Time since last iteration */ void SpringJJ2Event::draw (unsigned int ticks, int change) { Anim* an; int drawX, drawY; if (prepareDraw(ticks, change)) return; drawX = getDrawX(change); drawY = getDrawY(change); switch (type) { case 60: // Frozen green spring an = jj2Level->getAnim(animSet, 5, flipped); break; case 62: // Spring crate an = jj2Level->getAnim(animSet, 0, flipped); break; case 85: // Red spring an = jj2Level->getAnim(animSet, 7, flipped); break; case 86: // Green spring an = jj2Level->getAnim(animSet, 5, flipped); break; case 87: // Blue spring an = jj2Level->getAnim(animSet, 0, flipped); break; default: return; } an->setFrame(0, true); an->draw(drawX + F16, drawY + F16); return; }
/** * Draw the bird. * * @param ticks Time * @param change Time since last step */ void JJ1Bird::draw (unsigned int ticks, int change) { Anim *anim; if (next) next->draw(ticks, change); anim = level->getAnim((player->getFacing() || fleeing)? BIRD_RIGHTANIM: BIRD_LEFTANIM); anim->setFrame(ticks / 80, true); anim->draw(getDrawX(change), getDrawY(change)); return; }
/** * Draw food pickup event. * * @param ticks Time * @param change Time since last iteration */ void FoodJJ2Event::draw (unsigned int ticks, int change) { Anim* an; int drawX, drawY; if (prepareDraw(ticks, change)) return; drawX = getDrawX(change); drawY = getDrawY(change); // Use look-up table if (!endTime) an = jj2Level->getAnim(animSet, pickupAnims[type], flipped); else an = jj2Level->getAnim(animSet, 86, flipped); an->setFrame((int)ticks / 60, true); an->draw(drawX + F16, drawY + F16 + F32); return; }
/** * Draw ammo pickup event. * * @param ticks Time * @param change Time since last iteration */ void AmmoJJ2Event::draw (unsigned int ticks, int change) { Anim* an; int drawX, drawY; if (prepareDraw(ticks, change)) return; drawX = getDrawX(change); drawY = getDrawY(change); /// @todo Check if ammo is powered up if (!endTime) an = jj2Level->getAnim(0, ammoAnims[type - 33], flipped); else an = jj2Level->getAnim(animSet, 86, flipped); an->setFrame((int)ticks / 60, true); an->draw(drawX + F16, drawY + F16 + F32); return; }
/** * Draw placeholder event. * * @param ticks Time * @param change Time since last iteration */ void OtherJJ2Event::draw (unsigned int ticks, int change) { Anim* an; int drawX, drawY; if (prepareDraw(ticks, change)) return; drawX = getDrawX(change); drawY = getDrawY(change); switch (type) { default: if ((type <= 221) && pickupAnims[type]) { an = jj2Level->getAnim(animSet, pickupAnims[type], flipped); an->setFrame((int)ticks / 60, true); an->draw(drawX + F16, drawY + F16 + F32); } else if (!endTime) { drawRect(FTOI(drawX) + 8, FTOI(drawY) + 8, 16, 16, type); } panelBigFont->showNumber(type, FTOI(drawX) + 24, FTOI(drawY) + 12); return; } an->draw(drawX + F16, drawY + F16); return; }
/** * Draw coin/gem pickup event. * * @param ticks Time * @param change Time since last iteration */ void CoinGemJJ2Event::draw (unsigned int ticks, int change) { Anim* an; int drawX, drawY; if (prepareDraw(ticks, change)) return; drawX = getDrawX(change); drawY = getDrawY(change); if (endTime) { an = jj2Level->getAnim(animSet, 86, flipped); an->setFrame((int)ticks / 60, true); an->draw(drawX + F16, drawY + F16 + F32); } if (type == 44) an = jj2Level->getAnim(animSet, 84, flipped); // Silver coin else if (type == 45) an = jj2Level->getAnim(animSet, 37, flipped); // Gold coin else an = jj2Level->getAnim(animSet, 35, flipped); // Gem an->setFrame((int)ticks / 60, true); switch (type) { case 63: // Red gem mapPalette(an, 48); break; case 64: // Green gem mapPalette(an, 80); break; case 65: // Blue gem mapPalette(an, 32); break; case 66: // Purple gem mapPalette(an, 88); break; } if (endTime) { drawX += (ticks + 500 - endTime) << 8; drawY += (ticks + 500 - endTime) << 10; } an->draw(drawX + F16, drawY + F16 + F32); return; }
void cUnitDrawer::draw(cAbstractUnit *unit) { int drawX = getDrawX(unit); int drawY = getDrawY(unit); }
/** * Draw the list, start from startId, until the max icons in the list to be drawn. * * @param startId */ void cBuildingListDrawer::drawList(cBuildingList *list, int listIDToDraw, int startId, bool shouldDrawStructureSize) { // starting draw coordinates int iDrawX=getDrawX(); int iDrawY=getDrawY(); int maxYClip = maxListYCoordinate; int minYClip = 45; int minXClip = game.screen_x - 69; int maxXClip = game.screen_x; set_clip_rect(bmp_screen, minXClip, minYClip, maxXClip, maxYClip); int end = startId + maximumItemsToDraw; // max 5 icons are showed at once // is building an item in the list? bool isBuildingItemInList = list->isBuildingItem(); // draw the icons for (int i = startId; i < end; i++) { cBuildingListItem * item = list->getItem(i); if (item == NULL) { break; // stop. List became empty. } int iDrawXEnd = iDrawX + 63; int iDrawYEnd = iDrawY + 47; // icon id must be set , assert it. assert(item->getIconId() > -1); rect(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, makecol(255, 255, 255)); line(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, makecol(255, 255, 255)); draw_sprite(bmp_screen, (BITMAP *)gfxinter[item->getIconId()].dat, iDrawX, iDrawY); if (shouldDrawStructureSize) { drawStructureSize(item->getBuildId(), iDrawX, iDrawY); } bool cannotPayIt = item->getBuildCost() > player[HUMAN].credits; // when this item is being built. if (item->isBuilding()) { int iTotalBuildPoints = 0; // get the total build time if (listIDToDraw == LIST_CONSTYARD) { iTotalBuildPoints = structures[item->getBuildId()].build_time; } else if (listIDToDraw != LIST_STARPORT) { iTotalBuildPoints = units[item->getBuildId()].build_time; } // Now calculate the right frame. float iPiece = iTotalBuildPoints / 31; // = 17 - 1 (of above) if (iPiece < 0.1) { iPiece = 0.1; } int iFrame = health_bar(31, item->getProgress(), iTotalBuildPoints); if (iFrame > 31) { iFrame = 31; } if (item->getProgress() < iTotalBuildPoints) { // draw the other progress stuff set_trans_blender(0, 0, 0, 128); draw_trans_sprite(bmp_screen, (BITMAP *)gfxinter[PROGRESSFIX].dat, iDrawX+2, iDrawY+2); draw_trans_sprite(bmp_screen, (BITMAP *)gfxinter[PROGRESS001+iFrame].dat, iDrawX+2, iDrawY+2); } else { // draw 'ready' text when done building. if (listIDToDraw == LIST_CONSTYARD) { draw_sprite(bmp_screen, (BITMAP *)gfxinter[READY01].dat, iDrawX+3, iDrawY+16); } } } else { // this item is not being built. So we do not draw a progress indicator. // however, it could be that an other item is being built. // draw the item 'unavailable' when: // - is not available (doh) // - we cant pay it // - some other item is being built // - list is being upgraded, so you cannot build items /*|| cannotPayIt*/ if (!item->isAvailable() || isBuildingItemInList || list->isUpgrading() || !list->isAcceptsOrders()) { set_trans_blender(0,0,0,128); fblend_trans((BITMAP *)gfxinter[PROGRESSNA].dat, bmp_screen, iDrawX, iDrawY, 64); } if (list->getType() == LIST_STARPORT) { if (cannotPayIt) { set_trans_blender(0,0,0,128); fblend_trans((BITMAP *)gfxinter[PROGRESSNA].dat, bmp_screen, iDrawX, iDrawY, 64); rect(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, makecol(game.fade_select, 0, 0)); line(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, makecol(game.fade_select, 0, 0)); line(bmp_screen, iDrawX, iDrawY+47, iDrawX+63, iDrawY, makecol(game.fade_select, 0, 0)); set_trans_blender(0,0,0,128); } } // last built id if (list->getLastClickedId() == i) { rect(bmp_screen, (iDrawX + 1), (iDrawY + 1), (iDrawXEnd - 1), (iDrawYEnd - 1), makecol(game.fade_select, game.fade_select, game.fade_select)); rect(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, makecol(game.fade_select, game.fade_select, game.fade_select)); } } int amountToShow = item->getTimesToBuild(); if (amountToShow <= 0) { amountToShow = item->getTimesOrdered(); } if (amountToShow > 0) { // draw number of times to build this thing (queueing) int textX = iDrawX + 41; int textY = iDrawY + 16; if (amountToShow < 10) { textX += 10; } // draw alfont_textprintf(bmp_screen, game_font, textX + 1,textY + 1, makecol(0,0,0), "%d", amountToShow); alfont_textprintf(bmp_screen, game_font, textX,textY, makecol(255,255,255), "%d", amountToShow); } // draw rectangle when mouse hovers over icon if (isOverItemCoordinates_Boolean(mouse_x, mouse_y, iDrawX, iDrawY)) { int iColor=makecol(game.fade_select, game.fade_select, game.fade_select); if (player[0].getHouse() == ATREIDES) { iColor = makecol(0, 0, game.fade_select); } if (player[0].getHouse() == HARKONNEN) { iColor = makecol(game.fade_select, 0, 0); } if (player[0].getHouse() == ORDOS) { iColor = makecol(0, game.fade_select, 0); } rect(bmp_screen, (iDrawX + 1), (iDrawY + 1), (iDrawXEnd - 1), (iDrawYEnd - 1), iColor); rect(bmp_screen, iDrawX, iDrawY, iDrawXEnd, iDrawYEnd, iColor); } iDrawY+=48; } set_clip_rect(bmp_screen, 0, 0, game.screen_x, game.screen_y); }