TILE_TAXIWAY_CORNER_GRASS_3 added to accepted tiles list.

Building edition is now supported on MapEditor!
LEVEL2.LVL now has some buildings laying around.
This commit is contained in:
Xavier ASUS 2018-11-27 00:26:41 +01:00
parent f8f976763b
commit 3de2130b60
14 changed files with 101 additions and 70 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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]],

View File

@ -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"

View File

@ -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<int>(pos.x() + (pos.y() * 2)));
realPos.setY(static_cast<int>((pos.y() * 2) - pos.x()));
realPos.setX(static_cast<int>(position.x() + (position.y() * 2)));
realPos.setY(static_cast<int>((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<int>(DATA_HEADER_SIZE
+ (static_cast<unsigned long>(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<char>(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<int>(DATA_HEADER_SIZE
+ (static_cast<unsigned long>(selected_item + 1) * sizeof(quint16)));
break;
case Qt::RightButton:
map_buffer_pos = static_cast<int>(DATA_HEADER_SIZE
+ (static_cast<unsigned long>(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<char>(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<quint8>(byte[0]));
addTile(static_cast<quint8>(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<short>(i << TILE_SIZE_BIT_SHIFT) + x_bldg_offset;
buildingIsoPos.y = static_cast<short>(j << TILE_SIZE_BIT_SHIFT) - y_bldg_offset;
// Question: why is it needed to substract 1 to "j"?
buildingIsoPos.y = static_cast<short>((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';
}
}
}
}

View File

@ -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);
};

View File

@ -76,9 +76,6 @@
<property name="text">
<string>Show numbers on map</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>

View File

@ -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());
}

View File

@ -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);
};

View File

@ -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)

Binary file not shown.

Binary file not shown.