void IndexedPickerScene::render(Graphic& dst, Box srcbox, double scale) { if ((nativeBuffer_.w() != srcbox.w()) || (nativeBuffer_.h() != srcbox.h())) { nativeBuffer_ = Graphic(srcbox.w(), srcbox.h()); } renderNative(nativeBuffer_, srcbox); int scaledW = srcbox.w() * sceneScale_; int scaledH = srcbox.h() * sceneScale_; nativeBuffer_.scale(dst, Box(0, 0, scaledW, scaledH)); if (gridLayerEnabled_) { gridLayer_.render(dst, Box(srcbox.x(), srcbox.y(), scaledW, scaledH), sceneScale_); } if ((highlightedSelectableBoxEnabled_)) { dst.drawRectBorder(selectableIndexToDrawX(highlightedSelectableIndex_), selectableIndexToDrawY(highlightedSelectableIndex_), selectableWidth_ * sceneScale_, selectableHeight_ * sceneScale_, Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity), 2); } if ((pickedSelectableBoxEnabled_)) { dst.drawRectBorder(selectableIndexToDrawX(pickedSelectableIndex_), selectableIndexToDrawY(pickedSelectableIndex_), selectableWidth_ * sceneScale_, selectableHeight_ * sceneScale_, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 2); } }
void LevelEffectGraphicSceneLayer::drawMetatileEffect( Graphic& metatileGraphic, int indexNum, const MetatileBehavior& behavior) { metatileGraphic.clear(Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); switch (behavior.metatileType()) { case MetatileTypes::nullType: metatileGraphic.clear( Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); break; case MetatileTypes::climbable1: case MetatileTypes::climbable2: metatileGraphic.clear( Color(0x88, 0x88, 0x88, Color::fullAlphaOpacity)); break; // case MetatileTypes::climbable2: // metatileGraphic.clear( // Color(0xCC, 0xCC, 0xCC, Color::fullAlphaOpacity)); // break; case MetatileTypes::nonclimbable: metatileGraphic.clear( Color(0x44, 0x44, 0x44, Color::fullAlphaOpacity)); // Color(0x22, 0x22, 0x22, Color::fullAlphaOpacity)); break; case MetatileTypes::damaging: metatileGraphic.clear( Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity)); switch (indexNum) { case 0x68: case 0x69: // up for (int i = 0; i < 16; i += 8) { metatileGraphic.drawLine(i, 15, i + 4, 2, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(i + 4, 2, i + 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); } break; case 0x6A: case 0x6B: // down for (int i = 0; i < 16; i += 8) { metatileGraphic.drawLine(i, 0, i + 4, 13, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(i + 4, 13, i + 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); } break; case 0x6C: case 0x6D: // right for (int i = 0; i < 16; i += 8) { metatileGraphic.drawLine(0, i, 13, i + 4, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(13, i + 4, 0, i + 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); } break; case 0x6E: case 0x6F: // left for (int i = 0; i < 16; i += 8) { metatileGraphic.drawLine(15, i, 1, i + 4, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(2, i + 4, 15, i + 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); } break; case 0x70: case 0x71: // all default: break; } break; case MetatileTypes::instadeath: metatileGraphic.drawLine(0, 0, 15, 15, Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 0, 0, 15, Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity), 1); // metatileGraphic.clear( // Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity)); break; case MetatileTypes::water: metatileGraphic.clear( Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity)); switch (indexNum) { case 0x9A: // u metatileGraphic.drawLine(8, 0, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 0, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x9B: // d metatileGraphic.setPixel(8, 15, Color(0xFF, 0, 0, Color::fullAlphaOpacity)); metatileGraphic.drawLine(8, 0, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 15, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x9C: // l metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x9D: // r metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; default: break; } break; case MetatileTypes::gust: metatileGraphic.clear( Color(0x00, 0x80, 0x00, Color::fullAlphaOpacity)); switch (indexNum) { case 0x78: // u // metatileGraphic.setPixel(8, 0, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(8, 0, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 0, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x79: // d metatileGraphic.setPixel(8, 15, Color(0xFF, 0, 0, Color::fullAlphaOpacity)); metatileGraphic.drawLine(8, 0, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 15, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7A: // l // metatileGraphic.setPixel(0, 8, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7B: // r // metatileGraphic.setPixel(15, 8, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 0, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7C: // ul // metatileGraphic.setPixel(0, 0, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(1, 1, 14, 14, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(1, 1, 8, 1, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(1, 1, 1, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7D: // ll // metatileGraphic.setPixel(0, 15, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(1, 14, 14, 1, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(1, 14, 1, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(1, 14, 8, 14, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7E: // lr // metatileGraphic.setPixel(15, 15, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(1, 1, 14, 14, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(14, 14, 8, 14, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(14, 14, 14, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case 0x7F: // ur // metatileGraphic.setPixel(15, 0, Color(0xFF, 0, 0, // Color::fullAlphaOpacity)); metatileGraphic.drawLine(1, 14, 14, 1, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(14, 1, 8, 1, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(14, 1, 14, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; default: break; } break; case MetatileTypes::conveyorLeft: metatileGraphic.clear( Color(0x80, 0x00, 0x80, Color::fullAlphaOpacity)); metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); break; case MetatileTypes::crumbling: // ignore the name -- these are actually the tiles that the Wrench can be // used on to reverse conveyors // behavior probably hardcoded by tile ID metatileGraphic.clear( Color(0xC0, 0xC0, 0x00, Color::fullAlphaOpacity)); switch (indexNum) { case 0x76: // normal metatileGraphic.drawLine(0, 4, 15, 4, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 4, 4, 0, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 4, 4, 7, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 12, 0, 12, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 12, 12, 8, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 12, 12, 15, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); break; case 0x77: // reversed metatileGraphic.drawLine(0, 4, 15, 4, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 4, 12, 0, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 4, 12, 7, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 12, 0, 12, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 12, 4, 8, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 12, 4, 15, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); break; default: break; } break; case MetatileTypes::crumblingStart: metatileGraphic.clear( Color(0x00, 0x00, 0x00, Color::fullAlphaOpacity)); for (int j = 0; j < 16; j += 2) { for (int k = 0; k < 16; k += 2) { if ((!(j % 4))) { // x is even: skip if y is odd if (((k % 4))) { continue; } } else { // x is odd: skip if y is even if ((!(k % 4))) { continue; } } metatileGraphic.setPixel(j, k, Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); metatileGraphic.setPixel(j + 1, k, Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); metatileGraphic.setPixel(j, k + 1, Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); metatileGraphic.setPixel(j + 1, k + 1, Color(0xFF, 0xFF, 0xFF, Color::fullAlphaOpacity)); } } break; case MetatileTypes::bombable: metatileGraphic.clear( Color(0xFF, 0x80, 0x00, Color::fullAlphaOpacity)); // large bomb if ((indexNum == 0x63) || (indexNum == 0x64) || (indexNum == 0x65)) { metatileGraphic.fillRect(3, 5, 11, 10, Color(0, 0, 0, Color::fullAlphaOpacity), Graphic::noTransUpdate); metatileGraphic.drawLine(8, 5, 8, 2, Color(0, 0, 0, Color::fullAlphaOpacity), 1); } // regular bomb else { metatileGraphic.fillRect(5, 5, 7, 7, Color(0, 0, 0, Color::fullAlphaOpacity), Graphic::noTransUpdate); metatileGraphic.drawLine(8, 5, 8, 2, Color(0, 0, 0, Color::fullAlphaOpacity), 1); } // ring if (indexNum == 0x9E) { metatileGraphic.drawRectBorder(7, 7, 3, 3, Color(0xFF, 0xFF, 0, Color::fullAlphaOpacity), 1, Graphic::noTransUpdate); } break; case MetatileTypes::conveyorRight: metatileGraphic.clear( Color(0x80, 0x00, 0x80, Color::fullAlphaOpacity)); switch (indexNum) { case 0x74: metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); break; case 0x75: metatileGraphic.drawLine(0, 8, 15, 8, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 0, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(15, 8, 8, 15, Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity), 1); break; default: break; } break; case MetatileTypes::napalm: metatileGraphic.clear( Color(0xFF, 0x80, 0x80, Color::fullAlphaOpacity)); metatileGraphic.fillRect(5, 5, 7, 7, Color(0, 0, 0, Color::fullAlphaOpacity), Graphic::noTransUpdate); metatileGraphic.drawLine(8, 5, 8, 2, Color(0, 0, 0, Color::fullAlphaOpacity), 1); break; case MetatileTypes::downOnly: metatileGraphic.clear( Color(0x00, 0x00, 0x00, Color::fullAlphaOpacity)); // metatileGraphic.fillRect(8, 0, 1, 16, // Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), // Graphic::noTransUpdate); metatileGraphic.drawLine(8, 0, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 15, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 15, 15, 8, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 1); break; case MetatileTypes::bigGust: metatileGraphic.clear( Color(0x80, 0xFF, 0x80, Color::fullAlphaOpacity)); metatileGraphic.drawLine(8, 0, 8, 15, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(0, 8, 8, 0, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); metatileGraphic.drawLine(8, 0, 15, 8, Color(0x00, 0x00, 0xFF, Color::fullAlphaOpacity), 1); break; case MetatileTypes::typeD: case MetatileTypes::type10: case MetatileTypes::type12: metatileGraphic.drawLine(0, 0, 15, 15, Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity), 1); break; default: break; } metatileGraphic.regenerateTransparencyModel(); }
void MetatilePickerLayeredGraphicScene::render(Graphic& dst, Box srcbox, double scale) { dst.clear(); int metatileNum = 0; for (int j = 0; j < metatilesPerColumn_; j++) { for (int i = 0; i < metatilesPerRow_; i++) { if (bgLayerEnabled_) { dst.blit(metatilesVisualBG_[metatileNum], Box(i * MetatileStructure::metatileWidth, j * MetatileStructure::metatileHeight, MetatileStructure::metatileWidth, MetatileStructure::metatileHeight), Graphic::transUpdate); } if (fgLayerEnabled_) { dst.blit(metatilesVisualFG_[metatileNum], Box(i * MetatileStructure::metatileWidth, j * MetatileStructure::metatileHeight, MetatileStructure::metatileWidth, MetatileStructure::metatileHeight), Graphic::transUpdate); } if (effectLayerEnabled_) { dst.blit(metatilesEffect_[metatileNum], Box(i * MetatileStructure::metatileWidth, j * MetatileStructure::metatileHeight, MetatileStructure::metatileWidth, MetatileStructure::metatileHeight), Graphic::noTransUpdate); } if (verticalSolidityLayerEnabled_) { dst.blit(metatilesVerticalSolidity_[metatileNum], Box(i * MetatileStructure::metatileWidth, j * MetatileStructure::metatileHeight, MetatileStructure::metatileWidth, MetatileStructure::metatileHeight), Graphic::noTransUpdate); } if (horizontalSolidityLayerEnabled_) { dst.blit(metatilesHorizontalSolidity_[metatileNum], Box(i * MetatileStructure::metatileWidth, j * MetatileStructure::metatileHeight, MetatileStructure::metatileWidth, MetatileStructure::metatileHeight), Graphic::noTransUpdate); } ++metatileNum; } } if (gridLayerEnabled_) { gridLayer_.render(dst, Box(srcbox.x(), srcbox.y(), dst.w(), dst.h()), 1.00); } if ((highlightedMetatileBoxEnabled_)) { dst.drawRectBorder(metatileIndexToX(highlightedMetatileIndex_), metatileIndexToY(highlightedMetatileIndex_), MetatileStructure::metatileWidth, MetatileStructure::metatileHeight, Color(0xFF, 0xFF, 0x00, Color::fullAlphaOpacity), 2); } if ((toolManager_->currentTool() == LevelEditorTools::metatilePaint)) { dst.drawRectBorder(metatileIndexToX(toolManager_->pickedMetatileIndex()), metatileIndexToY(toolManager_->pickedMetatileIndex()), MetatileStructure::metatileWidth, MetatileStructure::metatileHeight, Color(0xFF, 0x00, 0x00, Color::fullAlphaOpacity), 2); } }