File indexing completed on 2024-04-21 04:02:01

0001 /*
0002     KBlackBox - A simple game inspired by an emacs module
0003 
0004     SPDX-FileCopyrightText: 2007 Nicolas Roffet <nicolas-kde@roffet.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "kbbgraphicsitemballrepository.h"
0010 
0011 
0012 
0013 #include <QGraphicsScene>
0014 
0015 
0016 #include "kbbgraphicsitemonbox.h"
0017 #include "kbbgraphicsitemset.h"
0018 #include "kbbscalablegraphicwidget.h"
0019 
0020 
0021 
0022 //
0023 // Constructor / Destructor
0024 //
0025 
0026 KBBGraphicsItemBallRepository::KBBGraphicsItemBallRepository(KBBScalableGraphicWidget* parent, KBBThemeManager* themeManager) : KBBGraphicsItem(KBBScalableGraphicWidget::informationBackground, parent->scene(), themeManager)
0027 {
0028     m_parent = parent;
0029     m_themeManager = themeManager;
0030     m_width = 1;
0031     m_height = 1;
0032     m_ballToPlace = 0;
0033 
0034     m_ballsOutside = new KBBGraphicsItemSet(parent->scene());
0035 }
0036 
0037 
0038 KBBGraphicsItemBallRepository::~KBBGraphicsItemBallRepository()
0039 {
0040     delete m_ballsOutside;
0041 }
0042 
0043 
0044 
0045 //
0046 // Public
0047 //
0048 
0049 int KBBGraphicsItemBallRepository::ballToTake() const
0050 {
0051     return m_ballsOutside->anyItemPosition();
0052 }
0053 
0054 
0055 void KBBGraphicsItemBallRepository::fillBallsOutside(int placed)
0056 {
0057     int i = m_columns*m_rows;
0058     while ((m_ballsOutside->count()+placed)<m_ballToPlace) {
0059         if (!(m_ballsOutside->containsVisible(i))) {
0060             KBBGraphicsItemOnBox* b = new KBBGraphicsItemOnBox(KBBScalableGraphicWidget::playerBall, m_parent, m_themeManager, i, m_columns, m_rows);
0061             m_ballsOutside->insert(b);
0062             b->setPos(x() + ((i - m_columns*m_rows) / m_height)*KBBScalableGraphicWidget::RATIO, y() + ((i - m_columns*m_rows) % m_height)*KBBScalableGraphicWidget::RATIO);
0063         }
0064         i++;
0065     }
0066 }
0067 
0068 
0069 void KBBGraphicsItemBallRepository::newGame(int columns, int rows, int balls)
0070 {
0071     m_columns = columns;
0072     m_rows = rows;
0073 
0074     m_ballsOutside->clear();
0075 
0076     m_ballToPlace = balls;
0077     setTransform(QTransform::fromScale(1./m_width, 1./m_height), true);
0078 
0079     m_height = (rows/2);
0080     if (rows % 2 > 0)
0081         m_height++;
0082     m_width = balls/m_height;
0083     if (balls % m_height > 0)
0084         m_width++;
0085 
0086     setTransform(QTransform::fromScale(m_width/1., m_height/1.), true);
0087 
0088     setPos((-(m_width+1)*KBBScalableGraphicWidget::RATIO), KBBScalableGraphicWidget::RATIO);
0089 
0090     fillBallsOutside(0);
0091 }
0092 
0093 
0094 void KBBGraphicsItemBallRepository::removeBall(int outsidePosition)
0095 {
0096     m_ballsOutside->remove(outsidePosition);
0097 }
0098 
0099 #include "moc_kbbgraphicsitemballrepository.cpp"