游戏开发特殊技巧-special.effects.game.programming

源代码在线查看: ch19p1_particleevent.cpp

软件大小: 126.57M
上传用户: BoatShip
关键词: programming special effects game
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include "Ch19p1_ParticleEvent.h"
				
				void CParticleEvent::ProcessPropEqualsValue(CMinMax &prop,
				    std::vector::iterator &TokenIter, 
				    std::vector::iterator &EndIter)
				{
				  // next token should be =
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  if (TokenIter->m_Type != Equals) throw("Expecting = after property.");
				
				  // next token should be a number
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  CParticleEmitterTokenizer::ProcessNumber(prop, TokenIter, EndIter);
				}
				
				void CParticleEvent::ProcessPropEqualsValue(CMinMax &prop,
				    std::vector::iterator &TokenIter, 
				    std::vector::iterator &EndIter)
				{
				  // next token should be =
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  if (TokenIter->m_Type != Equals) throw("Expecting = after property.");
				
				  // next token should be a number
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  CParticleEmitterTokenizer::ProcessVector(prop, TokenIter, EndIter);
				}
				
				void CParticleEvent::ProcessPropEqualsValue(CMinMax &prop,
				    std::vector::iterator &TokenIter, 
				    std::vector::iterator &EndIter)
				{
				  // next token should be =
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  if (TokenIter->m_Type != Equals) throw("Expecting = after property.");
				
				  // next token should be a number
				  CParticleEmitterTokenizer::NextToken(TokenIter, EndIter);
				  CParticleEmitterTokenizer::ProcessColor(prop, TokenIter, EndIter);
				}
				
				bool CParticleEvent_Size::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("SIZE") == std::string::npos) throw("Expecting Size!");
				  ProcessPropEqualsValue(m_Size, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_Color::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("COLOR") == std::string::npos) throw("Expecting Color!");
				  ProcessPropEqualsValue(m_Color, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_RedColor::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("REDCOLOR") == std::string::npos) throw("Expecting RedColor!");
				  ProcessPropEqualsValue(m_RedColor, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_GreenColor::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("GREENCOLOR") == std::string::npos) throw("Expecting GreenColor!");
				  ProcessPropEqualsValue(m_GreenColor, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_BlueColor::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("BLUECOLOR") == std::string::npos) throw("Expecting BlueColor!");
				  ProcessPropEqualsValue(m_BlueColor, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_Alpha::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("ALPHA") == std::string::npos) throw("Expecting Alpha!");
				  ProcessPropEqualsValue(m_Alpha, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_Velocity::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("VELOCITY") == std::string::npos) throw("Expecting Velocity!");
				  ProcessPropEqualsValue(m_Velocity, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_VelocityX::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("VELOCITYX") == std::string::npos) throw("Expecting VelocityX!");
				  ProcessPropEqualsValue(m_VelocityX, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_VelocityY::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("VelocityY") == std::string::npos) throw("Expecting VelocityY!");
				  ProcessPropEqualsValue(m_VelocityY, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_VelocityZ::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("VelocityZ") == std::string::npos) throw("Expecting VelocityZ!");
				  ProcessPropEqualsValue(m_VelocityZ, TokenIter, EndIter);
				  return(true);
				}
				
				bool CParticleEvent_EventTimer::ProcessTokenStream(std::vector::iterator &TokenIter, 
				                                             std::vector::iterator &EndIter)
				{
				  if (TokenIter->m_strValue.find("EVENTTIMER") == std::string::npos) throw("Expecting EventTimer!");
				  ProcessPropEqualsValue(m_EventTimer, TokenIter, EndIter);
				  return(true);
				}
				
				void CParticleEvent_Size::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_fSize = m_Size.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetSize().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_fSizeStep = newvalue - part.m_fSize / timedelta;
				  }
				}
				
				void CParticleEvent_Color::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_Color = m_Color.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    D3DXCOLOR newcolor = static_cast(m_NextFadeEvent)->GetColor().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    // calculate color deltas to get us to the next fade event.
				    part.m_ColorStep.r = newcolor.r - part.m_Color.r / timedelta;
				    part.m_ColorStep.g = newcolor.g - part.m_Color.g / timedelta;
				    part.m_ColorStep.b = newcolor.b - part.m_Color.b / timedelta;
				    part.m_ColorStep.a = newcolor.a - part.m_Color.a / timedelta;
				  }
				}
				
				void CParticleEvent_RedColor::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_Color.r = m_RedColor.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetRedColor().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_ColorStep.r = newvalue - part.m_Color.r / timedelta;
				  }
				
				}
				
				void CParticleEvent_GreenColor::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_Color.g = m_GreenColor.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetGreenColor().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_ColorStep.g = newvalue - part.m_Color.g / timedelta;
				  }
				}
				
				void CParticleEvent_BlueColor::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_Color.b = m_BlueColor.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetBlueColor().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_ColorStep.b = newvalue - part.m_Color.b / timedelta;
				  }
				}
				
				void CParticleEvent_Alpha::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_Color.a = m_Alpha.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetAlpha().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_ColorStep.a = newvalue - part.m_Color.a / timedelta;
				  }
				}
				
				void CParticleEvent_Velocity::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_vDir = m_Velocity.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    D3DXVECTOR3 newvalue = static_cast(m_NextFadeEvent)->GetVelocity().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_vDirStep.x = newvalue.x - part.m_vDir.x / timedelta;
				    part.m_vDirStep.y = newvalue.y - part.m_vDir.y / timedelta;
				    part.m_vDirStep.z = newvalue.z - part.m_vDir.z / timedelta;
				  }
				}
				
				void CParticleEvent_VelocityX::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_vDir.x = m_VelocityX.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetValue().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_vDirStep.x = newvalue - part.m_vDir.x / timedelta;
				  }
				}
				
				void CParticleEvent_VelocityY::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_vDir.y = m_VelocityY.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetValue().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_vDirStep.y = newvalue - part.m_vDir.y / timedelta;
				  }
				}
				
				void CParticleEvent_VelocityZ::DoItToIt(CParticle &part)
				{
				  if (!IsFade()) part.m_vDir.z = m_VelocityZ.GetRandomNumInRange();
				  if (m_NextFadeEvent) {
				    float newvalue = static_cast(m_NextFadeEvent)->GetValue().GetRandomNumInRange();
				    float timedelta = m_NextFadeEvent->GetActualTime() - GetActualTime();
				    if (timedelta == 0) timedelta = 1; // prevent divide by zero errors
				    part.m_vDirStep.z = newvalue - part.m_vDir.z / timedelta;
				  }
				}
				
				
				void CParticleEvent_EventTimer::DoItToIt(CParticle &part)
				{
				  part.m_fEventTimer = m_EventTimer.GetRandomNumInRange();
				}			

相关资源