-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGraphicsScene.cpp
127 lines (88 loc) · 4.22 KB
/
GraphicsScene.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "GraphicsScene.h"
#include "Definitions.h"
#include <QDebug>
#include <QGraphicsEllipseItem>
#include <QGraphicsPathItem>
#include <QPainterPath>
#include "qmath.h"
#include "Camera.h"
#include "Door.h"
#include "Enemy.h"
#include "ObjectsHolder.h"
#include <string>
GraphicsScene::GraphicsScene(QObject* parent) : QGraphicsScene(parent) {
//this->setBackgroundBrush(Qt::white);
}
void GraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent) {
qDebug() << Q_FUNC_INFO << mouseEvent->scenePos();
QGraphicsScene::mouseDoubleClickEvent(mouseEvent);
}
void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) {
//qDebug() << Q_FUNC_INFO << mouseEvent->scenePos();
QGraphicsScene::mouseMoveEvent(mouseEvent);
if (mouseEvent->button() == Qt::NoButton)
return;
int deltaX = (lm.x - mouseEvent->scenePos().x()), deltaY = (lm.y - mouseEvent->scenePos().y());
//qDebug() << "DeltaX: " << deltaX << " DeltaY: " << deltaY;
QPointF cam = Camera::worldToScreen(QPointF(Camera::getInstance().getX(), Camera::getInstance().getY()));
QPointF snapped = Camera::screenToWorld(QPointF(cam.x() + deltaX, cam.y() + deltaY));
Camera::getInstance().setX(snapped.x());
Camera::getInstance().setY(snapped.y());
lm.x = mouseEvent->scenePos().x();
lm.y = mouseEvent->scenePos().y();
}
#include "Terrain.h"
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) {
//qDebug() << Q_FUNC_INFO << mouseEvent->scenePos();
QGraphicsScene::mousePressEvent(mouseEvent);
if (mouseEvent->button() != Qt::MiddleButton)
return;
lm.x = mouseEvent->scenePos().x();
lm.y = mouseEvent->scenePos().y();
}
void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* me) {
//qDebug() << Q_FUNC_INFO << me->scenePos();
QGraphicsScene::mouseReleaseEvent(me);
// if (lm.x == me->scenePos().x() && lm.y == me->scenePos().y()) {
lm.x = me->scenePos().x();
lm.y = me->scenePos().y();
std::cout << "Percentage of click coordinates: " << ((double)lm.x / (double)Camera::getInstance().screenwidth) << "% : " << ((double)lm.y / (double)Camera::getInstance().screenheight) << "\n%";
QPointF snapped = Camera::screenToWorld(QPointF(lm.x, lm.y));
snapped.setX((double)(floor(snapped.x()) + ( (snapped.x() - ((int)snapped.x())) > 0.4 ? 0.5 : 0)));
snapped.setY((double)(floor(snapped.y()) ));
std::cout << "Click coordinates: " << snapped.x() << " : " << snapped.y() << "\n";
if (me->button() == Qt::RightButton) {
vert2 = QPointF(snapped.x(), snapped.y());
//Terrain* t = new Terrain(vert2);
//GameLoop::getInstance().addElement(dynamic_cast<GameObject*>(t));
}
else if (me->button() == Qt::MiddleButton) {
//Terrain* t = new Terrain(snapped, objects::STEPUP, TRANSPARENT, QPoint(0, 0), 1, 0.3);
// Terrain* t = new Terrain(snapped, objects::BARRIER, BARRIER_2, QPoint(0, 0), 1, 1);
MovablePlatform* t = new MovablePlatform(snapped);
GameLoop::getInstance().addElement(dynamic_cast<GameObject*>(t));
}
else {
QPointF vert1 = QPointF(snapped.x(), snapped.y());
//Terrain* t = new Terrain(snapped, objects::TERRAIN, TERRAINBLOCK, QPoint(0, 0), 1, 1);
//TerrainSloped* t = new TerrainSloped(snapped, objects::SLOPED_TERRAIN, 100, 100, TRANSPARENT);
//t->setVerts(vert1, vert2);
static std::string r[] = { "Giovanni Muciaccia"};
static int i = 0;
//GameObject* t = ObjectsHolder::getInstance().getObject(objects::POPPYBROSJR);
GameObject* t = new VectorField(vert1, QPointF(0, 0), abs(vert1.x() - vert2.x()), abs(vert1.y() - vert2.y()), KA::Vec2Df{0,-6}, 1, 0);
// (dynamic_cast<Kirby*>(t))->setName(r[0]);
//t->setX(snapped.x());
//t->setY(snapped.y());
GameLoop::getInstance().addElement(t);
}
// }
}
void GraphicsScene::keyPressEvent(QKeyEvent* e)
{
GameLoop::getInstance().keyPressEvent(e);
}
void GraphicsScene::keyReleaseEvent(QKeyEvent* e)
{
GameLoop::getInstance().keyPressEvent(e, false);
}