Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
	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;
}