void ConstraintVisualizer::RenderInfinitePlane (IVRenderInterface* pRenderer, const hkvVec3& vCenter, const hkvVec3& vOrientation)
{
  VColorRef color(255, 255, 0, 128);
  VSimpleRenderState_t state(VIS_TRANSP_ALPHA, RENDERSTATEFLAG_FRONTFACE);

  hkvMat3 mRotation (hkvNoInitialization);
  mRotation.setFromEulerAngles (vOrientation.z, vOrientation.y, vOrientation.x);
 
  hkvVec3 vNormal = mRotation.getAxis(2);
  hkvPlane plane (hkvNoInitialization); plane.setFromPointAndNormal (vCenter, vNormal);

  float fSize = 250.0f*EditorManager::Settings->GlobalUnitScaling;
  pRenderer->RenderPlane(plane, vCenter, fSize, fSize, color, state);
}
Exemple #2
0
	void Object::rotateRel(const Vector3& vRotation) {
		Matrix mRotation(Matrix::rotationAxis(m_vXAxis, vRotation.x));
		m_vYAxis = Matrix::transformNormal(m_vYAxis, mRotation);
		m_vZAxis = Vector3::cross(m_vXAxis, m_vYAxis);
		
		mRotation = Matrix::rotationAxis(m_vYAxis, vRotation.y);
		m_vXAxis = Matrix::transformNormal(m_vXAxis, mRotation);
		m_vZAxis = Vector3::cross(m_vXAxis, m_vYAxis);
		
		mRotation = Matrix::rotationAxis(m_vZAxis, vRotation.z);
		m_vXAxis = Matrix::transformNormal(m_vXAxis, mRotation);
		m_vYAxis = Matrix::transformNormal(m_vYAxis, mRotation);
		
		m_bUpdated=false;
	}
Exemple #3
0
Matrix3x2 SliceRenderer::calculateFacingRotationMatrix() {
	assert(_sliceFramePtr);

	Vector3 viewPos = _view->_sliceViewMatrix * _position;
	float dir = atan2(viewPos.x, viewPos.z) + _facing;
	float s = sin(dir);
	float c = cos(dir);

	Matrix3x2 mRotation(c, -s, 0.0f,
	                    s,  c, 0.0f);

	Matrix3x2 mView(_view->_sliceViewMatrix(0,0), _view->_sliceViewMatrix(0,1), 0.0f,
	                _view->_sliceViewMatrix(2,0), _view->_sliceViewMatrix(2,1), 0.0f);

	return mView * mRotation;
}
Exemple #4
0
/*****************************************************************************************************************
	Update Player Object
******************************************************************************************************************/
void Player::Update(float dt)
{
	// if dead don't update anything
	if (!m_alive)
		return;
	
	// get instance of game
	Application2D* app = Application2D::getInstance();

	// reset players rotation
	m_rotation = 0;

	// key press checks for player actions
	//-------------------------------------------------
	// key left 
	if (app->IsKeyDown(GLFW_KEY_LEFT))
	{
		m_rotation += TURN_LEFT;
		m_velocity.m_x -= SPEED;
	}
	//key right
	if (app->IsKeyDown(GLFW_KEY_RIGHT))
	{
		m_rotation += TURN_RIGHT;
		m_velocity.m_x += SPEED;
	}
	// key up
	if (app->IsKeyDown(GLFW_KEY_UP))
	{
		m_velocity.m_y += SPEED;
	}
	// key down
	if (app->IsKeyDown(GLFW_KEY_DOWN))
	{
		m_velocity.m_y += -SPEED;
	}
	// toggle debug
	if (app->IsKeyDown(GLFW_KEY_D))
	{
		if (m_debug)
		{
			m_debug = false;
		}
		else
		{
			m_debug = true;
		}
	}

	// update players spikes
	m_spike1->Update(dt);
	m_spike1a->Update(dt);
	m_spike2->Update(dt);
	m_spike2a->Update(dt);
	m_spike3->Update(dt);
	m_spike3a->Update(dt);
	m_spike4->Update(dt);
	m_spike4a->Update(dt);

	// modify player based on rotation
	Matrix3 mTranspose(0);
	mTranspose.CreateTranslation(m_velocity.m_x * dt, m_velocity.m_y * dt, 1.0f);
	Matrix3 mRotation(0);
	mRotation.setRotateZ(m_rotation * (M_PI/45));

	// rotate player on local axis
	m_local_transform = mTranspose * m_local_transform * mRotation;

	// set postion information for edge detection
	Vector3 position(m_local_transform.m_column3->m_x, m_local_transform.m_column3->m_y, m_local_transform.m_column3->m_z);
	m_position = position;

	// check if player has reached the edge of the game zone
	EdgeDectection();
	
	// set current postion as last position
	m_prevPos = m_position;

}