Skip to content
Snippets Groups Projects
Commit 2ea0c586 authored by TheUltimateOptimist's avatar TheUltimateOptimist
Browse files

basic leveleditor

parent c44f1798
No related branches found
No related tags found
2 merge requests!38Merge the level editor,!29Merge main into box2d to implement physics
......@@ -108,6 +108,9 @@ else()
)
endif()
# leveleditor
add_subdirectory(leveleditor)
# writelevel
add_executable(writelevel ${PROJECT_SOURCE_DIR}/writelevel.cpp)
target_include_directories(writelevel
......
......@@ -57,3 +57,6 @@ CMake kann mit verschiedenen Optionen konfiguriert werden:
cmake .. -DCMAKE_BUILD_TYPE=Release # Release-Build
cmake .. -DCMAKE_BUILD_TYPE=Debug # Debug-Build
```
## Prerequisites for Leveleditor
- QT 6: ```sudo apt install qt6-base-dev```
\ No newline at end of file
# Find Qt
find_package(Qt6 REQUIRED COMPONENTS Widgets)
file(GLOB_RECURSE LEVELEDITOR_SOURCES
"${PROJECT_SOURCE_DIR}/leveleditor/src/*.cpp"
"${PROJECT_SOURCE_DIR}/leveleditor/src/*.hpp"
)
# Add executable
add_executable(editor ${LEVELEDITOR_SOURCES})
# Link Qt libraries
target_link_libraries(editor PRIVATE Qt6::Widgets)
#include <QGraphicsScene>
#include <QVBoxLayout>
#include <QGraphicsView>
#include "TileProvider.hpp"
#include "MainWindow.hpp"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
// Create the main widget and layout
QWidget *centralWidget = new QWidget(this);
QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
setWindowTitle("Level Editor");
QGraphicsScene* scene = new QGraphicsScene(this);
scene->setSceneRect(0, 0, 400, 400); // Set the scene dimensions
TileProvider tileprovider = TileProvider::from_spritesheet("spritesheet.h5");
QPixmap pixmap = tileprovider.get_tile(0);
QGraphicsPixmapItem* pixmapitem = scene->addPixmap(pixmap);
// Create a view to display the scene
QGraphicsView* view = new QGraphicsView(scene, this);
view->setFixedSize(300, 300);
view->scale(10, 10);
mainLayout->addWidget(view);
setCentralWidget(centralWidget);
}
\ No newline at end of file
#include <QMainWindow>
class MainWindow : public QMainWindow {
public:
MainWindow(QWidget *parent = nullptr);
};
\ No newline at end of file
#include "Tile.hpp"
#include <iostream>
Tile::Tile(const QPixmap &pixmap, uint8_t id) : QGraphicsPixmapItem(pixmap) {}
void Tile::mousePressEvent(QGraphicsSceneMouseEvent *event) {
std::cout << "clicked" << std::endl;
}
#include <QApplication>
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneMouseEvent>
class Tile : public QGraphicsPixmapItem {
public:
explicit Tile(const QPixmap& pixmap, uint8_t id);
protected:
// Override mousePressEvent to handle mouse clicks
void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
};
\ No newline at end of file
#include "TileProvider.hpp"
TileProvider::TileProvider(std::vector<std::vector<uint32_t>> sprites) : sprites(sprites){}
QPixmap TileProvider::get_tile(uint8_t id) {
QImage image(16, 16, QImage::Format::Format_ARGB32);
for (int y = 0; y < 16; y++) {
for (int x = 0; x < 16; x++) {
image.setPixel(x, y, 0xFF228B22);
}
}
return QPixmap::fromImage(image);
}
TileProvider TileProvider::from_spritesheet(const std::string path)
{
return TileProvider({});
}
#include <QPixmap>
#include <vector>
class TileProvider {
public:
TileProvider(std::vector<std::vector<uint32_t>> sprites);
QPixmap get_tile(uint8_t id);
TileProvider static from_spritesheet(const std::string path);
private:
std::vector<std::vector<uint32_t>> sprites;
};
\ No newline at end of file
#include <QApplication>
#include "MainWindow.hpp"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.resize(320, 320); // Adjust size as needed
window.show();
return app.exec();
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment