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; }
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]); } }