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
|
if (request == "MOVEFROMKEYBOARD") {
if (infos.size() == 2) {
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
Vec3f actualPos = caracter->getCenter();
Vec3f dir (conversionStringFloat(infos[0]), conversionStringFloat(infos[1]), 0);
caracter->setDir(Vec2f(dir.x, dir.y));
caracter->setMoving(true);
caracter->setIsMovingFromKeyboard(true);
}
} else if (request == "MOVEFROMPATH") {
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
Vec3f fPos (conversionStringInt(infos[0]), conversionStringInt(infos[1]), 0);
Vec3f actualPos = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
std::vector<Vec3f> path = World::getPath(actualPos, fPos);
caracter->setPath(path);
caracter->setMoving(true);
caracter->setIsMovingFromKeyboard(false);
for (unsigned int i = 0; i < caracter->getPath().size(); i++) {
std::cout<<caracter->getPath()[i]<<std::endl;
}
} else if (request == "GETCARPOS") {
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
if (caracter->isMoving()) {
if (caracter->isMovingFromKeyboard()) {
Vec3f actualPos = caracter->getCenter();
sf::Int64 transferTime = conversionStringLong(infos[0]);
Vec3f newPos = caracter->getCenter() + Vec3f(caracter->getDir().x, caracter->getDir().y, 0) * caracter->getSpeed() * transferTime * 0.5f;
caracter->setCenter(newPos);
if (World::collide(caracter)) {
newPos = caracter->getCenter() - Vec3f(caracter->getDir().x,caracter->getDir().y, 0) * caracter->getSpeed() * transferTime * 0.5f;
caracter->setCenter(newPos);
}
caracter->setCenter(actualPos);
SymEncPacket packet;
std::string response = "NEWPOS"+conversionIntString(newPos.x)+"*"+conversionIntString(newPos.y);
packet<<response;
Network::sendUdpPacket(packet);
} else {
sf::Int64 transferTime = conversionStringLong(infos[0]);
Vec3f actualPos = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
Vec3f newPos = Computer::getPosOnPathFromTime(actualPos, caracter->getPath(), transferTime * 0.5f, caracter->getSpeed());
if (newPos.computeDist(caracter->getPath()[caracter->getPath().size() - 1]) <= 2) {
newPos = caracter->getPath()[caracter->getPath().size() - 1];
}
SymEncPacket packet;
std::string response = "NEWPOS"+conversionIntString(newPos.x)+"*"+conversionIntString(newPos.y);
packet<<response;
Network::sendUdpPacket(packet);
}
} else {
Vec3f newPos = caracter->getCenter();
std::string response = "NEWPOS"+conversionIntString(newPos.x)+"*"+conversionIntString(newPos.y);
SymEncPacket packet;
packet<<response;
Network::sendUdpPacket(packet);
}
} else if (request == "STOPCARMOVE") {
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
if (caracter->isMoving()) {
Vec3f newPos;
if (caracter->isMovingFromKeyboard()) {
sf::Int64 transferTime = conversionStringLong(infos[0]);
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
caracter->setMoving(false);
newPos = caracter->getCenter() - Vec3f(caracter->getDir().x, caracter->getDir().y, 0) * transferTime * 0.5f * caracter->getSpeed();
caracter->setCenter(newPos);
}
std::string response = "NEWPOS"+conversionIntString(newPos.x)+"*"+conversionIntString(newPos.y);
SymEncPacket packet;
packet<<response;
Network::sendTcpPacket(packet);
}
}
}
Caracter* caracter = static_cast<Caracter*> (World::getEntities<Entity>("E_CARACTER")[0]);
if (caracter->isMoving()) {
if (caracter->isMovingFromKeyboard()) {
sf::Int64 elapsedTime = getClock("LoopTime").getElapsedTime().asMicroseconds();
Vec3f newPos = caracter->getCenter() + Vec3f(caracter->getDir().x, caracter->getDir().y, 0) * caracter->getSpeed() * elapsedTime;
caracter->setCenter(newPos);
if (World::collide(caracter)) {
newPos = caracter->getCenter() - Vec3f(caracter->getDir().x, caracter->getDir().y, 0) * caracter->getSpeed() * elapsedTime;
caracter->setCenter(newPos);
}
} else {
sf::Int64 elapsedTime = getClock("LoopTime").getElapsedTime().asMicroseconds();
Vec3f actualPos = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
Vec3f newPos = Computer::getPosOnPathFromTime(actualPos, caracter->getPath(), elapsedTime, caracter->getSpeed());
if (newPos.computeDist(caracter->getPath()[caracter->getPath().size() - 1]) <= 5) {
caracter->setMoving(false);
newPos = caracter->getPath()[caracter->getPath().size() - 1];
}
Vec3f d = newPos - actualPos;
Vec3f dir = d.normalize();
if (odfaeg::Vec2f(dir.x, dir.y) != caracter->getDir())
caracter->setDir(odfaeg::Vec2f(dir.x, dir.y));
World::moveEntity(caracter, d.x, d.y, d.y);
}
} |
Partager