⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcurve.cpp

📁 机甲指挥官2源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		
	case e_ComplexLinearType:
		{
			SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}	
		break;
		
	case e_ComplexComplexType:
		{
			SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}	
		break;
		
	case e_ComplexSplineType:
		{
			SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantComplexType:
		{
			SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantLinearType:
		{
			SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantSplineType:
		{
			SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	case e_SplineLinearType:
		{
			SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	case e_SplineSplineType:
		{
			SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.ComputeRange(low,hi);
			else
				SCurve->m_seedCurve.ComputeRange(low,hi);
		}
		break;
		
	default:
		break;
	}
	
}

void 
gosFX::Curve::ExpensiveComputeRange(
									Stuff::Scalar *low,
									Stuff::Scalar *hi
									)
{
	Check_Object(this);
	Check_Pointer(low);
	Check_Pointer(hi);
	
	switch(m_type)
	{
	case e_ConstantType:
		{
			ConstantCurve *SCurve=(ConstantCurve *)this;
			SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_LinearType:
		{
			LinearCurve *SCurve=(LinearCurve *)this;
			SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_SplineType:
		{
			SplineCurve *SCurve=(SplineCurve *)this;
			SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_ComplexType:
		{
			ComplexCurve *SCurve=(ComplexCurve *)this;
			SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_ComplexLinearType:
		{
			SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
				SCurve->ComputeRange(low,hi);
		}	
		break;
		
	case e_ComplexComplexType:
		{
			SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
				SCurve->ComputeRange(low,hi);
		}	
		break;
		
	case e_ComplexSplineType:
		{
			SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantComplexType:
		{
			SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantLinearType:
		{
			SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_ConstantSplineType:
		{
			SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_SplineLinearType:
		{
			SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	case e_SplineSplineType:
		{
			SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
				SCurve->ComputeRange(low,hi);
		}
		break;
		
	default:
		break;
	}
	
}


Stuff::Scalar 
gosFX::Curve::Mid(int curvenum)
{
	Stuff::Scalar min,max;
	ExpensiveComputeRange(&min,&max,curvenum);
	return min+(max-min)*0.5f;
}

void 
gosFX::Curve::TranslateTo(Stuff::Scalar pos,int curvenum)
{
	Check_Object(this);
	
	switch(m_type)
	{
	case e_ConstantType:
		{
			ConstantCurve *SCurve=(ConstantCurve *)this;
			SCurve->SetCurve(pos);
		}
		break;
		
	case e_LinearType:
		{
			LinearCurve *SCurve=(LinearCurve *)this;
			Stuff::Scalar s;
			s=SCurve->ComputeSlope(0.0f);
			SCurve->SetCurve(pos,pos+s);
		}
		break;
		
	case e_SplineType:
		{
			SplineCurve *SCurve=(SplineCurve *)this;
			Stuff::Scalar v0,v1,s0,s1;
			v0=SCurve->ComputeValue(0.0f,0.0f);
			v1=SCurve->ComputeValue(1.0f,0.0f);
			s0=SCurve->ComputeSlope(0.0f);
			s1=SCurve->ComputeSlope(1.0f);
			
			v1+=pos-v0;
			v0=pos;
			
			SCurve->SetCurve(v0,s0,v1,s1);
		}
		break;
		
	case e_ComplexType:
		{
			ComplexCurve *SCurve=(ComplexCurve *)this;
			Stuff::Scalar delta,x1,x2,y1,y2,slp;
			
			delta=pos-SCurve->ComputeValue(0.0f,0.0f);
			
			for(int key=0;key<SCurve->GetKeyCount()-1;key++)
			{
				x1=(*SCurve)[key].m_time;
				x2=(*SCurve)[key+1].m_time;
				y1=SCurve->ComputeValue(x1,0.0f);
				y2=SCurve->ComputeValue(x2,0.0f);
				y1+=delta;
				y2+=delta;
				(*SCurve)[key].SetLinearKey(x1,y1,y2,x2-x1);
			}
			
			x1=(*SCurve)[key].m_time;
			y1=SCurve->ComputeValue(x1,0.0f);
			y1+=delta;
			slp=(*SCurve)[key].m_slope;
			(*SCurve)[SCurve->GetKeyCount()-1].SetLinearKey(x1,y1,y1+slp*0.1f,0.1f);
			
		}
		break;
		
	case e_ComplexLinearType:
		{
			SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}	
		break;
		
	case e_ComplexComplexType:
		{
			SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}	
		break;
		
	case e_ComplexSplineType:
		{
			SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	case e_ConstantComplexType:
		{
			SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	case e_ConstantLinearType:
		{
			SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	case e_ConstantSplineType:
		{
			SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	case e_SplineLinearType:
		{
			SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	case e_SplineSplineType:
		{
			SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateTo(pos,curvenum);
			else
				SCurve->m_seedCurve.TranslateTo(pos,curvenum);
		}
		break;
		
	default:
		break;
	}
	
}

void 
gosFX::Curve::TranslateBy(Stuff::Scalar delta,int curvenum)
{
	Check_Object(this);
	
	switch(m_type)
	{
	case e_ConstantType:
		{
			ConstantCurve *SCurve=(ConstantCurve *)this;
			SCurve->SetCurve(SCurve->ComputeValue(0.0f,0.0f)+delta);
		}
		break;
		
	case e_LinearType:
		{
			LinearCurve *SCurve=(LinearCurve *)this;
			Stuff::Scalar s,v;
			s=SCurve->ComputeSlope(0.0f);
			v=SCurve->ComputeValue(0.0f,0.0f);
			SCurve->SetCurve(v+delta,v+delta+s);
		}
		break;
		
	case e_SplineType:
		{
			SplineCurve *SCurve=(SplineCurve *)this;
			Stuff::Scalar v0,v1,s0,s1;
			v0=SCurve->ComputeValue(0.0f,0.0f);
			v1=SCurve->ComputeValue(1.0f,0.0f);
			s0=SCurve->ComputeSlope(0.0f);
			s1=SCurve->ComputeSlope(1.0f);
			
			v1+=delta;
			v0+=delta;
			
			SCurve->SetCurve(v0,s0,v1,s1);
		}
		break;
		
	case e_ComplexType:
		{
			ComplexCurve *SCurve=(ComplexCurve *)this;
			Stuff::Scalar x1,x2,y1,y2;
			
			
			for(int key=0;key<SCurve->GetKeyCount()-1;key++)
			{
				x1=(*SCurve)[key].m_time;
				x2=(*SCurve)[key+1].m_time;
				y1=SCurve->ComputeValue(x1,0.0f);
				y2=SCurve->ComputeValue(x2,0.0f);
				y1+=delta;
				y2+=delta;
				(*SCurve)[key].SetLinearKey(x1,y1,y2,x2-x1);
			}
			
			x1=(*SCurve)[key].m_time;
			y1=SCurve->ComputeValue(x1,0.0f);
			y1+=delta;
			(*SCurve)[SCurve->GetKeyCount()-1].SetLinearKey(x1,y1,y1,1.0f);
			
		}
		break;
		
	case e_ComplexLinearType:
		{
			SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}	
		break;
		
	case e_ComplexComplexType:
		{
			SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}	
		break;
		
	case e_ComplexSplineType:
		{
			SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}
		break;
		
	case e_ConstantComplexType:
		{
			SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}
		break;
		
	case e_ConstantLinearType:
		{
			SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}
		break;
		
	case e_ConstantSplineType:
		{
			SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else
				SCurve->m_seedCurve.TranslateBy(delta,curvenum);
		}
		break;
		
	case e_SplineLinearType:
		{
			SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
			if(curvenum==0)
				SCurve->m_ageCurve.TranslateBy(delta,curvenum);
			else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -