本文整理汇总了C++中Vec3f::computeDist方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec3f::computeDist方法的具体用法?C++ Vec3f::computeDist怎么用?C++ Vec3f::computeDist使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec3f
的用法示例。
在下文中一共展示了Vec3f::computeDist方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onExec
//.........这里部分代码省略.........
caracter->setMoving(true);
caracter->interpolation.first = caracter->getCenter();
caracter->interpolation.second = Computer::getPosOnPathFromTime(caracter->interpolation.first, caracter->getPath(),ping + timeBtwnTwoReq.asMicroseconds(),caracter->getSpeed());
caracter->getClkTransfertTime().restart();
}
if (Network::getResponse("NEWPOS", response)) {
std::vector<std::string> infos = split(response, "*");
if (infos.size() == 4) {
int id = conversionStringInt(infos[0]);
ping = conversionStringLong(infos[1]);
Caracter* caracter = static_cast<Caracter*>(World::getEntity(id));
Vec3f actualPos = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
Vec3f newPos (conversionStringFloat(infos[2]), conversionStringFloat(infos[3]), 0);
Vec3f d = newPos - actualPos;
if (id == hero->getId()) {
for (unsigned int i = 0; i < getRenderComponentManager().getNbComponents(); i++) {
View view = getRenderComponentManager().getRenderComponent(i)->getView();
view.move(d.x, d.y, d.y);
getRenderComponentManager().getRenderComponent(i)->setView(view);
}
getView().move (d.x, d.y, d.y);
}
World::moveEntity(caracter, d.x, d.y, d.y);
World::update();
caracter->interpolation.first = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
if (caracter->isMoving()) {
if (caracter->isMovingFromKeyboard()) {
caracter->interpolation.second = caracter->interpolation.first + Vec3f(caracter->getDir().x,caracter->getDir().y,0) * caracter->getSpeed() * (ping + timeBtwnTwoReq.asMicroseconds());
} else {
caracter->interpolation.second = Computer::getPosOnPathFromTime(caracter->interpolation.first, caracter->getPath(),ping + timeBtwnTwoReq.asMicroseconds(),caracter->getSpeed());
}
} else {
caracter->interpolation.second = caracter->interpolation.first;
}
caracter->getClkTransfertTime().restart();
}
} else {
std::vector<Entity*> caracters = World::getEntities("E_MONSTER+E_HERO");
for (unsigned int i = 0; i < caracters.size(); i++) {
Caracter* caracter = static_cast<Caracter*>(caracters[i]);
if (caracter->isMoving()) {
if (caracter->isMovingFromKeyboard()) {
Vec3f actualPos = Vec3f(caracter->getCenter().x, caracter->getCenter().y, 0);
sf::Int64 elapsedTime = caracter->getClkTransfertTime().getElapsedTime().asMicroseconds();
Vec3f newPos = caracter->interpolation.first + (caracter->interpolation.second - caracter->interpolation.first) * ((float) elapsedTime / (float) (ping + timeBtwnTwoReq.asMicroseconds()));
Ray ray(actualPos, newPos);
if (World::collide(caracter, ray)) {
newPos = actualPos;
}
for (unsigned int i = 0; i < getRenderComponentManager().getNbComponents(); i++) {
View view = getRenderComponentManager().getRenderComponent(i)->getView();
Vec3f d = newPos - view.getPosition();
view.move(d.x, d.y, d.y);
getRenderComponentManager().getRenderComponent(i)->setView(view);
}
Vec3f d = newPos - actualPos;
World::moveEntity(caracter, d.x, d.y, d.y);
getView().move(d.x, d.y, d.y);
World::update();
} else {
Vec3f actualPos (caracter->getCenter().x, caracter->getCenter().y, 0);
sf::Int64 elapsedTime = caracter->getClkTransfertTime().getElapsedTime().asMicroseconds();
Vec3f newPos = caracter->interpolation.first + (caracter->interpolation.second - caracter->interpolation.first) * ((float) elapsedTime / (float) (ping + timeBtwnTwoReq.asMicroseconds()));
Vec3f d = newPos - actualPos;
if (newPos.computeDist(caracter->getPath()[caracter->getPath().size() - 1]) <= PATH_ERROR_MARGIN) {
caracter->setMoving(false);
newPos = caracter->getPath()[caracter->getPath().size() - 1];
}
if (caracter->getId() == hero->getId()) {
for (unsigned int i = 0; i < getRenderComponentManager().getNbComponents(); i++) {
View view = getRenderComponentManager().getRenderComponent(i)->getView();
view.move(d.x, d.y, d.y);
getRenderComponentManager().getRenderComponent(i)->setView(view);
}
getView().move(d.x, d.y, d.y);
}
Vec2f dir = d.normalize();
if (dir != caracter->getDir())
caracter->setDir(dir);
World::moveEntity(caracter, d.x, d.y, d.y);
World::update();
}
}
}
}
if (hero->isInFightingMode()) {
if (hero->getFocusedCaracter() != nullptr) {
int distToEnnemi = hero->getCenter().computeDist(hero->getFocusedCaracter()->getCenter());
if (distToEnnemi <= hero->getRange()) {
if (hero->isMoving())
hero->setMoving(false);
hero->setAttacking(true);
hero->attackFocusedCaracter();
} else {
hero->setAttacking(false);
}
}
}
}