/
mainwindow.cpp
98 lines (80 loc) · 2.68 KB
/
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "mainwindow.hpp"
#include "screen.hpp"
#include <systems/systemmanager.hpp>
#include <systems/movementinputhandler.hpp>
#include <systems/dropbombinputhandler.hpp>
#include <QVBoxLayout>
#include <QTimer>
#include <QKeyEvent>
#include <QDebug>
#include <QTime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QVBoxLayout* layout = new QVBoxLayout;
m_screen = new Screen;
layout->addWidget(m_screen);
QWidget* w = new QWidget;
w->setLayout(layout);
setCentralWidget(w);
SystemManager::addScreenDisplaySystem(m_screen);
MovementInputHandler* movementInputHandler = new MovementInputHandler;
currentKeyChanged().connect(std::bind(&MovementInputHandler::setCurrentKey, movementInputHandler, std::placeholders::_1));
SystemManager::add(SystemManager::up_system(movementInputHandler));
DropBombInputHandler* dropBombInputHandler = new DropBombInputHandler;
currentKeyChanged().connect(std::bind(&DropBombInputHandler::setCurrentKey, dropBombInputHandler, std::placeholders::_1));
SystemManager::add(SystemManager::up_system(dropBombInputHandler));
SystemManager::addMovementSystem();
SystemManager::addPhysicsSystem();
SystemManager::addLifeTimeManager();
SystemManager::addBombTrigger();
startTimer();
}
MainWindow::~MainWindow()
{}
MainWindow::type_signal_current_key& MainWindow::currentKeyChanged()
{
return m_currentKeyChanged;
}
void MainWindow::startTimer() {
m_majTimer = new QTimer(this);
m_majTimer->setInterval(s_dt);
connect(m_majTimer, SIGNAL(timeout()), this, SLOT(onMajTimerTimeout()));
m_majTimer->start();
}
namespace
{
QBomberMan::KEYS convertKey(QKeyEvent* evt)
{
// QString keyAsHex = QString("%1").arg(evt->key(), 0, 16);
// qDebug() << keyAsHex;
switch(evt->key())
{
case Qt::Key_Up: return QBomberMan::UP;
case Qt::Key_Down: return QBomberMan::DOWN;
case Qt::Key_Left: return QBomberMan::LEFT;
case Qt::Key_Right: return QBomberMan::RIGHT;
case Qt::Key_Space: return QBomberMan::SPACE;
default: return QBomberMan::NONE;
}
}
}
void MainWindow::keyPressEvent(QKeyEvent* evt)
{
// qDebug() << "MainWindow::keyPressEvent()";
currentKeyChanged()(convertKey(evt));
}
void MainWindow::keyReleaseEvent(QKeyEvent* evt)
{
// qDebug() << "MainWindow::keyReleaseEvent()";
Q_UNUSED(evt);
currentKeyChanged()(QBomberMan::NONE);
}
void MainWindow::onMajTimerTimeout()
{
// QTime t = QTime::currentTime();
m_screen->resetImage();
SystemManager::update(s_dt);
m_screen->update();
// qDebug() << t.msecsTo(QTime::currentTime()) << "ms to update";
}