File indexing completed on 2024-04-28 04:04:39

0001 /*
0002     This file is part of the game 'KTron'
0003 
0004     SPDX-FileCopyrightText: 1998-2000 Matthias Kiefer <matthias.kiefer@gmx.de>
0005     SPDX-FileCopyrightText: 2005 Benjamin C. Meyer <ben at meyerhome dot net>
0006     SPDX-FileCopyrightText: 2008-2009 Stas Verberkt <legolas at legolasweb dot nl>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 
0010 */
0011 
0012 #include "snakepart.h"
0013 
0014 #include "ksnakeduel_debug.h"
0015 
0016 SnakePart::SnakePart(int playerNumber) : Object(ObjectType::SnakePart)
0017 {
0018     initialize();
0019 
0020     this->m_playerNumber = playerNumber;
0021 }
0022 
0023 //
0024 // Init
0025 //
0026 
0027 void SnakePart::initialize()
0028 {
0029     setPartType(SnakePartType::Empty);
0030     setPartTop(false);
0031     setPartBottom(false);
0032     setPartLeft(false);
0033     setPartRight(false);
0034 }
0035 
0036 //
0037 // Getters / Setters
0038 //
0039 
0040 int SnakePart::getPlayerNumber()
0041 {
0042     return this->m_playerNumber;
0043 }
0044 
0045 SnakePartType::Types SnakePart::getPartType() const
0046 {
0047     return m_partType;
0048 }
0049 
0050 void SnakePart::setPartType(SnakePartType::Types type)
0051 {
0052     m_partType = type;
0053 }
0054 
0055 bool SnakePart::getPartTop() const
0056 {
0057     return m_partTop;
0058 }
0059 
0060 void SnakePart::setPartTop(bool value)
0061 {
0062     m_partTop = value;
0063 }
0064 
0065 bool SnakePart::getPartBottom() const
0066 {
0067     return m_partBottom;
0068 }
0069 
0070 void SnakePart::setPartBottom(bool value)
0071 {
0072     m_partBottom = value;
0073 }
0074 
0075 bool SnakePart::getPartLeft() const
0076 {
0077     return m_partLeft;
0078 }
0079 
0080 void SnakePart::setPartLeft(bool value)
0081 {
0082     m_partLeft = value;
0083 }
0084 
0085 bool SnakePart::getPartRight() const
0086 {
0087     return m_partRight;
0088 }
0089 
0090 void SnakePart::setPartRight(bool value)
0091 {
0092     m_partRight = value;
0093 }
0094 
0095 //
0096 // Decode type
0097 //
0098 
0099 void SnakePart::generateSVGName()
0100 {
0101     setSVGName(decodePart());
0102 }
0103 
0104 QString SnakePart::decodePart()
0105 {
0106     QString name;
0107 
0108     // Player
0109     if (getPlayerNumber() == 0)
0110     {
0111         name = QStringLiteral( "tron1-" );
0112     }
0113     else if (getPlayerNumber() == 1)
0114     {
0115         name = QStringLiteral( "tron2-" );
0116     }
0117 
0118     // Heads (or tails)
0119     if (getPartType() == SnakePartType::Head)
0120     {
0121         if (getPartTop() && getPartLeft() && getPartRight())
0122         {
0123             name += QLatin1String( "head-north" );
0124         }
0125         else if (getPartBottom() && getPartLeft() && getPartRight())
0126         {
0127             name += QLatin1String( "head-south" );
0128         }
0129         else if (getPartTop() && getPartBottom() && getPartLeft())
0130         {
0131             name += QLatin1String( "head-west" );
0132         }
0133         else if (getPartTop() && getPartBottom() && getPartRight())
0134         {
0135             name += QLatin1String( "head-east" );
0136         }
0137     }
0138     else if (getPartType() == SnakePartType::Hole)
0139     {
0140         if (getPartTop() && getPartLeft() && getPartRight())
0141         {
0142             name += QLatin1String( "tail-south" );
0143         }
0144         else if (getPartBottom() && getPartLeft() && getPartRight())
0145         {
0146             name += QLatin1String( "tail-north" );
0147         }
0148         else if (getPartTop() && getPartBottom() && getPartLeft())
0149         {
0150             name += QLatin1String( "tail-east" );
0151         }
0152         else if (getPartTop() && getPartBottom() && getPartRight())
0153         {
0154             name += QLatin1String( "tail-west" );
0155         }
0156     }
0157     else if (getPartType() == SnakePartType::Tail)
0158     {
0159         if (getPartTop() && getPartLeft() && getPartRight())
0160         {
0161             name += QLatin1String( "tail-south2" );
0162         }
0163         else if (getPartBottom() && getPartLeft() && getPartRight())
0164         {
0165             name += QLatin1String( "tail-north2" );
0166         }
0167         else if (getPartTop() && getPartBottom() && getPartLeft())
0168         {
0169             name += QLatin1String( "tail-east2" );
0170         }
0171         else if (getPartTop() && getPartBottom() && getPartRight())
0172         {
0173             name += QLatin1String( "tail-west2" );
0174         }
0175     }
0176     else if (getPartType() == SnakePartType::Body)
0177     {
0178         // Bodys
0179         if (getPartTop() && getPartBottom())
0180         {
0181             name += QLatin1String( "body-h" );
0182         }
0183         else if (getPartLeft() && getPartRight())
0184         {
0185             name += QLatin1String( "body-v" );
0186         }
0187         else if (getPartLeft() && getPartTop())
0188         {
0189             name += QLatin1String( "body-nw" );
0190         }
0191         else if (getPartTop() && getPartRight())
0192         {
0193             name += QLatin1String( "body-ne" );
0194         }
0195         else if (getPartLeft() && getPartBottom())
0196         {
0197             name += QLatin1String( "body-sw" );
0198         }
0199         else if (getPartBottom() && getPartRight())
0200         {
0201             name += QLatin1String( "body-se" );
0202         }
0203     }
0204 
0205     return name;
0206 }