QTfrontend/net/hwmap.cpp
branchflibqtfrontend
changeset 8092 08960209db8c
parent 8070 66bc20d089fc
child 8094 6c5b4e69f03d
equal deleted inserted replaced
8091:e0a76056a633 8092:08960209db8c
    17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
    17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
    18  */
    18  */
    19 
    19 
    20 #include "hwconsts.h"
    20 #include "hwconsts.h"
    21 #include "hwmap.h"
    21 #include "hwmap.h"
       
    22 #include "frontlibpoller.h"
    22 
    23 
    23 HWMap::HWMap(QObject * parent) :
    24 HWMap::HWMap(QObject * parent) :
    24     TCPBase(false, parent)
    25     TCPBase(parent)
    25 {
    26 {
       
    27     m_conn = NULL;
       
    28     m_map = NULL;
    26 }
    29 }
    27 
    30 
    28 HWMap::~HWMap()
    31 HWMap::~HWMap()
    29 {
    32 {
       
    33     if(m_conn)
       
    34         flib_mapconn_destroy(m_conn);
       
    35     if(m_map)
       
    36         flib_map_destroy(m_map);
    30 }
    37 }
    31 
    38 
    32 bool HWMap::couldBeRemoved()
    39 bool HWMap::couldBeRemoved()
    33 {
    40 {
    34     return !m_hasStarted;
    41     return !m_hasStarted;
    35 }
    42 }
    36 
    43 
    37 void HWMap::getImage(const QString & seed, int filter, MapGenerator mapgen, int maze_size, const QByteArray & drawMapData)
    44 void HWMap::getImage(const QString & seed, int filter, int mapgen, int maze_size, const QByteArray & drawMapData)
    38 {
    45 {
    39     m_seed = seed;
    46     switch(mapgen)
    40     templateFilter = filter;
    47     {
    41     m_mapgen = mapgen;
    48         case MAPGEN_REGULAR: m_map =
    42     m_maze_size = maze_size;
    49                 flib_map_create_regular(
    43     if(mapgen == MAPGEN_DRAWN) m_drawMapData = drawMapData;
    50                     seed.toUtf8().constData()
    44     Start(true);
    51                     , "" // theme? here?
       
    52                     , filter);
       
    53                 break;
       
    54         case MAPGEN_MAZE: m_map =
       
    55                 flib_map_create_maze(
       
    56                     seed.toUtf8().constData()
       
    57                     , ""
       
    58                     , maze_size);
       
    59                 break;
       
    60         case MAPGEN_DRAWN: m_map =
       
    61                 flib_map_create_drawn(
       
    62                     seed.toUtf8().constData()
       
    63                     , ""
       
    64                     , (const uint8_t*)drawMapData.constData()
       
    65                     , drawMapData.size()
       
    66                     );
       
    67                 break;
       
    68         default:
       
    69             Q_ASSERT_X(false, "HWMap::getImage", "Unknown generator");
       
    70     }
       
    71 
       
    72     start(true);
    45 }
    73 }
    46 
    74 
    47 QStringList HWMap::getArguments()
    75 QStringList HWMap::getArguments()
    48 {
    76 {
       
    77     Q_ASSERT(m_conn);
       
    78 
       
    79     int ipc_port = flib_mapconn_getport(m_conn);
       
    80 
    49     QStringList arguments;
    81     QStringList arguments;
    50     arguments << cfgdir->absolutePath();
    82     arguments << cfgdir->absolutePath();
    51     arguments << QString("%1").arg(ipc_port);
    83     arguments << QString("%1").arg(ipc_port);
    52     arguments << "landpreview";
    84     arguments << "landpreview";
    53     return arguments;
    85     return arguments;
    54 }
    86 }
    55 
    87 
    56 void HWMap::onClientDisconnect()
    88 void HWMap::onSuccess(void *context, const uint8_t *bitmap, int numHedgehogs)
    57 {
    89 {
    58     if (readbuffer.size() == 128 * 32 + 1)
    90     qDebug("HWMap::onSuccess");
    59     {
    91     HWMap * hwMap = (HWMap *)context;
    60         quint8 *buf = (quint8*) readbuffer.constData();
    92 
    61         QImage im(buf, 256, 128, QImage::Format_Mono);
    93     QImage im(bitmap, MAPIMAGE_WIDTH, MAPIMAGE_HEIGHT, QImage::Format_Mono);
    62         im.setNumColors(2);
    94     im.setNumColors(2);
    63         emit HHLimitReceived(buf[128 * 32]);
    95     emit hwMap->HHLimitReceived(numHedgehogs);
    64         emit ImageReceived(im);
    96     emit hwMap->ImageReceived(im);
    65     }
    97 
       
    98     hwMap->clientDisconnected();
    66 }
    99 }
    67 
   100 
    68 void HWMap::SendToClientFirst()
   101 void HWMap::onFailure(void *context, const char *errormessage)
    69 {
   102 {
    70     SendIPC(QString("eseed %1").arg(m_seed).toUtf8());
   103     qDebug("HWMap::onFailure");
    71     SendIPC(QString("e$template_filter %1").arg(templateFilter).toUtf8());
   104     HWMap * hwMap = (HWMap *)context;
    72     SendIPC(QString("e$mapgen %1").arg(m_mapgen).toUtf8());
       
    73 
   105 
    74     switch (m_mapgen)
   106     hwMap->clientDisconnected();
    75     {
   107 }
    76         case MAPGEN_MAZE:
       
    77             SendIPC(QString("e$maze_size %1").arg(m_maze_size).toUtf8());
       
    78             break;
       
    79 
   108 
    80         case MAPGEN_DRAWN:
   109 void HWMap::onEngineStart()
    81         {
   110 {
    82             QByteArray data = m_drawMapData;
   111     qDebug("HWMap::onEngineStart");
    83             while(data.size() > 0)
   112     m_conn = flib_mapconn_create(m_map);
    84             {
   113     flib_mapconn_onSuccess(m_conn, onSuccess, this);
    85                 QByteArray tmp = data;
   114     flib_mapconn_onFailure(m_conn, onFailure, this);
    86                 tmp.truncate(200);
       
    87                 SendIPC("edraw " + tmp);
       
    88                 data.remove(0, 200);
       
    89             }
       
    90             break;
       
    91         }
       
    92         default:
       
    93             ;
       
    94     }
       
    95 
   115 
    96     SendIPC("!");
   116     new FrontLibPoller((void (*)(void *))flib_mapconn_tick, m_conn, this);
    97 }
   117 }