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 } |