92 lines
2.2 KiB
C++
92 lines
2.2 KiB
C++
#include "app.h"
|
|
|
|
App::App(Stomp* st) {
|
|
st_ = st;
|
|
st_->connectRequest("sdi.hevs.ch", 61614, "/", "sdi10", "809c02f36becb0868da98761fe3209f6");
|
|
st_->sendRequest("/topic/sdi10.gem.command", "right");
|
|
st_->subscribeRequest("/topic/sdi10.gem.field", 1);
|
|
|
|
}
|
|
|
|
void App::connectConfirmation(bool success, QString version) {
|
|
|
|
}
|
|
|
|
void App::sendConfirmation(bool success) {
|
|
|
|
}
|
|
|
|
void App::subscribeConfirmation(bool success) {
|
|
st_->sendRequest("/topic/sdi10.gem.command", "up");
|
|
}
|
|
|
|
void App::receiveIndication(int id, QString destination, QString body) {
|
|
//qDebug() << "Indication " << id << " : " << destination << Qt::endl << body << Qt::endl;
|
|
if(destination.contains("field")){
|
|
fillField(body);
|
|
}
|
|
computeMove();
|
|
}
|
|
|
|
void App::disconnectConfirmation() {
|
|
|
|
}
|
|
|
|
void App::disconnectIndication() {
|
|
|
|
}
|
|
|
|
void App::addGem(int x, int y, int pts) {
|
|
Gem g;
|
|
g.x = x;
|
|
g.y = y;
|
|
g.pts = pts;
|
|
g.relativePts = computeRelativePts(g);
|
|
gems_.append(g);
|
|
}
|
|
|
|
void App::printGem() {
|
|
for (Gem g: gems_) {
|
|
qDebug() << g.x << ":" << g.y << " - " << g.pts << Qt::endl;
|
|
}
|
|
}
|
|
|
|
void App::fillField(QString body) {
|
|
int x = 0;
|
|
int y = 0;
|
|
gems_.clear();
|
|
for(int i = 0; i<body.length(); i++) {
|
|
const QChar c = body.at(i);
|
|
if(c == 'Y') {
|
|
myVehicle_.x = x;
|
|
myVehicle_.y = y;
|
|
myVehicle_.me = true;
|
|
}
|
|
if(c == 'g') addGem(x, y, 100);
|
|
if(c == 'G') addGem(x, y, 250);
|
|
if(c == 'D') addGem(x, y, 500);
|
|
if(c == '\n') {
|
|
y++;
|
|
x = 0;
|
|
} else {
|
|
x++;
|
|
}
|
|
}
|
|
}
|
|
|
|
QVector2D App::computeRelativePts(Gem g) {
|
|
QVector2D v = QVector2D(myVehicle_.x, myVehicle_.y) - QVector2D(g.x, g.y);
|
|
}
|
|
|
|
void App::computeMove() {
|
|
Gem myGem;
|
|
for(Gem g : gems_) {
|
|
if(g.pts > myGem.pts) myGem = g;
|
|
}
|
|
if(myGem.x>myVehicle_.x) st_->sendRequest("/topic/sdi10.gem.command", "right");
|
|
else if(myGem.x<myVehicle_.x) st_->sendRequest("/topic/sdi10.gem.command", "left");
|
|
else if(myGem.y>myVehicle_.y) st_->sendRequest("/topic/sdi10.gem.command", "down");
|
|
else if(myGem.y<myVehicle_.y) st_->sendRequest("/topic/sdi10.gem.command", "up");
|
|
}
|
|
|