void Camera::Reset() { m_vPrevTargetPos = m_vSpanVel = m_vPos = DJVector2(0.0f, 200.0f); m_vDir = DJVector2(0.0f); m_fShakingTime = 1.0f; m_fPaddingOffsetX = 0.0f; }
void Player::OnUpdate() { DJVector2 vPos = m_pSprite->GetPosition(); // Move player in the direction we are walking vPos += m_vDir * pTheApp->GetDeltaAppTime() * 50.0f; // Move 100 pixel // Check that the player does not walk outside of the screen if (vPos[0] < 0.0f) { vPos[0] = 0.0f; m_fTimer = 0.0f; } if (vPos[1] < 0.0f) { vPos[1] = 0.0f; m_fTimer = 0.0f; } if (vPos[0] > (float)g_nScreenWidth) { vPos[0] = (float)g_nScreenWidth ; m_fTimer = 0.0f; } if (vPos[1] > (float)g_nScreenHeight) { vPos[1] = (float)g_nScreenHeight ; m_fTimer = 0.0f; } //Check if player go into a cage if (InCage(cage1) || InCage(cage2)) { m_fTimer = 0.0f; } m_fTimer -= pTheApp->GetDeltaAppTime(); // Time to change direction? if (m_fTimer <= 0.0f) { // Randomize direction m_vDir = DJVector2(1,0); m_vDir = m_vDir.RotatedZ(djRandomGetFloat() * DJ_2PIf); // Choose the sprite animation that is mostly in the right direction if ((m_vDir % DJVector2(1,0) > 0.707f)) m_nDir = 3; else if ((m_vDir % DJVector2(-1,0) > 0.707f)) m_nDir = 2; else if ((m_vDir % DJVector2(0,1) > 0.707f)) m_nDir = 1; else m_nDir = 0; // Play animation on the sprite m_pSprite->PlayAnimation(g_pAnimations[type][m_nDir]); // Randomize timer before changing direction m_fTimer = djRandomGetFloat() * 4.0f; } // Set new position m_pSprite->SetPosition(vPos); // Set the sprite sorting value to the Y position of the sprite m_pSprite->SetSortValue(m_pSprite->GetPosition()[1]); }
Camera::Camera() { m_vPos = DJVector2(0.0f); m_vPrevTargetPos = DJVector2(0.0f); m_vDir = DJVector2(0.0f); m_fShakingTime = 1.0f; m_fPaddingOffsetX = 0.0f; m_fPaddingDesiredOffsetX = 0.0f; m_fPaddingSpeedXFactor = 0.0f; m_fPaddingOffsetY = 0.0f; m_fPaddingDesiredOffsetY = 0.0f; m_fPaddingSpeedYFactor = 0.0f; DJTrace("%s()", __FUNCTION__); }
void Camera::OnUpdate(float fDeltaTime, const DJVector2 &vTargetPos, const DJVector2 &vYRestriction) { DJVector2 vCalculatedTargetPos(vTargetPos); if (vCalculatedTargetPos[1] - (RUNNER_PADDING.e[1] * (float)g_nScreenHeight) < vYRestriction[0]) vCalculatedTargetPos[1] = vYRestriction[0] + (RUNNER_PADDING.e[1] * (float)g_nScreenHeight); if (vCalculatedTargetPos[1] + ((1.0f - RUNNER_PADDING.e[1]) * (float)g_nScreenHeight) > vYRestriction[1]) vCalculatedTargetPos[1] = vYRestriction[1] - ((1.0f - RUNNER_PADDING.e[1]) * (float)g_nScreenHeight); DJVector2 vVel = (vCalculatedTargetPos - m_vPrevTargetPos) / fDeltaTime; DJVector2 vVelDiff = vVel - m_vSpanVel; vVelDiff = vVelDiff & DJVector2(1.0f, 1.0f); m_vSpanVel[0] += vVelDiff[0] * (fDeltaTime / CAMERA_VELOCITY_CATCHUP_TIME.e[0]); m_vSpanVel[1] += vVelDiff[1] * (fDeltaTime / CAMERA_VELOCITY_CATCHUP_TIME.e[1]); DJVector2 vDist = (vCalculatedTargetPos - m_vPos); vDist = vDist & DJVector2(1.0f, 0.3f); m_vPos += m_vSpanVel * fDeltaTime; m_vPos[0] += vDist[0] * (fDeltaTime / CAMERA_POSITION_CATCHUP_TIME[0]); m_vPos[1] += vDist[1] * (fDeltaTime / CAMERA_POSITION_CATCHUP_TIME[1]); //m_vPos += vDist * (fDeltaTime / CAMERA_CATCHUP_TIME); m_vPrevTargetPos = vCalculatedTargetPos; m_fShakingTime += fDeltaTime; if(m_fShakingTime < 1.0f) { float fTran = m_fShakingTime * 20.0f; DJVector2 vTran(5.0f * g_vScaleScreen[0] * djSin(fTran * DJ_PIf), 5.0f * g_vScaleScreen[1] * djSin(fTran * DJ_PIf)); vTran = vTran & m_vDir; if (fTran > 1.0f) { fTran = 1.0f; vTran = DJVector2(0.0f); } DJMatrix2D tmmm; tmmm = theSpriteEngine.GetGlobalTransform(); tmmm.SetTranslation(vTran); theSpriteEngine.SetGlobalTransform(tmmm); } // Padding m_fPaddingOffsetX += djStepToDesiredValue(m_fPaddingOffsetX, m_fPaddingDesiredOffsetX, fDeltaTime * m_fPaddingSpeedXFactor); if(m_vPos[1] < vYRestriction[1] / 1.5f) m_fPaddingOffsetY += djStepToDesiredValue(m_fPaddingOffsetY, 0.075f, fDeltaTime * 0.01f); else m_fPaddingOffsetY += djStepToDesiredValue(m_fPaddingOffsetY, 0.0f, fDeltaTime * 0.01f); //m_fPaddingOffsetY = 0.075f; }
Player::Player(PLAYER_TYPE pt ) { type = pt; SetStopAnimation(DJFALSE); // Create a sprite we can later draw m_pSprite = new DJ2DSprite; // Make the sprite magnify with a blur instead of pixelated m_pSprite->SetFilter(DJ2DSprite::filterLinear); // Set the sprite to the center of the screen //m_pSprite->SetPosition((float)g_nScreenWidth * djRandomGetFloat(), (float)g_nScreenHeight * djRandomGetFloat()); if (type == RED) { //RED is always from the middle of top m_pSprite->SetPosition((float)g_nScreenWidth/2,0); } else { // BLACK is always from the middle of bottom m_pSprite->SetPosition((float)g_nScreenWidth/2, g_nScreenHeight); } // Set the sprite sorting value to the Y position of the sprite m_pSprite->SetSortValue(m_pSprite->GetPosition()[0]); // Randomize direction m_vDir = DJVector2(1,0); // Horizontal m_vDir = m_vDir.RotatedZ(djRandomGetFloat() * DJ_2PIf); // Choose the sprite animation that is mostly in the right direction if ((m_vDir % DJVector2(1,0) > 0.707f)) m_nDir = 3; else if ((m_vDir % DJVector2(-1,0) > 0.707f)) m_nDir = 2; else if ((m_vDir % DJVector2(0,1) > 0.707f)) m_nDir = 1; else m_nDir = 0; // Randomize timer before changing direction m_fTimer = djRandomGetFloat() * 4.0f; // Play animation on the sprite m_pSprite->PlayAnimation(g_pAnimations[type][m_nDir]); // Add sprite to active node list in the sprite engine to automatically update the animations on it theSpriteEngine.AddActiveNode(m_pSprite); DJ2DLayer* pLayer = theSpriteEngine.GetLayer(LAYER_SPRITES); pLayer->AddNode(m_pSprite); }
DJMatrix2D Camera::GetTransform(const DJVector2 &vDriftRatio) { return DJMatrix2D::Translate(DJVector2(-m_vPos.e[0] + ((RUNNER_PADDING.e[0] + m_fPaddingOffsetX) * (float)g_nScreenWidth), -m_vPos.e[1] + ((RUNNER_PADDING.e[1] + m_fPaddingOffsetY) * (float)g_nScreenHeight)) & vDriftRatio); }