示例#1
0
signed long is_acc_abs_angle_y( unsigned long abs_ang )
{
  if( abs(acc.ak.y) > (int)(sin(DEG_2_RAD(abs_ang)) * ACC_1G) )
  {
     if ( acc.ak.y > 0 ) return 1;
     else                return -1;
  }
  return 0;
}
示例#2
0
Transform Transform::RotateZ(float theta) {
	theta = DEG_2_RAD(theta);
	float sint = sinf(theta);
	float cost = cosf(theta);

	Matrix m ( cost, -sint, 0, 0,
			   sint,  cost, 0, 0,
			      0,     0, 1, 0,
			      0,     0, 0, 1);
	return Transform(m, m.Transpose());
}
void PlayerShip::update(double deltaT, double prevDeltaT, InputState *inputState)
{
	double playerDirSin = sin(DEG_2_RAD(-rotateZ));
	double playerDirCos = cos(DEG_2_RAD(-rotateZ));

	if (inputState->isKeyPressed('W') || inputState->isKeyPressed('UP'))
	{
		if (currentSpeed > 0) 
		{
			if (currentSpeed < maxSpeed) {
				currentSpeed += acceleration;
			}
			if (rocketFlamesScaleY < 1.0)
			{
				rocketFlamesScaleY += 0.006;
			}
			if (rocketFlamesScaleX < 1.0)
			{
				rocketFlamesScaleX += 0.006;
			}
		}
		else
		{
			if (currentSpeed < maxSpeed) {
				currentSpeed += directionChangeSpeed;
			}
			if (rocketFlamesScaleY < 1.0)
			{
				rocketFlamesScaleY += 0.006;
			}
			if (rocketFlamesScaleX < 1.0)
			{
				rocketFlamesScaleX += 0.006;
			}
		}
	}

	else if(inputState->isKeyPressed('S'))
	{
		if (currentSpeed > -maxSpeed) {
			if (currentSpeed < 0) {
				currentSpeed -= acceleration;
			}
			else{
				currentSpeed -= 0.1;
			}
		}
		if (rocketFlamesScaleY > 0.0)
		{
			rocketFlamesScaleY -= 0.006;
		}
		if (rocketFlamesScaleX > 0.0)
		{
			rocketFlamesScaleX -= 0.006;
		}
	}
	else
	{
		if (currentSpeed > 0)
		{
			currentSpeed -= decceleration;
			if (currentSpeed < 0)
			{
				currentSpeed = 0;
			}
		}
		else if (currentSpeed <= 0)
		{
			currentSpeed += decceleration;
			if (currentSpeed > 0)
			{
				currentSpeed = 0;
			}
		}
		if (rocketFlamesScaleY > 0.0)
		{
			rocketFlamesScaleY -= 0.006;
		}
		if (rocketFlamesScaleX > 0.0)
		{
			rocketFlamesScaleX -= 0.006;
		}
	}

	playerX += playerDirSin * PLAYER_MOVEMENT_SPEED * deltaT * currentSpeed;
	playerY += playerDirCos * PLAYER_MOVEMENT_SPEED * deltaT * currentSpeed;

	if(inputState->isKeyPressed('D'))
	{
		booster1X = 0.8;
		booster2X = -0.5;
		rotateZ -= rotationSpeed * deltaT;
		spriteX = 1;
		booster1Y = -2.4;

	}
	 else if(inputState->isKeyPressed('A'))
	{
		rotateZ += rotationSpeed * deltaT;
		spriteX = 0.666666;
		booster1X = -0.9;
		booster2X = 0.3;
		booster1Y = -2.4;
	}
	 else {
		 booster1X = -0.7;
		 booster2X = 0.5;
		 spriteX = 0.33333333333;
		 booster1Y = booster2Y = -2.6;
	 }
	//**************************************ATTACK AND BOOST
	if (boostOn == true) {
		maxSpeed = boostSpeed;
	}

	if (boostOn == false) {
		maxSpeed = defaultMaxSpeed;

		if (currentSpeed > maxSpeed) {
			currentSpeed -= 0.1;
		}
	}

	//***************************************JUMPING
	if (inputState->isKeyPressed('J'))
	{
		jump = true;
	}
	if ( jump == true) //is jumping
	{
		if ( jumpStage < JUMP_HEIGHT) //is before apex
		{
			if (falling == false) //is going up
			{
				jumpStage = jumpStage + 0.002 + (1 * deltaT);
				if ( jumpStage  > JUMP_HEIGHT - 0.5)
				{
					falling = true;
				}
			}
			
			else if (falling == true) //is coming back down
			{
				jumpStage = jumpStage - 0.003 - (1 * deltaT);
				if ( jumpStage < 1.001 ) 
				{
					jumpStage = 1;
					jump = false;
					falling = false;
				}
			}
		} 
	}

	//*****************************************************POWER UPS
	if (shieldOn == true)
	{
		if (shieldTimeLength < shieldTimeMax)
		{
			shieldTimeLength += 0.01;
		}
		else {
			shieldOn = false;
			shieldTimeLength = 0;
		}	
	}

	if(powerORBOn == true) {
		powerORBRotate += (ROTATION_SPIKE_BALL_SPEED * deltaT);
		if (powerORBSize < powerORBMaxSize) {
			powerORBSize += 0.001 + (1 * deltaT);
		}
	}
	else if(powerORBOn == false) {
		if (powerORBSize > 0.0) {
			powerORBSize -= 0.001 + (1 * deltaT);
		}
		if (powerORBSize == 0.0) {
			powerORBRotate = 0.0;
		}
	}
	
	shieldTime += (SHIELD_OSCILATION_SPEED * deltaT );

	if (shieldOn == true) {
		if (shieldScale < 1.0) {
			shieldScale += SHIELD_GROWTH_RATE * deltaT;
			if (shieldScale > 1.0) {
				shieldScale = 1.0;
			}
		}
	}
	else {
		if (shieldScale > 0.0) {
			shieldScale -= SHIELD_GROWTH_RATE * deltaT;
			if (shieldScale < 0.0) {
				shieldScale = 0.0;
			}
		}
	}

	//****************************************RESPAWN/DEATH STATE
	if (respawnState == true || damageState == true) {
		respawnTimer += 0.05;
		if (respawnTimer > RESPAWN_STATE_TIME) {
			respawnState = false;
			damageState = false;
			respawnTimer = 0.0;
			respawnstateOpacity = 1.0;
		}
		else {
			respawnstateOpacity = 0.4;
		}
	}

	if (playerX > wallMaxX) {
		playerX = wallMaxX;
	}
	else if (playerX < wallMinX) {
		playerX = wallMinX;
	}

	if (playerY > wallMaxY) {
		playerY = wallMaxY;
	}
	else if (playerY < wallMinY) {
		playerY = wallMinY;
	}


	//****************************************MATRIX COLLISION
	setTraMat(mb1, playerX, playerY, 0.0);
	setRotMat(mb2, M_PI*rotateZ / 180.0, 2);
	MultMat(mb1, mb2, mb);
	for (int i = 0; i < 4; ++i) {
		MultMatPre2DPoint(mb, &playerPoly.vert[i], &playerPolyN.vert[i]);
	}
}