Esempio n. 1
0
bool Polyangle::split(Polyangle & p1, Polyangle & p2, Polyangle & route, const Droite & d, const double largeurDemiRoute) const
{
    //calcul des deux parallèles a ma droite de coupe
    Vector2D orthoAB = Vector2D(-d.getD().y(), d.getD().x());
    Droite para1(d.getO() + orthoAB * largeurDemiRoute, d.getD());
    Droite para2(d.getO() - orthoAB * largeurDemiRoute, d.getD());

    Polyangle pTemp;
    if(!split(p1, pTemp, para1))return false;
    return pTemp.split(route, p2, para2);

}
Esempio n. 2
0
TEST(SaveLoadTest, SaveLoadLatestVersion)
{
    // Use the temp application.
    TaskSystem *pTempApp1 = new TaskSystem();
    TaskSystem* pPreviousApp = SetWorkingBrain(pTempApp1);

    {
        Parameter para(_T("OS"), _T("Windows7"));
        para.SetComments(_T("global"));
        GetWorkingBrain()->GetVariableManager()->AddUserParameter(para);
    }

    CString conditionId = _T("DoesRegExist");
    {
        ConditionPtr pRegCondition = Condition::Create(_T("RegisterKeyExistsCondition"), GetWorkingBrain()->GetBehaviorManager());
        Parameter objectId(OBJECT_ID, conditionId);
        Parameter para1(_T("RootKey"), _T("HKEY_LOCAL_MACHINE"));
        Parameter para2(_T("SubKey"), _T("Software\\Microsoft"));

        pRegCondition->GetParameterTable().AddParameter(objectId);
        pRegCondition->GetParameterTable().AddParameter(para1);
        pRegCondition->GetParameterTable().AddParameter(para2);

        //GetWorkingBrain()->GetBehaviorManager()->RegisterCondition(pRegCondition);
    }

    CString actionId = _T("DemoToRunSysCmd");
    {
        ActionPtr pNewAction = Action::Create(_T("RunSystemCommandAction"), GetWorkingBrain()->GetBehaviorManager());
        Parameter objectId(OBJECT_ID, actionId);
        objectId.SetComments(_T("Object Id is used to reference this object everywhere."));
        Parameter objectType;
        pNewAction->GetParameterTable().GetParameter(OBJECT_TYPE, objectType);
        objectType.SetComments(_T("Object type indicates which behavior body will this action invokes."));
        Parameter cmd(APPLICATION_NAME, _T("regedit.exe"));
        cmd.SetComments(_T("Indicate which command will be run"));
        pNewAction->GetParameterTable().AddParameter(objectId);
        pNewAction->GetParameterTable().AddParameter(objectType);
        pNewAction->GetParameterTable().AddParameter(cmd);

        //GetWorkingBrain()->GetBehaviorManager()->RegisterAction(pNewAction);
        GetWorkingBrain()->GetBehaviorManager()->AddActionTask(pNewAction);
    }

    CString fileName(_T("C:\\braintest.xml"));

    // Save
    bool ret = GetWorkingBrain()->XmlOut(fileName);
    EXPECT_EQ(true, ret);

    // Load
    TaskSystem *pTempApp2 = new TaskSystem();

    SetWorkingBrain(pTempApp2);

    ret = GetWorkingBrain()->XmlIn(fileName);
    EXPECT_EQ(true, ret);

    {
        ActionPtr pAction = GetWorkingBrain()->GetBehaviorManager()->GetActionById(actionId);
        EXPECT_EQ(true, (pAction != NULL));
    }

    {
        ConditionPtr pCondition = GetWorkingBrain()->GetBehaviorManager()->GetConditionById(conditionId);
        EXPECT_EQ(true, (pCondition != NULL));
    }

    // Recover
    SetWorkingBrain(pPreviousApp);
}
Esempio n. 3
0
void nuiGLDrawContext::DrawGradient(const nuiGradient& rGradient, const nuiRect& rEnclosingRect, nuiSize x1, nuiSize y1, nuiSize x2, nuiSize y2)
{
  nglVector2f vec(x2 - x1, y2 - y1);
  nglVector2f para(-vec[1], vec[0]);
  nglVector2f vec1(vec);
  nglVector2f para1(para);
  vec1.Normalize();
  para1.Normalize();

  // What Quadrant are we in?:
  //         |
  //     a   |   b
  //         |
  //  ----------------
  //         |
  //     c   |   d
  //         |
  float xa, xb, xc, xd;
  float ya, yb, yc, yd;
  float x, y;
  float xp, yp;
  float xx, yy;
  float xxp, yyp;

  xa = xc = rEnclosingRect.Left();
  xb = xd = rEnclosingRect.Right();
  ya = yb = rEnclosingRect.Top();
  yc = yd = rEnclosingRect.Bottom();

  if (x1 < x2)
  {
    // Go from a to d or c to b
    if (y1 == y2)
    {
      x  = xa; y  = ya;
      xp = xc; yp = yc;
      xx = xd; yy = yd;
      xxp= xb; yyp= yb;
    }
    else if (y1 < y2)
    {
      // a to d
      IntersectLines(xa,ya, para1[0], para1[1], xb, yb, vec1[0], vec1[1], x, y);
      IntersectLines(xa,ya, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xp, yp);
      IntersectLines(xd,yd, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xx, yy);
      IntersectLines(xd,yd, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xxp, yyp);
    }
    else
    {
      // c to d
      IntersectLines(xc,yc, para1[0], para1[1], xa, ya, vec1[0], vec1[1], x, y);
      IntersectLines(xc,yc, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xp, yp);
      IntersectLines(xb,yb, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xx, yy);
      IntersectLines(xb,yb, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xxp, yyp);
    }
  }
  else
  {
    if (y1 == y2)
    {
      x  = xd; y  = yd;
      xp = xb; yp = yb;
      xx = xa; yy = ya;
      xxp= xc; yyp= yc;
    }
    else if (y1 < y2)
    {
      // b to c
      IntersectLines(xb,yb, para1[0], para1[1], xd, yd, vec1[0], vec1[1], x, y);
      IntersectLines(xb,yb, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xp, yp);
      IntersectLines(xc,yc, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xx, yy);
      IntersectLines(xc,yc, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xxp, yyp);
    }
    else
    {
      // d to a
      IntersectLines(xd,yd, para1[0], para1[1], xc, yc, vec1[0], vec1[1], x, y);
      IntersectLines(xd,yd, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xp, yp);
      IntersectLines(xa,ya, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xx, yy);
      IntersectLines(xa,ya, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xxp, yyp);
    }
  }

  float startx,starty;
  float startxp,startyp;
  float stopx,stopy;
  float stopxp,stopyp;

  if (y1 != y2)
  {
    IntersectLines(x1, y1, para1[0], para1[1], x,  y,  vec1[0], vec1[1], startx,  starty);
    IntersectLines(x1, y1, para1[0], para1[1], xp, yp, vec1[0], vec1[1], startxp, startyp);
    IntersectLines(x2, y2, para1[0], para1[1], x,  y,  vec1[0], vec1[1], stopx,   stopy);
    IntersectLines(x2, y2, para1[0], para1[1], xp, yp, vec1[0], vec1[1], stopxp,  stopyp);
  }
  else
  {
    startx  = x1; starty  = y;
    startxp = x1; startyp = yp;
    stopx   = x2; stopy   = y;
    stopxp  = x2; stopyp  = yp;
  }

  nuiGradientStopList::const_iterator it = rGradient.GetStopList().begin();
  nuiGradientStopList::const_iterator end = rGradient.GetStopList().end();

  float px1, py1;
  float px2, py2;

  PushClipping();
  nuiRect r = rEnclosingRect;
  nglMatrixf m(GetMatrix());
  nglVectorf v1(r.Left(), r.Top(), 0);
  v1 = m * v1;
  nglVectorf v2 = nglVectorf(r.Right(), r.Bottom(), 0);
  v2 = m * v2;
  r.Set(v1[0], v1[1], v2[0], v2[1], false);

  Clip(r);
  SetClipping(true);

  std::vector<nuiShape::CacheElement::Vertex> vertices;

  nuiColor col = it->second;
  vertices.push_back(nuiShape::CacheElement::Vertex(x, y, col));
  vertices.push_back(nuiShape::CacheElement::Vertex(xp, yp, col));

  for ( ; it != end; ++it)
  {
    float r = it->first;
    float rm = 1.0f - r;
    px1 = startx * rm + stopx * r;
    py1 = starty * rm + stopy * r;
    px2 = startxp * rm + stopxp * r;
    py2 = startyp * rm + stopyp * r;

    col = it->second;
    vertices.push_back(nuiShape::CacheElement::Vertex(px1, py1, col));
    vertices.push_back(nuiShape::CacheElement::Vertex(px2, py2, col));
  }

  vertices.push_back(nuiShape::CacheElement::Vertex(xxp, yyp, col));
  vertices.push_back(nuiShape::CacheElement::Vertex(xx, yy, col));

  glEnableClientState(GL_COLOR_ARRAY);
  glEnableClientState(GL_VERTEX_ARRAY);
  glColorPointer(4,  GL_FLOAT, sizeof(nuiShape::CacheElement::Vertex), vertices[0].mColor);
  glVertexPointer(3, GL_FLOAT, sizeof(nuiShape::CacheElement::Vertex), vertices[0].mCoord);

  glDrawArrays(GL_QUAD_STRIP, 0, vertices.size());

  glDisableClientState(GL_COLOR_ARRAY);
  glDisableClientState(GL_VERTEX_ARRAY);

  PopClipping();
}
Esempio n. 4
0
void nuiDrawContext::DrawGradient(const nuiGradient& rGradient, const nuiRect& rEnclosingRect, nuiSize x1, nuiSize y1, nuiSize x2, nuiSize y2)
{
  nuiVector2 vec(x2 - x1, y2 - y1);
  nuiVector2 para(-vec[1], vec[0]);
  nuiVector2 vec1(vec);
  nuiVector2 para1(para);
  vec1.Normalize();
  para1.Normalize();

  // What Quadrant are we in?:
  //         |
  //     a   |   b
  //         |
  //  ----------------
  //         |
  //     c   |   d
  //         |
  float xa, xb, xc, xd;
  float ya, yb, yc, yd;
  float x, y;
  float xp, yp;
  float xx, yy;
  float xxp, yyp;

  xa = xc = rEnclosingRect.Left();
  xb = xd = rEnclosingRect.Right();
  ya = yb = rEnclosingRect.Top();
  yc = yd = rEnclosingRect.Bottom();

  if (x1 < x2)
  {
    // Go from a to d or c to b
    if (y1 == y2)
    {
      x  = xa; y  = ya;
      xp = xc; yp = yc;
      xx = xd; yy = yd;
      xxp= xb; yyp= yb;
    }
    else if (y1 < y2)
    {
      // a to d
      IntersectLines(xa,ya, para1[0], para1[1], xb, yb, vec1[0], vec1[1], x, y);
      IntersectLines(xa,ya, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xp, yp);
      IntersectLines(xd,yd, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xx, yy);
      IntersectLines(xd,yd, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xxp, yyp);
    }
    else
    {
      // c to d
      IntersectLines(xc,yc, para1[0], para1[1], xa, ya, vec1[0], vec1[1], x, y);
      IntersectLines(xc,yc, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xp, yp);
      IntersectLines(xb,yb, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xx, yy);
      IntersectLines(xb,yb, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xxp, yyp);
    }
  }
  else
  {
    if (y1 == y2)
    {
      x  = xd; y  = yd;
      xp = xb; yp = yb;
      xx = xa; yy = ya;
      xxp= xc; yyp= yc;
    }
    else if (y1 < y2)
    {
      // b to c
      IntersectLines(xb,yb, para1[0], para1[1], xd, yd, vec1[0], vec1[1], x, y);
      IntersectLines(xb,yb, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xp, yp);
      IntersectLines(xc,yc, para1[0], para1[1], xa, ya, vec1[0], vec1[1], xx, yy);
      IntersectLines(xc,yc, para1[0], para1[1], xd, yd, vec1[0], vec1[1], xxp, yyp);
    }
    else
    {
      // d to a
      IntersectLines(xd,yd, para1[0], para1[1], xc, yc, vec1[0], vec1[1], x, y);
      IntersectLines(xd,yd, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xp, yp);
      IntersectLines(xa,ya, para1[0], para1[1], xb, yb, vec1[0], vec1[1], xx, yy);
      IntersectLines(xa,ya, para1[0], para1[1], xc, yc, vec1[0], vec1[1], xxp, yyp);
    }
  }

  float startx,starty;
  float startxp,startyp;
  float stopx,stopy;
  float stopxp,stopyp;

  if (y1 != y2)
  {
    IntersectLines(x1, y1, para1[0], para1[1], x,  y,  vec1[0], vec1[1], startx,  starty);
    IntersectLines(x1, y1, para1[0], para1[1], xp, yp, vec1[0], vec1[1], startxp, startyp);
    IntersectLines(x2, y2, para1[0], para1[1], x,  y,  vec1[0], vec1[1], stopx,   stopy);
    IntersectLines(x2, y2, para1[0], para1[1], xp, yp, vec1[0], vec1[1], stopxp,  stopyp);
  }
  else
  {
    startx  = x1; starty  = y;
    startxp = x1; startyp = yp;
    stopx   = x2; stopy   = y;
    stopxp  = x2; stopyp  = yp;
  }

  nuiGradientStopList::const_iterator it = rGradient.GetStopList().begin();
  nuiGradientStopList::const_iterator end = rGradient.GetStopList().end();

  float px1, py1;
  float px2, py2;

  PushClipping();
  Clip(rEnclosingRect);
  EnableClipping(true);

  nuiRenderArray* pArray = new nuiRenderArray(GL_TRIANGLE_STRIP);
  pArray->EnableArray(nuiRenderArray::eVertex);
  pArray->EnableArray(nuiRenderArray::eColor);
  
  //  nuiRenderArray Array(GL_LINES);
//  pArray->SetVertexElements(3);
//  pArray->SetColorElements(4);

  nuiColor col = it->second;
  pArray->SetVertex(x, y);
  pArray->SetColor(col);
  pArray->PushVertex();
  pArray->SetVertex(xp, yp);
  pArray->PushVertex();

  for ( ; it != end; ++it)
  {
    float r = it->first;
    float rm = 1.0f - r;
    px1 = startx * rm + stopx * r;
    py1 = starty * rm + stopy * r;
    px2 = startxp * rm + stopxp * r;
    py2 = startyp * rm + stopyp * r;

    col = it->second;
    pArray->SetColor(col);
    pArray->SetVertex(px2, py2);
    pArray->PushVertex();
    pArray->SetVertex(px1, py1);
    pArray->PushVertex();
  }

  pArray->SetVertex(xx, yy);
  pArray->PushVertex();
  pArray->SetVertex(xxp, yyp);
  pArray->PushVertex();

  DrawArray(pArray);

  PopClipping();
}
Esempio n. 5
0
/*
@S_GET_TASK_GIFTS=0x0911 --获取任务奖励
*/
int TASK::clientGetTaskReward( ROLE* role, unsigned char * data, size_t dataLen )
{
	WORD wTaskID;
	if ( !BASE::parseWORD( data, dataLen, wTaskID ) )
		return 0;

	BYTE byRet = TASK_SUCCESS;

	string strData;

	do 
	{
		CONFIG::MISSION_CFG* taskCfg = CONFIG::getMissionCfg(wTaskID);

		COND_BREAK( nullptr == taskCfg, byRet, TASK_ERROR_ID );

		auto it = role->mapTask.find( taskCfg->group );

		COND_BREAK( it == role->mapTask.end(), byRet, TASK_ERROR_ID );

		auto& task = it->second;

		COND_BREAK( task.wTaskID != wTaskID, byRet, TASK_ERROR_ID );

		COND_BREAK( role->wLevel < taskCfg->level_limit, byRet, NOT_ENOUGH_LEVEL );

		COND_BREAK( task.byTaskStatus == E_TASK_UNCOMPLETE, byRet, NOT_ENOUGH_LEVEL );

		COND_BREAK( task.byTaskStatus == E_TASK_COMPLETE_ALREADY_GET_PRIZE, byRet, ALREADY_GET );

		CONFIG::ITEM_CFG* itemCfg = CONFIG::getItemCfg( taskCfg->itemID );
		if ( itemCfg!=NULL )//可能没有物品奖励
		{
			COND_BREAK(ItemCtrl::makeOneTypeItem(role, itemCfg, taskCfg->itemNum) == -1, byRet, ITEM_FULL);	
		}

		autoUnlockTask( role, wTaskID);

		CONFIG::MISSION_CFG* nextTaskCfg = CONFIG::getMissionCfg( wTaskID+1 );

		if (nextTaskCfg != NULL && nextTaskCfg->group == taskCfg->group)
		{
			task = MAIN_TASK_INFO( wTaskID+1 );
		}
		else
		{
			task.byTaskStatus = E_TASK_COMPLETE_ALREADY_GET_PRIZE;
		}

		if ( taskCfg->ingot > 0 )//1元宝
		{
			ADDUP(role->dwIngot, (int)taskCfg->ingot);
			notifyIngot(role);
		}
		if( taskCfg->coin > 0 )//2铜钱
		{
			ADDUP(role->dwCoin, (int)taskCfg->coin);
			notifyCoin(role);
		}

		if(taskCfg->exp > 0)//3经验
		{
			WORD wOldLevel = role->wLevel;
			CONFIG::addRoleExp( role, role->dwExp, taskCfg->exp );
			notifyExp(role);
		}

		if ( taskCfg->type == E_TASK_LEVEL )
		{
			RoleMgr::getMe().judgeCompleteTypeTask(role, E_TASK_LEVEL);//升级触发点
		}

		if ( taskCfg->type == E_TASK_VIP_LOGIN )
		{
			ITEM_INFO para1(0, role->getVipLevel());
			RoleMgr::getMe().judgeCompleteTypeTask(role, E_TASK_VIP_LOGIN, &para1);
		}

		if ( taskCfg->type == E_TASK_SET_FIGHT_SKILL_NUM )
		{
			role->role_skill.judgeSetSkillTask();
		}

		if( taskCfg->type == E_TASK_FIGHT_BOSS )
		{
			ADDUP3( role->byAllBuyBossTimes, 1, BYTE_MAX );
		}

		logs_db_thread::singleton().consume(service::id, role->roleName, role->dwRoleID,
			(int)taskCfg->coin, (int)taskCfg->ingot, purpose::task_reward, 0);

	} while (0);
	S_APPEND_BYTE( strData, byRet);
	PROTOCAL::sendClient( role->client, PROTOCAL::cmdPacket(S_GET_TASK_GIFTS, strData) );
	return 0;

#if 0
	if (taskCfg != NULL)
	{
		auto it = role->mapTask.find( taskCfg->group );
		if ( it != role->mapTask.end())
		{
			auto& task = it->second;

			if(task.wTaskID == wTaskID )
			{
				if (role->wLevel >= taskCfg->level_limit)
				{
					if (task.byTaskStatus == E_TASK_UNCOMPLETE)
					{
						byRet = NOT_COMPELETE;
					}
					else if (task.byTaskStatus == E_TASK_COMPLETE_ALREADY_GET_PRIZE)
					{
						byRet = ALREADY_GET;
					}
					else
					{
						byRet = TASK_SUCCESS;
						if (taskCfg->itemID != 0)
						{
							CONFIG::ITEM_CFG* itemCfg = CONFIG::getItemCfg( taskCfg->itemID );
							if ( itemCfg!=NULL )
							{
								if (ItemCtrl::makeOneTypeItem(role, itemCfg, taskCfg->itemNum) == -1)
								{
									byRet = ITEM_FULL;
								}		
							}
						}

						if (byRet != ITEM_FULL)
						{
							autoUnlockTask( role, wTaskID);

							nextTaskCfg = CONFIG::getMissionCfg( wTaskID+1 );

							if (nextTaskCfg != NULL && nextTaskCfg->group == taskCfg->group)
							{
								task = MAIN_TASK_INFO( wTaskID+1 );
							}
							else
							{
								task.byTaskStatus = E_TASK_COMPLETE_ALREADY_GET_PRIZE;

								//if (taskCfg->repeat == 1)
								//{
								//	task.byTaskStatus = E_TASK_COMPLETE_ALREADY_GET_PRIZE;
								//}
								//else
								//{
								//	role->mapTask.erase(it);
								//}
							}

							if ( taskCfg->ingot > 0 )//1元宝
							{
								ADDUP(role->dwIngot, (int)taskCfg->ingot);
								notifyIngot(role);
							}
							if(taskCfg->coin > 0)//2铜钱
							{
								ADDUP(role->dwCoin, (int)taskCfg->coin);
								notifyCoin(role);
							}
							logs_db_thread::singleton().consume(service::id, role->roleName, role->dwRoleID,
								(int)taskCfg->coin, (int)taskCfg->ingot, purpose::task_reward, 0);
							if(taskCfg->exp > 0)//3经验
							{
								WORD wOldLevel = role->wLevel;
								CONFIG::addRoleExp( role, role->dwExp, taskCfg->exp );
								notifyExp(role);
							}

							if ( taskCfg->type == E_TASK_LEVEL )
							{
								RoleMgr::getMe().judgeCompleteTypeTask(role, E_TASK_LEVEL);//升级触发点
							}

							if ( taskCfg->type == E_TASK_VIP_LOGIN )
							{
								ITEM_INFO para1(0, role->getVipLevel());
								RoleMgr::getMe().judgeCompleteTypeTask(role, E_TASK_VIP_LOGIN, &para1);
							}

							if ( taskCfg->type == E_TASK_SET_FIGHT_SKILL_NUM )
							{
								role->role_skill.judgeSetSkillTask();
							}

							if( taskCfg->type == E_TASK_FIGHT_BOSS )
							{
								ADDUP3( role->byAllBuyBossTimes, 1, BYTE_MAX );
							}
						}
					}
				}
				else
				{
					byRet = NOT_ENOUGH_LEVEL;
				}
			}
		}
	}
	
	S_APPEND_BYTE( strData, byRet);
	PROTOCAL::sendClient( role->client, PROTOCAL::cmdPacket(S_GET_TASK_GIFTS, strData) );
	return 0;
#endif
}