void AreaCombat::setupExtArea(const std::list<uint32_t>& list, uint32_t rows) { if (list.empty()) { return; } hasExtArea = true; MatrixArea* area = createArea(list, rows); //NORTH-WEST areas[NORTHWEST] = area; uint32_t maxOutput = std::max<uint32_t>(area->getCols(), area->getRows()) * 2; //NORTH-EAST MatrixArea* neArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, neArea, MATRIXOPERATION_MIRROR); areas[NORTHEAST] = neArea; //SOUTH-WEST MatrixArea* swArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, swArea, MATRIXOPERATION_FLIP); areas[SOUTHWEST] = swArea; //SOUTH-EAST MatrixArea* seArea = new MatrixArea(maxOutput, maxOutput); copyArea(swArea, seArea, MATRIXOPERATION_MIRROR); areas[SOUTHEAST] = seArea; }
MatrixArea* AreaCombat::createArea(const std::list<uint32_t>& list, uint32_t rows) { uint32_t cols; if (rows == 0) { cols = 0; } else { cols = list.size() / rows; } MatrixArea* area = new MatrixArea(rows, cols); uint32_t x = 0; uint32_t y = 0; for (uint32_t value : list) { if (value == 1 || value == 3) { area->setValue(y, x, true); } if (value == 2 || value == 3) { area->setCenter(y, x); } ++x; if (cols == x) { x = 0; ++y; } } return area; }
void CombatArea::setupExtArea(const std::list<uint32_t>& list, uint32_t rows) { if(list.empty()) return; //NORTH-WEST MatrixArea* area = createArea(list, rows); areas[Direction::NORTH_WEST] = area; uint32_t maxOutput = std::max(area->getCols(), area->getRows()) * 2; //NORTH-EAST MatrixArea* neArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, neArea, MATRIXOPERATION_MIRROR); areas[Direction::NORTH_EAST] = neArea; //SOUTH-WEST MatrixArea* swArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, swArea, MATRIXOPERATION_FLIP); areas[Direction::SOUTH_WEST] = swArea; //SOUTH-EAST MatrixArea* seArea = new MatrixArea(maxOutput, maxOutput); copyArea(swArea, seArea, MATRIXOPERATION_MIRROR); areas[Direction::SOUTH_EAST] = seArea; hasExtArea = true; }
MatrixArea* AreaCombat::createArea(const std::list<uint32_t>& list, uint32_t rows) { uint32_t cols = list.size() / rows; MatrixArea* area = new MatrixArea(rows, cols); uint32_t x = 0; uint32_t y = 0; for(std::list<uint32_t>::const_iterator it = list.begin(); it != list.end(); ++it) { if(*it == 1 || *it == 3) area->setValue(y, x, true); if(*it == 2 || *it == 3) area->setCenter(y, x); ++x; if(cols == x) { x = 0; ++y; } } return area; }
void AreaCombat::setupArea(const std::list<uint32_t>& list, const uint32_t& rows) { MatrixArea* area = createArea(list, rows); //NORTH areas[NORTH] = area; uint32_t maxOutput = std::max(area->getCols(), area->getRows()) * 2; //SOUTH MatrixArea* southArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, southArea, MATRIXOPERATION_ROTATE180); areas[SOUTH] = southArea; //EAST MatrixArea* eastArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, eastArea, MATRIXOPERATION_ROTATE90); areas[EAST] = eastArea; //WEST MatrixArea* westArea = new MatrixArea(maxOutput, maxOutput); copyArea(area, westArea, MATRIXOPERATION_ROTATE270); areas[WEST] = westArea; }