Beispiel #1
0
void Board::targetMove() {
    int x = rand()%(1280-(int)_target.getSize().x)+1;
    int y = rand()%(720-(int)_target.getSize().y)+1;
    if (checkDistance(x, y) < mindistance && score == 0 || checkDistance(x, y) < mindistance) {
        targetMove();
    }
    _target.setPosition(x, y);
    redraw();
}
Beispiel #2
0
	void moveY(float y) {
		moved = true;
		if (!valid) update();
		eye.x += y * matrix[ 1];
		eye.y += y * matrix[ 5];
		eye.z += y * matrix[ 9];
		checkDistance();
	}
Beispiel #3
0
	void moveZ(float z) {
		moved = true;
		if (!valid) update();
		eye.x += z * matrix[ 2];
		eye.y += z * matrix[ 6];
		eye.z += z * matrix[10];
		checkDistance();
	}
Beispiel #4
0
	void moveX(float x) {
		moved = true;
		if (!valid) update();
		eye.x += x * matrix[ 0];
		/*eye.y += x * matrix[ 4];*/
		eye.z += x * matrix[ 8];
		checkDistance();
	}
Beispiel #5
0
void Master::checkOK(){
	ok = false;
	distanceInform(vel.linear.x, vel.angular.z); 
	checkDistance(vel.linear.x, vel.angular.z);
	if (!ok){
		//if ((vel.linear.x != 0.2) || (vel.angular.x != 0.2) || ((vel.linear.x != 0.0) && (vel.angular.x != 0.0)) ){	
			//reAdjustSpeed();
		//}
		STOP();
	}
	else if(ok){	
		vel_pub_.publish(vel);
	}
	ok = false;

}
Beispiel #6
0
void SoldierLyzc::doAttack()
{
	//TODO:如果攻击目标是可移动的(比如敌方士兵,英雄),则每次攻击前都要判断是否在攻击范围内,如果不在范围内则重新寻路,或者更换目标
	if (checkDistance())
	{
		m_attackName = "";
		switch (m_direction)
		{
		case e_battle_dir_east :
			m_attackName = "01_attack03";
			break;
		case e_battle_dir_es :
			m_attackName = "01_attack02";
			break;
		case e_battle_dir_south :
			m_attackName = "01_attack01";
			break;
		case e_battle_dir_ws :
			m_attackName = "01_attack04";
			break;
		case e_battle_dir_west :
			m_attackName = "01_attack01";
			break;
		case e_battle_dir_wn :
			m_attackName = "01_attack02";
			break;
		case e_battle_dir_north :
			m_attackName = "01_attack03";
			break;
		case e_battle_dir_en :
			m_attackName = "01_attack05";
			break;
		default:
			break;
		}

		getBody()->getAnimation()->play(m_attackName, -1, 0);
		auto sc = SoldierConfig::getSoldierConfig(getType());
		Director::getInstance()->getScheduler()->schedule(schedule_selector(Soldier::updateAttack), this, sc->attack_speed, false);
		getBody()->getAnimation()->setMovementEventCallFunc(CC_CALLBACK_0(Soldier::animationEvent, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
	}
	else
	{
		setStatus(e_battle_status_moveing);
		followTarget();
	}
}
Beispiel #7
0
void SoldierLyzc::doMove()
{
	if (getTarget()->getStatus() == E_STATUS_DEAD)
	{
		setStatus(e_battle_status_idle);
		m_direction = 0;
		return;
	}

	if (checkDistance())
	{
		//setStatus(e_battle_tatus_attack);
		double begin = getBeginDegree();
		double end = getEndDegree();
		_currentIndex = getIndexFormDegree(begin);
		_degreeIndex = getIndexFormDegree(end);
		rotate();
	} 
	else
	{
		Coord next = getNextCoord();
		if (next.x == -1 && next.y == -1)
		{
			//setStatus(e_battle_tatus_attack);
			double begin = getBeginDegree();
			double end = getEndDegree();
			_currentIndex = getIndexFormDegree(begin);
			_degreeIndex = getIndexFormDegree(end);
			rotate();
		} 
		else
		{
			//checkBeAttack();
			if (setMoveDirection(next))
			{
				runWalkAction();
			}
			auto sc = SoldierConfig::getSoldierConfig(getType());
			auto move = MoveTo::create(1/sc->move_speed, MapHelper::convertCoordToPoint(next));
			runAction(Sequence::create(move, CallFunc::create(CC_CALLBACK_0(Soldier::doMove,this)), NULL));
			setLocalZOrder(next.y);
			setCoord(next);
		}
	}
}
Beispiel #8
0
bool CollectObject::init(int id, Point position)
{
    if (!GameObject::init(id, position))
    {
        return false;
    }
    
    ValueMap *data = DataManager::getInstance()->getItemByID(id);
    
    _spriteMain = Sprite::create(data->at("itemImage").asString());
    _spriteMain->setPosition(position);
    this->addChild(_spriteMain);
    
    auto listener = EventListenerTouchOneByOne::create();
    listener->setSwallowTouches(true);
    listener->onTouchBegan = [this](Touch* touch, Event* event)
    {
        auto target = static_cast<Sprite *>(event->getCurrentTarget());
        
        Point locationInNode = target->convertToNodeSpace(touch->getLocation());
        Size s = target->getContentSize();
        Rect rect = Rect(0, 0, s.width, s.height);
        
        if (rect.containsPoint(locationInNode))
        {
            if(checkDistance(_spriteMain->getPosition()))
            {
                action();
            }
            return true;
        }
        
        return false;
    };
    
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, _spriteMain);

    
    return true;
}
Beispiel #9
0
/* heuristic *******************************************************************************************
 *
 * @params: _board - Board object that corresponds to current game board
 *
 * @modifies: nothing
 *
 * @returns: returns integer value of evaluated game board
 *******************************************************************************************************/
int AIAgent::heuristic(Board _board) {
	int score = checkAdjacent(_board);
	score += checkDistance(_board);
	return score;
}
Beispiel #10
0
BOOL KCircle::selectRect(FLOAT rect[])
{
    if(!_bVisible) return false;

	FLOAT cx = _cx + _basePos.x;
	FLOAT cy = _cy + _basePos.y;


	RECTF selection;

	if(rect[0] < rect[2]) {
		selection.left 	= rect[0];
		selection.right 	= rect[2];
	}
	else {
		selection.left 	= rect[2];
		selection.right 	= rect[0];
	}

	if(rect[1] < rect[3]) {
		selection.top 		= rect[3];
		selection.bottom 	= rect[1];
	}
	else {
		selection.top 		= rect[1];
		selection.bottom 	= rect[3];
	}

	_bIsSelected = false;

	// check region
	if(_region.right < selection.left) return _bIsSelected; // return false;
	if(selection.right < _region.left) return _bIsSelected;	// return false;
	if(selection.top < _region.bottom) return _bIsSelected;	// return false;
	if(_region.top < selection.bottom) return _bIsSelected; // return false;


	// center - 내부 원점 포함시 true 확정
	if(selection.left <= cx && cx <= selection.right && cy <= selection.top && selection.bottom <= cy) {
		_bIsSelected = true;
		return _bIsSelected;
	}

	// 사각형 꼭지점 4개 위치와 중심점 비교
	INT32 sum = checkDistance(selection.left,selection.bottom,cx,cy,_fRadius)	+
				checkDistance(selection.left,selection.top,cx,cy,_fRadius) +
				checkDistance(selection.right,selection.bottom,cx,cy,_fRadius) +
				checkDistance(selection.right,selection.top,cx,cy,_fRadius);

	if(sum >= 8) {	// 4개 모두 클 경우, 선택 영역이 중심점을 포함할 경우 true 확정

		if(selection.left <= cx && selection.right >= cx) {
			_bIsSelected = true;
			return _bIsSelected;
		}

		else if(selection.top >= cy && selection.bottom <= cy) {
			_bIsSelected = true;
			return _bIsSelected;
		}

		else {
			_bIsSelected = false;
			return _bIsSelected;
        }
	}

	_bIsSelected = true;
	return _bIsSelected;
}
Beispiel #11
0
	void setEye(const Vector<float> &v) { eye = v; checkDistance(); }