File indexing completed on 2024-02-18 04:03:24

0001 /*
0002     SPDX-FileCopyrightText: 2009 Mathias Kraus <k.hias@gmx.de>
0003     SPDX-FileCopyrightText: 2007-2008 Thomas Gallinari <tg8187@yahoo.fr>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "cell.h"
0009 
0010 Cell::Cell() : m_type(Granatier::Cell::WALL)
0011 {
0012     m_elements.clear();
0013 }
0014 
0015 Cell::~Cell()
0016 = default;
0017 
0018 bool Cell::isWalkable(Element* p_element) const
0019 {
0020 
0021     if(m_type == Granatier::Cell::WALL)
0022     {
0023         return false;
0024     }
0025     else if(!m_elements.isEmpty())
0026     {
0027         for(const auto& element: m_elements)
0028         {
0029             if(element->getType() == Granatier::Element::BLOCK ||
0030                 (element->getType() == Granatier::Element::BOMB && (p_element == nullptr || p_element != element)) ||
0031                 (element->getType() == Granatier::Element::PLAYER && (p_element == nullptr || p_element->getType() != Granatier::Element::PLAYER)))
0032             {
0033                 return false;
0034             }
0035         }
0036     }
0037     return true;
0038 }
0039 
0040 Granatier::Cell::Type Cell::getType() const
0041 {
0042     return m_type;
0043 }
0044 
0045 void Cell::setType(Granatier::Cell::Type p_type)
0046 {
0047     m_type = p_type;
0048 }
0049 
0050 QList <Element*> Cell::getElements() const
0051 {
0052     return m_elements;
0053 }
0054 
0055 QList <Element*> Cell::getElements(Granatier::Element::Type type) const
0056 {
0057     QList<Element*> elementsFound;
0058     for(const auto& element: m_elements)
0059     {
0060         if(element->getType() == type)
0061         {
0062             elementsFound.append(element);
0063         }
0064     }
0065     return elementsFound;
0066 }
0067 
0068 void Cell::setElement(Element* p_element)
0069 {
0070     if(!m_elements.contains(p_element))
0071     {
0072         m_elements.append(p_element);
0073     }
0074 }
0075 
0076 void Cell::removeElement(Element* p_element)
0077 {
0078     int index = m_elements.indexOf(p_element);
0079     if(index >= 0)
0080     {
0081         m_elements.removeAt(index);
0082     }
0083 }