本文整理汇总了C++中Tile::__getIndexOfThing方法的典型用法代码示例。如果您正苦于以下问题:C++ Tile::__getIndexOfThing方法的具体用法?C++ Tile::__getIndexOfThing怎么用?C++ Tile::__getIndexOfThing使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tile
的用法示例。
在下文中一共展示了Tile::__getIndexOfThing方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: moveCreature
void Tile::moveCreature(Creature* creature, Cylinder* toCylinder, bool forceTeleport/* = false*/)
{
Tile* newTile = toCylinder->getTile();
int32_t oldStackPos = __getIndexOfThing(creature);
Position oldPos = getPosition();
Position newPos = newTile->getPosition();
bool teleport = forceTeleport || !newTile->ground || !Position::areInRange<1, 1, 0>(oldPos, newPos);
SpectatorVec list;
g_game.getSpectators(list, oldPos, true);
g_game.getSpectators(list, newPos, true);
std::vector<int32_t> oldStackPosVector;
for (Creature* spectator : list) {
if (Player* tmpPlayer = spectator->getPlayer()) {
if (tmpPlayer->canSeeCreature(creature)) {
oldStackPosVector.push_back(getClientIndexOfCreature(tmpPlayer, creature));
} else {
oldStackPosVector.push_back(-1);
}
}
}
//remove the creature
__removeThing(creature, 0);
// Switch the node ownership
if (qt_node != newTile->qt_node) {
qt_node->removeCreature(creature);
newTile->qt_node->addCreature(creature);
}
//add the creature
newTile->__addThing(creature);
int32_t newStackPos = newTile->__getIndexOfThing(creature);
if (!teleport) {
if (oldPos.y > newPos.y) {
creature->setDirection(NORTH);
} else if (oldPos.y < newPos.y) {
creature->setDirection(SOUTH);
}
if (oldPos.x < newPos.x) {
creature->setDirection(EAST);
} else if (oldPos.x > newPos.x) {
creature->setDirection(WEST);
}
}
//send to client
size_t i = 0;
for (Creature* spectator : list) {
if (Player* tmpPlayer = spectator->getPlayer()) {
//Use the correct stackpos
int32_t stackpos = oldStackPosVector[i++];
if (stackpos != -1) {
tmpPlayer->sendCreatureMove(creature, newPos, newTile->getStackposOfCreature(tmpPlayer, creature), oldPos, stackpos, teleport);
}
}
}
//event method
for (Creature* spectator : list) {
spectator->onCreatureMove(creature, newTile, newPos, this, oldPos, teleport);
}
postRemoveNotification(creature, toCylinder, oldStackPos, true);
newTile->postAddNotification(creature, this, newStackPos);
}
示例2: moveCreature
void Tile::moveCreature(Creature* actor, Creature* creature, Cylinder* toCylinder, bool forceTeleport/* = false*/)
{
Tile* newTile = toCylinder->getTile();
SpectatorVec list;
SpectatorVec::iterator it;
g_game.getSpectators(list, pos, false, true);
Position newPos = newTile->getPosition();
g_game.getSpectators(list, newPos, true, true);
bool teleport = false;
if(forceTeleport || !newTile->ground || !Position::areInRange<1,1,0>(pos, newPos))
teleport = true;
std::vector<uint32_t> oldStackposVector;
Player* tmpPlayer = NULL;
for(it = list.begin(); it != list.end(); ++it)
{
if((tmpPlayer = (*it)->getPlayer()))
oldStackposVector.push_back(getClientIndexOfThing(tmpPlayer, creature));
}
int32_t oldStackpos = __getIndexOfThing(creature);
//remove the creature
__removeThing(creature, 0);
//switch the node ownership
if(qt_node != newTile->qt_node)
{
qt_node->removeCreature(creature);
newTile->qt_node->addCreature(creature);
}
//add the creature
newTile->__addThing(actor, creature);
int32_t newStackpos = newTile->__getIndexOfThing(creature);
if(!teleport)
{
if(pos.y > newPos.y)
creature->setDirection(NORTH);
else if(pos.y < newPos.y)
creature->setDirection(SOUTH);
if(pos.x < newPos.x)
creature->setDirection(EAST);
else if(pos.x > newPos.x)
creature->setDirection(WEST);
}
//send to client
int32_t i = 0;
for(it = list.begin(); it != list.end(); ++it)
{
if((tmpPlayer = (*it)->getPlayer()) && tmpPlayer->canSeeCreature(creature))
tmpPlayer->sendCreatureMove(creature, newTile, newPos, this, pos, oldStackposVector[i++], teleport);
}
//event method
for(it = list.begin(); it != list.end(); ++it)
(*it)->onCreatureMove(creature, newTile, newPos, this, pos, teleport);
postRemoveNotification(actor, creature, toCylinder, oldStackpos, true);
newTile->postAddNotification(actor, creature, this, newStackpos);
}
示例3: moveCreature
void Tile::moveCreature(Creature* creature, Cylinder* toCylinder, bool forceTeleport/* = false*/)
{
Tile* newTile = toCylinder->getTile();
int32_t oldStackPos = __getIndexOfThing(creature);
Position oldPos = getPosition();
Position newPos = newTile->getPosition();
bool teleport = false;
if (forceTeleport || !newTile->ground || !Position::areInRange<1, 1, 0>(oldPos, newPos)) {
teleport = true;
}
SpectatorVec list;
g_game.getSpectators(list, oldPos, true);
g_game.getSpectators(list, newPos, true);
SpectatorVec::const_iterator end = list.end();
std::vector<uint32_t> oldStackPosVector;
for (SpectatorVec::const_iterator it = list.begin(); it != end; ++it) {
if (Player* tmpPlayer = (*it)->getPlayer()) {
oldStackPosVector.push_back(getClientIndexOfThing(tmpPlayer, creature));
}
}
//remove the creature
__removeThing(creature, 0);
// Switch the node ownership
if (qt_node != newTile->qt_node) {
qt_node->removeCreature(creature);
newTile->qt_node->addCreature(creature);
}
//add the creature
newTile->__addThing(creature);
int32_t newStackPos = newTile->__getIndexOfThing(creature);
if (!teleport) {
if (oldPos.y > newPos.y) {
creature->setDirection(NORTH);
} else if (oldPos.y < newPos.y) {
creature->setDirection(SOUTH);
}
if (oldPos.x < newPos.x) {
creature->setDirection(EAST);
} else if (oldPos.x > newPos.x) {
creature->setDirection(WEST);
}
}
//send to client
uint32_t i = 0;
for (SpectatorVec::const_iterator it = list.begin(); it != end; ++it) {
if (Player* tmpPlayer = (*it)->getPlayer()) {
//Use the correct stackpos
if (!creature->isInGhostMode() || tmpPlayer->isAccessPlayer()) {
tmpPlayer->sendCreatureMove(creature, newTile, newPos, this, oldPos, oldStackPosVector[i], teleport);
}
++i;
}
}
//event method
for (SpectatorVec::const_iterator it = list.begin(); it != end; ++it) {
(*it)->onCreatureMove(creature, newTile, newPos, this, oldPos, teleport);
}
postRemoveNotification(creature, toCylinder, oldStackPos, true);
newTile->postAddNotification(creature, this, newStackPos);
}
示例4: moveCreature
void Tile::moveCreature(Creature* creature, Cylinder* toCylinder, bool teleport /* = false*/)
{
Tile* newTile = toCylinder->getTile();
int32_t oldStackPos = __getIndexOfThing(creature);
Position oldPos = getPosition();
Position newPos = newTile->getPosition();
Player* tmpPlayer = NULL;
SpectatorVec list;
SpectatorVec::iterator it;
g_game.getSpectators(list, oldPos, false, true);
g_game.getSpectators(list, newPos, true, true);
std::vector<uint32_t> oldStackPosVector;
for(it = list.begin(); it != list.end(); ++it){
if((tmpPlayer = (*it)->getPlayer())){
oldStackPosVector.push_back(getClientIndexOfThing(tmpPlayer, creature));
}
}
//remove the creature
__removeThing(creature, 0);
// Switch the node ownership
if(qt_node != newTile->qt_node) {
qt_node->removeCreature(creature);
newTile->qt_node->addCreature(creature);
}
//add the creature
newTile->__addThing(creature);
int32_t newStackPos = newTile->__getIndexOfThing(creature);
if(!teleport){
if(oldPos.y > newPos.y)
creature->setDirection(NORTH);
else if(oldPos.y < newPos.y)
creature->setDirection(SOUTH);
if(oldPos.x < newPos.x)
creature->setDirection(EAST);
else if(oldPos.x > newPos.x)
creature->setDirection(WEST);
}
//send to client
uint32_t i = 0;
for(it = list.begin(); it != list.end(); ++it){
if((tmpPlayer = (*it)->getPlayer())){
tmpPlayer->sendCreatureMove(creature, newTile, newPos, this, oldPos, oldStackPosVector[i], teleport);
++i;
}
}
//event method
for(it = list.begin(); it != list.end(); ++it){
(*it)->onCreatureMove(creature, newTile, newPos, this, oldPos, teleport);
}
postRemoveNotification(creature, toCylinder, oldStackPos, true);
newTile->postAddNotification(creature, this, newStackPos);
}