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(); }
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(); }
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(); }
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(); }
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; }
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(); } }
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); } } }
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; }
/* 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; }
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; }
void setEye(const Vector<float> &v) { eye = v; checkDistance(); }