Image::Image(libfalltergeist::Frm::File* frm, unsigned int direction) : Falltergeist::UI::Base() { if (direction >= frm->directions()->size()) { throw Exception("Image::Image(frm, direction) - direction not found: " + std::to_string(direction)); } // direction texture setTexture(new Graphics::Texture(frm->directions()->at(direction)->width(), frm->directions()->at(direction)->height())); // full frm texture Graphics::Texture* texture = new Graphics::Texture(frm->width(), frm->height()); texture->loadFromRGBA(frm->rgba(ResourceManager::getInstance()->palFileType("color.pal"))); // direction offset in full texture unsigned int y = 0; for (unsigned int i = 0; i != direction; ++i) { y += frm->directions()->at(direction)->height(); } texture->copyTo(_texture, 0, 0, 0, y, frm->directions()->at(direction)->width(), frm->directions()->at(direction)->height()); delete texture; auto dir = frm->directions()->at(direction); setOffset( frm->offsetX(direction) + dir->shiftX(), frm->offsetY(direction) + dir->shiftY() ); }
Image::Image(Format::Frm::File *frm, unsigned int direction) : Falltergeist::UI::Base(), _sprite(frm) { if (direction >= frm->directions()->size()) { //throw Exception("Image::Image(frm, direction) - direction not found: " + std::to_string(direction)); direction = 0; } auto dir = frm->directions()->at(direction); setOffset(frm->offsetX(direction) + dir->shiftX(), frm->offsetY(direction) + dir->shiftY()); }
w = txt->Width; if (h == DIM_UNDEF) h = txt->Height; if (scaled) dim = aspectWidth * (w >> 1); else dim = w >> 1; q->ul.x = x - dim; q->br.x = x + dim; if (scaled) dim = aspectHeight * (h >> 1); else dim = h >> 1; q->ul.y = shiftY(y) - dim; q->br.y = shiftY(y) + dim; } else { if (w == DIM_UNDEF) w = txt->Width; if (h == DIM_UNDEF) h = txt->Height; q->ul.x = x; if (scaled) q->br.x = x + aspectWidth * w; else q->br.x = x + w; q->ul.y = shiftY(y); if (scaled)
Animation::Animation(std::string frmName, unsigned int direction) : ActiveUI() { auto frm = ResourceManager::frmFileType(frmName); setTexture(ResourceManager::texture(frmName)); int xOffset = frm->shiftX(direction); int yOffset = frm->shiftY(direction); // Смещение кадра в текстуре анимации unsigned int x = 0; unsigned int y = 0; for (unsigned int d = 0; d != direction; ++d) { y += frm->height(d); //? может i - 1 } for (auto f = 0; f != frm->framesPerDirection(); ++f) { xOffset += frm->offsetX(direction, f); yOffset += frm->offsetY(direction, f); auto frame = new AnimationFrame(); frame->setWidth(frm->width(direction, f)); frame->setHeight(frm->height(direction, f)); frame->setXOffset(xOffset); frame->setYOffset(yOffset); frame->setY(y); frame->setX(x); auto fps = frm->framesPerSecond(); if (fps == 0) { frame->setDuration(1000); } else { frame->setDuration(std::round(1000.0/static_cast<double>(frm->framesPerSecond()))); } x += frm->width(direction); frames()->push_back(frame); } if (frm->animatedPalette()) { AnimatedPalette* palette=Game::getInstance()->animatedPalette(); auto masks = frm->animatedMasks(); if ((*masks)[libfalltergeist::FrmFileType::MASK_MONITOR] != NULL) { for (auto i=0; i<5; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color((*masks)[libfalltergeist::FrmFileType::MASK_MONITOR][j],i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _monitorTextures.push_back(texture); } } if ((*masks)[libfalltergeist::FrmFileType::MASK_SLIME] != NULL) { for (auto i=0; i<4; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color(((*masks)[libfalltergeist::FrmFileType::MASK_SLIME][j]),i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _slimeTextures.push_back(texture); } } if ((*masks)[libfalltergeist::FrmFileType::MASK_SHORE] != NULL) { for (auto i=0; i<6; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color(((*masks)[libfalltergeist::FrmFileType::MASK_SHORE][j]),i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _shoreTextures.push_back(texture); } } if ((*masks)[libfalltergeist::FrmFileType::MASK_FIRE_SLOW] != NULL) { for (auto i=0; i<5; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color(((*masks)[libfalltergeist::FrmFileType::MASK_FIRE_SLOW][j]),i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _fireSlowTextures.push_back(texture); } } if ((*masks)[libfalltergeist::FrmFileType::MASK_FIRE_FAST] != NULL) { for (auto i=0; i<5; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color(((*masks)[libfalltergeist::FrmFileType::MASK_FIRE_FAST][j]),i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _fireFastTextures.push_back(texture); } } if ((*masks)[libfalltergeist::FrmFileType::MASK_REDDOT] != NULL) { for (auto i=0; i<16; i++) { unsigned int* mask = new unsigned int[frm->width() * frm->height()](); //modify for (unsigned int j = 0; j< frm->width() * frm->height(); j++) { mask[j] = palette->color(((*masks)[libfalltergeist::FrmFileType::MASK_REDDOT][j]),i); } //set auto texture = new Texture(frm->width(), frm->height()); texture->loadFromRGBA(mask); _reddotTextures.push_back(texture); } } } }