HAAStarResult RoutePlanner::setupHierarchicalSearch(Unit *unit, const Vec2i &dest, TransitionGoal &goalFunc) { // set-up open list HAAStarResult res = setupHierarchicalOpenList(unit, dest); if (res == HAAStarResult::FAILURE) { return HAAStarResult::FAILURE; } bool startTrap = res == HAAStarResult::START_TRAP; // transitions to goal Transitions transitions; Vec2i cluster = ClusterMap::cellToCluster(dest); g_cartographer.getClusterMap()->getTransitions(cluster, unit->getCurrField(), transitions); nsgSearchEngine->getNeighbourFunc().setSearchCluster(cluster); bool goalTrap = true; // attempt quick path from dest to each transition, // if successful add transition to goal set for (Transitions::iterator it = transitions.begin(); it != transitions.end(); ++it) { float cost = quickSearch(unit->getCurrField(), unit->getSize(), dest, (*it)->nwPos); if (cost != numeric_limits<float>::infinity()) { goalFunc.goalTransitions().insert(*it); goalTrap = false; } } return startTrap ? HAAStarResult::START_TRAP : goalTrap ? HAAStarResult::GOAL_TRAP : HAAStarResult::COMPLETE; }
void SmoothMovingAnimation::addTransitions(const Transitions& transitions, const SpritesWithPositions& oldSprites) { for (auto const& s : oldSprites) { auto transition = transitions.find(s.position); if (transition == transitions.end()) { staticSprites.push_back(s); continue; } transitionAnimator->addTransition(s.position, transition->second, s.sprite); movingSprites.emplace_back(s.sprite, transition->second); } }
HAAStarResult RoutePlanner::setupHierarchicalOpenList(Unit *unit, const Vec2i &target) { // get Transitions for start cluster Transitions transitions; Vec2i startCluster = ClusterMap::cellToCluster(unit->getPos()); ClusterMap *clusterMap = world->getCartographer()->getClusterMap(); clusterMap->getTransitions(startCluster, unit->getCurrField(), transitions); DiagonalDistance dd(target); nsgSearchEngine->getNeighbourFunc().setSearchCluster(startCluster); bool startTrap = true; // attempt quick path from unit->pos to each transition, // if successful add transition to open list AnnotatedMap *aMap = world->getCartographer()->getMasterMap(); aMap->annotateLocal(unit); for (Transitions::iterator it = transitions.begin(); it != transitions.end(); ++it) { float cost = quickSearch(unit->getCurrField(), unit->getSize(), unit->getPos(), (*it)->nwPos); if (cost != numeric_limits<float>::infinity()) { tSearchEngine->setOpen(*it, dd((*it)->nwPos), cost); startTrap = false; } } aMap->clearLocalAnnotations(unit); if (startTrap) { // do again, without annnotations, return TRAPPED if all else goes well bool locked = true; for (Transitions::iterator it = transitions.begin(); it != transitions.end(); ++it) { float cost = quickSearch(unit->getCurrField(), unit->getSize(), unit->getPos(), (*it)->nwPos); if (cost != numeric_limits<float>::infinity()) { tSearchEngine->setOpen(*it, dd((*it)->nwPos), cost); locked = false; } } if (locked) { return HAAStarResult::FAILURE; } } if (startTrap) { return HAAStarResult::START_TRAP; } return HAAStarResult::COMPLETE; }
virtual void Transition3(void){ state_->Transition3(); }
int nextStateFinder(Key key){ int newstate = 0; /**************************************************************************/ // State Transitions for Integer transitions[Key(0,int1)] = 3; transitions[Key(0,oct1)] = 3; transitions[Key(0,int2)] = 3; transitions[Key(18,int1)] = 0; transitions[Key(19,INTEGER)] = 3; transitions[Key(3,int2)] = 3; transitions[Key(3,oct1)] = 3; transitions[Key(3,int1)] = 3; // State Transitions for Float transitions[Key(0,float1)] = 20; transitions[Key(18,float1)] = 20; transitions[Key(29,float1)] = 20; transitions[Key(6,float1)] = 20; transitions[Key(3,float1)] = 20; transitions[Key(20,int1)] = 4; transitions[Key(20,oct1)] = 4; transitions[Key(20,int2)] = 4; transitions[Key(4,int1)] = 4; transitions[Key(4,oct1)] = 4; transitions[Key(4,int2)] = 4; // State Transitions for Octal transitions[Key(0,int1)] = int3; transitions[Key(29,oct1)] = 6; transitions[Key(29,int1)] = 29; transitions[Key(int1,oct1)] = 6; transitions[Key(OCTAL,int1)] = 6; transitions[Key(OCTAL,oct1)] = 6; // State Transitions for Hexadecimal transitions[Key(int3,hex1)] = hex1; transitions[Key(hex1,int1)] = hex1; transitions[Key(hex1,oct1)] = 5; transitions[Key(hex1,int2)] = 5; transitions[Key(hex1,hex2)] = 5; transitions[Key(5,int1)] = 5; transitions[Key(5,oct1)] = 5; transitions[Key(5,int2)] = 5; transitions[Key(5,hex2)] = 5; // State Transitions for ID transitions[Key(0,hex1)] = 9; transitions[Key(0,hex2)] = 9; transitions[Key(0,ID)] = 9; transitions[Key(9,int1)] = 9; transitions[Key(9,int2)] = 9; transitions[Key(9,oct1)] = 9; transitions[Key(9,hex1)] = 9; transitions[Key(9,hex2)] = 9; transitions[Key(9,ID)] = 9; // State Transitions for CHAR transitions[Key(0,char1)] = 12; transitions[Key(12,char2)] = 13; transitions[Key(12,space)] = 14; transitions[Key(12,int1)] = 14; transitions[Key(12,int2)] = 14; transitions[Key(12,oct1)] = 14; transitions[Key(12,float1)] = 14; transitions[Key(12,hex1)] = 14; transitions[Key(12,hex2)] = 14; transitions[Key(12,ID)] = 14; transitions[Key(12,str1)] = 14; transitions[Key(12,str2)] = 14; transitions[Key(14,char1)] = 8; transitions[Key(13,int1)] = 15; transitions[Key(13,int2)] = 15; transitions[Key(13,oct1)] = 15; transitions[Key(13,float1)] = 15; transitions[Key(13,hex1)] = 15; transitions[Key(13,hex2)] = 15; transitions[Key(13,ID)] = 15; transitions[Key(13,str1)] = 15; transitions[Key(13,char2)] = 15; transitions[Key(13,str2)]=15; transitions[Key(13,char1)]=17; transitions[Key(17,char1)] = 8; transitions[Key(15,char1)] = 8; // State Transitions for string transitions[Key(0,str1)] = 22; transitions[Key(22,int1)] = 23; transitions[Key(22,oct1)] = 23; transitions[Key(22,float1)] = 23; transitions[Key(22,hex1)] = 23; transitions[Key(22,hex2)] = 23; transitions[Key(22,ID)] = 23; transitions[Key(22,str1)] = 7; transitions[Key(22,int2)] = 23; transitions[Key(22,char1)] = 23; transitions[Key(22,int2)] = 23; transitions[Key(22,space)] = 23; transitions[Key(22,char2)] = 24; transitions[Key(22,str2)] = 23; transitions[Key(23,int1)] = 23; transitions[Key(23,int2)] = 23; transitions[Key(23,oct1)] = 23; transitions[Key(23,float1)] = 23; transitions[Key(23,hex1)] = 23; transitions[Key(23,hex2)] = 23; transitions[Key(23,ID)] = 23; transitions[Key(23,char1)] = 23; transitions[Key(23,space)] = 23; transitions[Key(23,str2)] = 23; transitions[Key(23,char2)] = 24; transitions[Key(23,str1)] = 7; transitions[Key(24,int1)] = 24; transitions[Key(24,int2)] = 24; transitions[Key(24,oct1)] = 24; transitions[Key(24,float1)] = 24; transitions[Key(24,hex1)] = 24; transitions[Key(24,hex2)] = 24; transitions[Key(24,ID)] = 24; transitions[Key(24,char1)] = 24; transitions[Key(24,space)] = 24; transitions[Key(24,str2)] = 24; transitions[Key(24,char2)] = 23; transitions[Key(24,str1)] = 28; transitions[Key(28,str1)] = 7; /**************************Iterator for map************************************/ Transitions::iterator vIter=transitions.find(Transitions::key_type(key)); if (vIter!=transitions.end()) { std::cout<<"Key Found!\n"<<std::endl; std::cout<<vIter->second<<std::endl; newstate = vIter->second; std::cout<<"The newstate is : "<<newstate<<"\n"<<std::endl; } // newstate = transitions.find(key)->second; cout<<"RETURNING NEWSTATE AS : "<<newstate<<"\n"; return newstate; }