diff --git a/Bin/AIRPORT.bin b/Bin/AIRPORT.bin index c02354b..011674c 100644 Binary files a/Bin/AIRPORT.bin and b/Bin/AIRPORT.bin differ diff --git a/Levels/LEVEL2.LVL b/Levels/LEVEL2.LVL index 34361d3..bf395cd 100644 Binary files a/Levels/LEVEL2.LVL and b/Levels/LEVEL2.LVL differ diff --git a/Source/Exe/AIRPORT.elf b/Source/Exe/AIRPORT.elf index ac15fd6..59d0f21 100755 Binary files a/Source/Exe/AIRPORT.elf and b/Source/Exe/AIRPORT.elf differ diff --git a/Source/Exe/AIRPORT.iso b/Source/Exe/AIRPORT.iso index 7d4ae09..685c0b1 100644 Binary files a/Source/Exe/AIRPORT.iso and b/Source/Exe/AIRPORT.iso differ diff --git a/Source/Game.c b/Source/Game.c index ecaff3a..f36b99e 100644 --- a/Source/Game.c +++ b/Source/Game.c @@ -1519,15 +1519,6 @@ static void GameLoadLevel(const char* path) levelBuffer[k] |= (ptrBuffer[j] << 8); } } - - { - size_t i; - - for (i = 0; i < (GameLevelSize * sizeof (uint16_t)); i++) - { - Serial_printf("levelBuffer[%d] = 0x%02X\n", i, levelBuffer[i]); - } - } } /* ****************************************************************************************** @@ -3308,7 +3299,8 @@ bool GamePathToTile(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const ptrFli TILE_TAXIWAY_4WAY_CROSSING, TILE_PARKING_2, TILE_RWY_HOLDING_POINT, - TILE_RWY_HOLDING_POINT_2 + TILE_RWY_HOLDING_POINT_2, + TILE_TAXIWAY_CORNER_GRASS_3 }; uint8_t i; @@ -3452,6 +3444,7 @@ bool GamePathToTile(TYPE_PLAYER* const ptrPlayer, TYPE_FLIGHT_DATA* const ptrFli TILE_PARKING_2 | TILE_MIRROR_FLAG, TILE_RWY_HOLDING_POINT | TILE_MIRROR_FLAG, TILE_RWY_HOLDING_POINT_2 | TILE_MIRROR_FLAG, + TILE_TAXIWAY_CORNER_GRASS_3 | TILE_MIRROR_FLAG }; if (SystemContains_u8( levelBuffer[ptrPlayer->Waypoints[i]], diff --git a/Source/MapEditor/buildings.ini b/Source/MapEditor/buildings.ini index 5eb7823..96cbe79 100644 --- a/Source/MapEditor/buildings.ini +++ b/Source/MapEditor/buildings.ini @@ -2,3 +2,9 @@ path = "../../Sprites/BLDNGS1.bmp" building0 = "Nothing" building1 = "Hangar" +building2 = "ILS" +building3 = "ATC Tower" +building4 = "ATC Localizer" +building5 = "Terminal" +building6 = "Terminal2" +building7 = "Gate" diff --git a/Source/MapEditor/mainwindow.cpp b/Source/MapEditor/mainwindow.cpp index 923fca4..7282c6a 100644 --- a/Source/MapEditor/mainwindow.cpp +++ b/Source/MapEditor/mainwindow.cpp @@ -26,7 +26,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(&gscene, SIGNAL(positionClicked(QPointF)), this, SLOT(onMapItemClicked(QPointF))); connect(&gscene, SIGNAL(noItemSelected(void)), this, SLOT(onNoItemSelected(void))); - connect(&gscene, SIGNAL(updateSelectedItem(void)), this, SLOT(onListItemSelected(void))); + connect(&gscene, SIGNAL(updateSelectedItem(Qt::MouseButton)), this, SLOT(onListItemSelected(Qt::MouseButton))); // Configure keyboard shortcuts. connect(&tileSet, SIGNAL(activated()), this, SLOT(onListItemSelected(void))); @@ -39,6 +39,7 @@ MainWindow::MainWindow(QWidget *parent) : MainWindow::~MainWindow() { +#if 0 foreach (QGraphicsTextItem* it, textItems) { if (it != nullptr) @@ -46,6 +47,7 @@ MainWindow::~MainWindow() delete it; } } +#endif } void MainWindow::loadBuildingData(void) @@ -89,14 +91,14 @@ void MainWindow::onShowNumbers(int) processMapFile(map_buffer); } -void MainWindow::onMapItemClicked(QPointF pos) +void MainWindow::onMapItemClicked(QPointF position) { QPoint realPos; - pos.setX(pos.x() - (TILE_SIZE / 2)); + position.setX(position.x() - (TILE_SIZE / 2)); - realPos.setX(static_cast(pos.x() + (pos.y() * 2))); - realPos.setY(static_cast((pos.y() * 2) - pos.x())); + realPos.setX(static_cast(position.x() + (position.y() * 2))); + realPos.setY(static_cast((position.y() * 2) - position.x())); int tile_no = 0; @@ -114,30 +116,69 @@ void MainWindow::onMapItemClicked(QPointF pos) } } -void MainWindow::onListItemSelected(void) +void MainWindow::onListItemSelected(const Qt::MouseButton button) { - foreach (const QListWidgetItem* const it, ui.tileList->selectedItems()) + QListWidget* listWidget; + + switch (button) { - if (it != nullptr) + case Qt::LeftButton: + listWidget = ui.tileList; + break; + + case Qt::RightButton: + listWidget = ui.buildingList; + break; + + default: + listWidget = nullptr; + break; + } + + if (listWidget != nullptr) + { + foreach (const QListWidgetItem* const it, listWidget->selectedItems()) { - if (selected_item != -1) + if (it != nullptr) { - const int map_buffer_pos = static_cast(DATA_HEADER_SIZE - + (static_cast(selected_item + 1) * sizeof(quint16))); - //map_buffer_pos++; // MSB: building data, LSB: terrain data. - - if (map_buffer_pos < map_buffer.count()) + if (selected_item != -1) { - const char row = static_cast(ui.tileList->row(it)); + int map_buffer_pos; - map_buffer[map_buffer_pos] = row; - - if (ui.mirror_CheckBox->isChecked() ) + // MSB: building data, LSB: terrain data. + switch (button) { - map_buffer[map_buffer_pos] = map_buffer[map_buffer_pos] | TILE_MIRROR_FLAG; + case Qt::LeftButton: + map_buffer_pos = static_cast(DATA_HEADER_SIZE + + (static_cast(selected_item + 1) * sizeof(quint16))); + break; + + case Qt::RightButton: + map_buffer_pos = static_cast(DATA_HEADER_SIZE + + (static_cast(selected_item + 1) * sizeof(quint16))) - 1; + break; + + default: + map_buffer_pos = -1; + break; } - processMapFile(map_buffer); + if (map_buffer_pos != -1) + { + if (map_buffer_pos < map_buffer.count()) + { + const char row = static_cast(listWidget->row(it)); + + map_buffer[map_buffer_pos] = row; + + if (ui.mirror_CheckBox->isChecked() ) + { + map_buffer[map_buffer_pos] = map_buffer[map_buffer_pos] | TILE_MIRROR_FLAG; + } + + processMapFile(map_buffer); + } + } } } } @@ -317,12 +358,6 @@ void MainWindow::parseMapData(QDataStream& ds) char byte[2]; ds.readRawData(byte, 2); - qDebug() << "i = " + QString::number(i); - qDebug() << "j = " + QString::number(j); - qDebug() << QString::number(byte[0]); - qDebug() << QString::number(byte[1]); - qDebug() << ""; - buildingData.append(static_cast(byte[0])); addTile(static_cast(byte[1]), i, j); } @@ -489,7 +524,7 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j) NODATA, BUILDING_DATA(BUILDING_TERMINAL), BUILDING_DATA(BUILDING_TERMINAL_2), - BUILDING_DATA(BUILDING_GATE), + BUILDING_DATA(BUILDING_GATE) }; enum @@ -506,18 +541,20 @@ void MainWindow::addBuilding(quint8 CurrentBuilding, const int i, const int j) // Determine rendering order depending on Y value. const short x_bldg_offset = GameBuildingData[CurrentBuildingNoMirror].IsoPos.x; const short y_bldg_offset = GameBuildingData[CurrentBuildingNoMirror].IsoPos.y; - const short z_bldg_offset = GameBuildingData[CurrentBuildingNoMirror].IsoPos.z; + // Question: why is it needed to substract 16 to "z"? + const short z_bldg_offset = GameBuildingData[CurrentBuildingNoMirror].IsoPos.z - 16; IsometricPos buildingIsoPos; buildingIsoPos.x = static_cast(i << TILE_SIZE_BIT_SHIFT) + x_bldg_offset; - buildingIsoPos.y = static_cast(j << TILE_SIZE_BIT_SHIFT) - y_bldg_offset; + // Question: why is it needed to substract 1 to "j"? + buildingIsoPos.y = static_cast((j - 1) << TILE_SIZE_BIT_SHIFT) + y_bldg_offset; buildingIsoPos.z = z_bldg_offset; // Isometric -> Cartesian conversion - CartesianPos buildingCartPos = isometricToCartesian(buildingIsoPos); + const CartesianPos buildingCartPos = isometricToCartesian(buildingIsoPos); - QPixmap p = QPixmap(buildingPath); + const QPixmap p = QPixmap(buildingPath); QImage cropped = p.copy(GameBuildingData[CurrentBuildingNoMirror].u, GameBuildingData[CurrentBuildingNoMirror].v, @@ -807,22 +844,20 @@ void MainWindow::loadTilesetData(void) } } -void MainWindow::onAirportNameModified(QString name) +void MainWindow::onAirportNameModified(const QString name) { - if (map_buffer.isEmpty() ) + if (not map_buffer.isEmpty()) { - return; - } - - for (int i = 0x04, j = 0; i < 0x1C; i++) - { - if (j < name.count() ) + for (int i = 0x04, j = 0; i < 0x1C; i++) { - map_buffer[i] = name.at(j++).toLatin1(); - } - else - { - map_buffer[i] = '\0'; + if (j < name.count()) + { + map_buffer[i] = name.at(j++).toLatin1(); + } + else + { + map_buffer[i] = '\0'; + } } } } diff --git a/Source/MapEditor/mainwindow.h b/Source/MapEditor/mainwindow.h index 6b27128..ea71e59 100644 --- a/Source/MapEditor/mainwindow.h +++ b/Source/MapEditor/mainwindow.h @@ -85,12 +85,12 @@ private slots: void loadMap(void); void onCreateMap(void); void processMapFile(const QByteArray &); - void onMapItemClicked(QPointF); + void onMapItemClicked(QPointF position); void onNoItemSelected(void); - void onListItemSelected(void); + void onListItemSelected(const Qt::MouseButton button); void onSaveMap(void); void onShowNumbers(int); - void onAirportNameModified(QString); + void onAirportNameModified(const QString); void showError(const QString& error); void moveUp(void); }; diff --git a/Source/MapEditor/mainwindow.ui b/Source/MapEditor/mainwindow.ui index eb25f97..b860c69 100644 --- a/Source/MapEditor/mainwindow.ui +++ b/Source/MapEditor/mainwindow.ui @@ -76,9 +76,6 @@ Show numbers on map - - false - diff --git a/Source/MapEditor/mygraphicsscene.cpp b/Source/MapEditor/mygraphicsscene.cpp index d0241ae..dcc7d1c 100644 --- a/Source/MapEditor/mygraphicsscene.cpp +++ b/Source/MapEditor/mygraphicsscene.cpp @@ -11,12 +11,12 @@ MyGraphicsScene::~MyGraphicsScene() } -void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) +void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* const mouseEvent) { - QGraphicsItem *it = this->itemAt(mouseEvent->scenePos(), QTransform()); + const QGraphicsItem* const it = itemAt(mouseEvent->scenePos(), QTransform()); if (it != nullptr) - { + { emit positionClicked(mouseEvent->scenePos()); } else @@ -26,7 +26,7 @@ void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) } } -void MyGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) +void MyGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* const mouseEvent) { - emit updateSelectedItem(); + emit updateSelectedItem(mouseEvent->button()); } diff --git a/Source/MapEditor/mygraphicsscene.h b/Source/MapEditor/mygraphicsscene.h index 90dadea..ea416e0 100644 --- a/Source/MapEditor/mygraphicsscene.h +++ b/Source/MapEditor/mygraphicsscene.h @@ -14,13 +14,13 @@ public: ~MyGraphicsScene(); signals: - void positionClicked(QPointF); + void positionClicked(QPointF position); void noItemSelected(void); - void updateSelectedItem(void); + void updateSelectedItem(Qt::MouseButton button); private: - void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); - void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *); + void mousePressEvent(QGraphicsSceneMouseEvent * const mouseEvent); + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * const mouseEvent); }; diff --git a/Source/MapEditor/settings.ini b/Source/MapEditor/settings.ini index 5ad5294..f1b65ed 100644 --- a/Source/MapEditor/settings.ini +++ b/Source/MapEditor/settings.ini @@ -1,3 +1,3 @@ [app_settings] -last_dir=/home/xavier/Airport/Levels/LEVEL3.LVL +last_dir=/home/xavier/Airport/Levels/LEVEL2.LVL window_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5U\0\0\x2\xdb\0\0\0\xa5\0\0\0\x1d\0\0\x4<\0\0\x2\xa4\0\0\0\0\x2\0\0\0\x5V\0\0\0\0\0\0\0\x1d\0\0\x5U\0\0\x2\xdb) diff --git a/cdimg/DATA/LEVELS/LEVEL2.LVL b/cdimg/DATA/LEVELS/LEVEL2.LVL index 34361d3..bf395cd 100644 Binary files a/cdimg/DATA/LEVELS/LEVEL2.LVL and b/cdimg/DATA/LEVELS/LEVEL2.LVL differ diff --git a/cdimg/DATA/LEVELS/LEVEL3.LVL b/cdimg/DATA/LEVELS/LEVEL3.LVL index bd729fd..ec8a357 100644 Binary files a/cdimg/DATA/LEVELS/LEVEL3.LVL and b/cdimg/DATA/LEVELS/LEVEL3.LVL differ