Exemple #1
0
	CCustomShape::CCustomShape(void)
	{
		
		SetShapeType();

		m_fRadius = 100;
		setPolygonModeOverrideable(false);

		m_defaultColor = Ogre::ColourValue(0, 1.0, 0, 0.5);

		m_pUnreachRegion = NULL;
		m_Weights = NULL;
		//m_Dist = NULL;
	}
Exemple #2
0
Cliff_Small::Cliff_Small(Vector2 startingPosition) {
    int zoom = ((ShapeGameManager*)theWorld.GetGameManager())->WorldZoom * 2;
    SetSize(zoom);

    SetPosition(startingPosition);

    // SetSprite("Resources/Images/sa_cliff_small.png");

    SetDensity(0.0f);
    SetFriction(0.5f);
    SetRestitution(0.0f);
    SetShapeType(PhysicsActor::SHAPETYPE_BOX);
    SetColor(1.0f, 1.0f, 0.5f, 1.0f);

    InitPhysics();

    Tag("ground");
}
Exemple #3
0
FinishLine::FinishLine(Vector2 startingPosition) {
  int zoom = ((ShapeGameManager*)theWorld.GetGameManager())->WorldZoom;
  SetSize(zoom * 1.75, zoom * 2);

  SetPosition(startingPosition);

  SetSprite("Resources/Images/sa_finish_line.png");
  // SetUVs(Vector2(0.0f, 0.0f), Vector2(7.0f, 5.0f));

  SetDensity(0.0f);
  SetFriction(0.5f);
  SetRestitution(0.0f);
  SetShapeType(PhysicsActor::SHAPETYPE_BOX);
  SetColor(1.0f, 1.0f, 1.0f, 1.0f);

  // InitPhysics();

  Tag("ground");
}
Exemple #4
0
	// 填充数据区
	void CCustomShape::FillAreaPointData()
	{

		size_t posCount = m_planePointArray.size();

		if ( posCount <= 0 )
		{
			 //ClearVertexBuffer();
			return;
		}

		// 创建定点缓冲区.
		CreateAreaVertexBuffer();
	
		// 更新包围盒以便能够显示线段
		Ogre::Vector3 vmax(Ogre::Vector3::ZERO);
        Ogre::Vector3 vmin(Ogre::Vector3::ZERO);

     	for (size_t ii = 0; ii < posCount; ++ii)
		{
			if(vmin.x > m_planePointArray[ii].x)
			{
				vmin.x = m_planePointArray[ii].x;
			}

			if(vmin.y > m_planePointArray[ii].y)
			{
				vmin.y = m_planePointArray[ii].y;
			}

			if(vmin.z > m_planePointArray[ii].z)
			{
				vmin.z = m_planePointArray[ii].z;
			}
			

			if(vmax.x < m_planePointArray[ii].x)
			{
				vmax.x = m_planePointArray[ii].x;
			}

			if(vmax.y < m_planePointArray[ii].y)
			{
				vmax.y = m_planePointArray[ii].y;
			}

			if(vmax.z < m_planePointArray[ii].z)
			{
				vmax.z = m_planePointArray[ii].z;
			}

		}

		vmin.x -= 100.0f;
        vmax.x += 100.0f;

		vmin.y -= 100.0f;
        vmax.y += 100.0f;

		vmin.z -= 100.0f;
        vmax.z += 100.0f;

		// 求半径
        Ogre::Real sqLen = std::max(vmax.squaredLength(), vmin.squaredLength());
        m_fRadius = Ogre::Math::Sqrt(sqLen);//

		// 更新包围盒
        mBox.setExtents(vmin,vmax);//
        getParentNode()->needUpdate();//

		// 锁定缓冲区, 填充数据.
		Ogre::RGBA *pCol;
		Ogre::ColourValue color;
		bool bSetColor = false;
		float *vertexPos = static_cast<float*>(m_vbuf->lock(Ogre::HardwareBuffer::HBL_DISCARD));

		Ogre::ColourValue Areacolor = Ogre::ColourValue(5.0, 0, 1.0, 0.5);
		for (size_t i = 0; i < posCount; ++i)
		{
			*vertexPos = m_planePointArray[i].x;
			vertexPos++;
			*vertexPos = m_planePointArray[i].y+20;
			vertexPos++;
			*vertexPos = m_planePointArray[i].z;
			vertexPos++;
			
			pCol = static_cast<Ogre::RGBA*>(static_cast<void*>(vertexPos));
       		// 用diffuse来做为alpha来源
            Ogre::Root::getSingleton().convertColourValue(Areacolor, pCol++ ) ;
            vertexPos = static_cast<float*>(static_cast<void*>(pCol));
		}

		m_vbuf->unlock();    


		SetShapeType(Ogre::RenderOperation::OT_TRIANGLE_LIST);

	}
Exemple #5
0
	// 填充点的信息
	void CCustomShape::FillPointData()
	{
		size_t posCount = m_pointArray.size();

		if ( posCount <= 0 )
		{
			return;
		}

		// 创建定点缓冲区.
		CreateVertexBuffer();
	
		// 更新包围盒以便能够显示线段
		Ogre::Vector3 vmax(Ogre::Vector3::ZERO);
        Ogre::Vector3 vmin(Ogre::Vector3::ZERO);

     	for (size_t ii = 0; ii < posCount; ++ii)
		{
			if(vmin.x > m_pointArray[ii].x)
			{
				vmin.x = m_pointArray[ii].x;
			}

			if(vmin.y > m_pointArray[ii].y)
			{
				vmin.y = m_pointArray[ii].y;
			}

			if(vmin.z > m_pointArray[ii].z)
			{
				vmin.z = m_pointArray[ii].z;
			}
			

			if(vmax.x < m_pointArray[ii].x)
			{
				vmax.x = m_pointArray[ii].x;
			}

			if(vmax.y < m_pointArray[ii].y)
			{
				vmax.y = m_pointArray[ii].y;
			}

			if(vmax.z < m_pointArray[ii].z)
			{
				vmax.z = m_pointArray[ii].z;
			}

		}

		vmin.x -= 100.0f;
        vmax.x += 100.0f;

		vmin.y -= 100.0f;
        vmax.y += 100.0f;

		vmin.z -= 100.0f;
        vmax.z += 100.0f;

		// 求半径
        Ogre::Real sqLen = std::max(vmax.squaredLength(), vmin.squaredLength());
        m_fRadius = Ogre::Math::Sqrt(sqLen);//

		// 更新包围盒
        mBox.setExtents(vmin,vmax);//
        getParentNode()->needUpdate();//

		// 锁定缓冲区, 填充数据.
		Ogre::RGBA *pCol;
		Ogre::ColourValue color;
		bool bSetColor = false;
		float *vertexPos = static_cast<float*>(m_vbuf->lock(Ogre::HardwareBuffer::HBL_DISCARD));
		for (size_t i = 0; i < posCount; ++i)
		{
			*vertexPos++ = m_pointArray[i].x;
			*vertexPos++ = m_pointArray[i].y+10;
			*vertexPos++ = m_pointArray[i].z;
			
			if( !bSetColor)
			{
				// 填充定点颜色
				color = m_defaultColor;
			}

			if(m_LineColroMap.count(i))
			{
				color = m_LineColroMap[i];
				bSetColor = true;
			}
			else
			{
				bSetColor = false;
			}

            pCol = static_cast<Ogre::RGBA*>(static_cast<void*>(vertexPos));
       		// 用diffuse来做为alpha来源
            Ogre::Root::getSingleton().convertColourValue(m_defaultColor, pCol++ ) ;
            vertexPos = static_cast<float*>(static_cast<void*>(pCol));
		}

		m_vbuf->unlock();     

		SetShapeType();

	}