Example #1
0
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;
}
Example #2
0
djbool DJDynamicEffect::AddParticle(const DJVector3 &vPos)
{
	DJEffectParticle *pPart;
	DJColor	start,end;
	float yaw,pitch,speed;
	if (m_nActiveCount < m_pEffectDesc->m_nMaxParticles)
	{
		pPart = GetParticle();		// THE CURRENT PARTICLE 
		if (!pPart)
			return DJFALSE;

		pPart->pNext = m_pActiveParticles;	// SET ITS NEXT POINTER
		m_pActiveParticles = pPart;		// SET IT IN THE EMITTER
		pPart->vPos = vPos;
		pPart->vPrevPos = pPart->vPos;	// USED FOR ANTI ALIAS

		// CALCULATE THE STARTING DIRECTION VECTOR
		yaw = m_pEffectDesc->m_fYaw + (m_pEffectDesc->m_fYawVar * djRandomGetFloat2());
		pitch = m_pEffectDesc->m_fPitch + (m_pEffectDesc->m_fPitchVar * djRandomGetFloat2());

		// CONVERT THE ROTATIONS TO A VECTOR
		//RotationToDirection(pitch,yaw,&pPart->vDir);
		//pPart->vDir = DJVector3(0,0,1);

		pPart->vDir[0] = (float)(-djSin(yaw) * djCos(pitch));
		pPart->vDir[1] = (float)djSin(pitch);
		pPart->vDir[2] = (float)(djCos(pitch) * djCos(yaw));

		// CALCULATE THE LIFE SPAN
		pPart->nLife = m_pEffectDesc->m_nLife + (djint32)((float)m_pEffectDesc->m_nLifeVar * djRandomGetFloat2());

		float fStartSize = m_pEffectDesc->m_fStartSize + (m_pEffectDesc->m_fStartSizeVar * djRandomGetFloat2());
		float fEndSize = m_pEffectDesc->m_fEndSize + (m_pEffectDesc->m_fEndSizeVar * djRandomGetFloat2());
		if (fStartSize < 0.0f)
			fStartSize = 0.0f;
		if (fEndSize < 0.0f)
			fEndSize = 0.0f;
		pPart->fSize = fStartSize;
		pPart->fDeltaSize = (fEndSize - fStartSize) / (float)pPart->nLife;
		
		// MULTIPLY IN THE SPEED FACTOR
		speed = m_pEffectDesc->m_fSpeed + (m_pEffectDesc->m_fSpeedVar * djRandomGetFloat2());
		pPart->vDir *= speed;

		// CALCULATE THE COLORS
		start = m_pEffectDesc->m_cStartColor + m_pEffectDesc->m_cStartColorVar * djRandomGetFloat2();
		end = m_pEffectDesc->m_cEndColor + (m_pEffectDesc->m_cEndColorVar * djRandomGetFloat2());
		start.ClampZero();
		start.ClampOne();
		end.ClampZero();
		end.ClampOne();

		pPart->cCol = start;

		// ROTATION
		pPart->fRot = m_pEffectDesc->m_fRot + m_pEffectDesc->m_fRotVar * djRandomGetFloat2();
		pPart->fDeltaRot = m_pEffectDesc->m_fRotSpeed + m_pEffectDesc->m_fRotSpeedVar * djRandomGetFloat2();

		// CREATE THE COLOR DELTA
		pPart->cDeltaCol = (end - start) / (float)pPart->nLife;

		m_nActiveCount++;	// A NEW PARTICLE IS BORN
		return DJTRUE;
	}
	return DJFALSE;
}