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

📄 particlesys.cpp

📁 一个96K的3D游戏源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	Temp->ZielOrgPos=Frame2->OrgPos;
	if(Temp->Child!=NULL) StartPlayReal(Temp->Child,Frame1->Child,Frame2->Child);
	if(Temp->Next!=NULL) StartPlayReal(Temp->Next,Frame1->Next,Frame2->Next);
}


void KeyAction(char Key)
{
	tP3D Up,Forward,Right,Pos;
	float MX,MY,Amount;
	POINT MPos;
	tSkeletonNode *Temp,*TRel;
	tAnimationList *TempList;
	tSkelList      *TempSkel;
	long I,K,M;
	tAnimFrame *Frame;
	bool Ende;
	tP3D NPos;

	InsertFrame=false;
	GetCursorPos(&MPos);
		MX=MPos.x;
		MX=(MX/ScreenXSize)-0.5;
		MY=MPos.y;
		MY=(MY/ScreenYSize)-0.5;
		SetCursorPos(ScreenXSize/2,ScreenYSize/2);
		mouse_x=ScreenXSize/2;
		mouse_y=ScreenYSize/2;

		Up.X = sin(Roll);
	    Up.Y = -cos(Roll);
		Up.Z = 0;
		Forward.X = PRot.X;
		Forward.Y = PRot.Y;
		Forward.Z = PRot.Z;

		Norm(&Forward);
		Right=vCross(Up,Forward);
		Norm(&Right);
		Up=vCross(Right,Forward);
		PRot=vAdd(vMulK(Up,-MY*1.0),PRot);
		Norm(&PRot);
		PRot=vAdd(vMulK(Right,MX*1.0),PRot);
		Norm(&PRot);
/*	
--- Konflikt mit Fatherabstand ------

	if(mouse_klick==2)
	{
		if(Key=='W') {RollAround(Node[LastActive],vSet(0,0,0.1));Key=' ';}
		if(Key=='S') {RollAround(Node[LastActive],vSet(0,0,-0.1));Key=' ';}
		if(Key=='A') {RollAround(Node[LastActive],vSet(0.1,0,0));Key=' ';}
		if(Key=='D') {RollAround(Node[LastActive],vSet(-0.1,0,0));Key=' ';}
	}
*/
	if(mouse_klick==2)
	{

		if(Key=='W') { MoveNodePhysicalCorrect(Node[LastActive],vSet(0,-0.1,0));Key=NullChar;InsertFrame=true;}
		if(Key=='S') { MoveNodePhysicalCorrect(Node[LastActive],vSet(0,0.1,0));Key=NullChar;InsertFrame=true;}
		if(Key=='A') { MoveNodePhysicalCorrect(Node[LastActive],vSet(-0.1,0,0));Key=NullChar;InsertFrame=true;}
		if(Key=='D') { MoveNodePhysicalCorrect(Node[LastActive],vSet(0.1,0,0));Key=NullChar;InsertFrame=true;}
		if((Key==VK_DOWN)&&(gFrame>0))
		{
			M=0;
			Temp=GetSkelAddr(LastActive,Obj->SkelList);
			while(Temp!=NULL)
			{
				I=GetSkelNumber(Temp,Obj);
				Frame=GetAnimFrame(Animation,I);
				if((Frame->StartCnt==gFrame))
				{
					if(!LowerAnimationFrame(Animation,I,gFrame)) M=1;
				}
				Temp=Temp->Father;
			}


/*
			for(I=0;I<Obj->SkelNodes;I++)
			{
				Frame=GetAnimFrame(Animation,I,gFrame);
				if((Frame->StartCnt==gFrame))
				{
					if(!LowerAnimationFrame(Animation,I,gFrame)) M=1;
				}
			}
*/
			if(M==0) gFrame--;
			Key=' ';
		}
		if((Key==VK_UP))
		{
			M=0;
			Temp=GetSkelAddr(LastActive,Obj->SkelList);
			while(Temp!=NULL)
			{
				I=GetSkelNumber(Temp,Obj);
				Frame=GetAnimFrame(Animation,I);
				if((Frame->StartCnt==gFrame))
				{
					if(!HigherAnimationFrame(Animation,I,gFrame)) M=1;
				}
				Temp=Temp->Father;
			}
/*
			for(I=0;I<Obj->SkelNodes;I++)
			{
				Frame=GetAnimFrame(Animation,I,gFrame);
				if((Frame->StartCnt==gFrame))
				{
					if(!HigherAnimationFrame(Animation,I,gFrame)) M=1;
				}
			}
*/
			if(M==0) gFrame++;
			Key=' ';
		}
	}
	switch(Key)
	{
	case 'Q':
		{	
		  if(mouse_klick==3)
		  {
			  Amount=0.02;
			  SetSkelNodeRoll(Node[LastActive],Node[LastActive]->Roll+Amount,Obj);
		  } else 
		  {
			Amount=0.02;
			Node[LastActive]->Roll+=Amount;
			Temp=Node[LastActive];
			if(mouse_klick==2)
			while((Temp->Father!=NULL)&&(Temp->Father->Father!=NULL))
			{
				Amount*=0.5;
				Temp=Temp->Father;
				Temp->Roll+=Amount;
			}
		  }
		  InsertFrame=true;
		}
		break;
	case 'E':
		{	
		  if(mouse_klick==3)
		  {
			  Amount=-0.02;
			  SetSkelNodeRoll(Node[LastActive],Node[LastActive]->Roll+Amount,Obj);
		  } else 
		  {
			Amount=0.02;
			Node[LastActive]->Roll-=Amount;

			Temp=Node[LastActive];
			if(mouse_klick==2)
			while((Temp->Father!=NULL)&&(Temp->Father->Father!=NULL))
			{
				Amount*=0.5;
				Temp=Temp->Father;
				Temp->Roll-=Amount;
			}
		  }
		  InsertFrame=true;
		}
		break;
	case 'L':
		{
			if(!PlayReal)
			{
				PlayReal=true;
				Playing=true;
				PlayPos=0;
				Animation->FrameCounter=0;
				StartAnimationPlay(Obj,Animation);
//				StartPlayReal(Obj->Skel,Frame1->Skel,Frame2->Skel);
			} else {
				PlayReal=false;
				Playing=false;
			}
		}
		break;
	case VK_RIGHT:
		{
			gFrame++;
		}
		break;
	case VK_LEFT:
		{
			if(gFrame>0) gFrame--;
		}
		break;
	case VK_UP:
		{
			gFrame=GetNextAnimCnt(Animation,LastActive);
		}
		break;
	case VK_DOWN:
		{
			gFrame=GetPreAnimCnt(Animation,LastActive);
		}
		break;

	case VK_SPACE:
		{
//			Node[LastActive]->Speed=vAdd(Node[LastActive]->Speed,vSet(0,1,1));
			if(Node[LastActive]!=Obj->Skel)
			{
				Pos=GetPlayerVektor(vSet(0,0,2));
				Pos=CalcRelPosition(Pos,&Node[LastActive]->Father->Matrix);
				Node[LastActive]->Speed=vAdd(Node[LastActive]->Speed,Pos);
			}
		}

	case 'R':
		{ Knick(Node[LastActive],vSet(0.02,0,0));InsertFrame=true;}
		break;
	case 'F':
		{ Knick(Node[LastActive],vSet(-0.02,0,0));InsertFrame=true;}
		break;
	case 'T':
		{ Knick(Node[LastActive],vSet(0,0,0.02));InsertFrame=true;}
		break;
	case 'G':
		{ Knick(Node[LastActive],vSet(0,0,-0.02));InsertFrame=true;}
		break;
	case 'H':
		{ PSpeed-=0.01; }
		break;
	case 'Z':
		{ PSpeed+=0.01; }
		break;
	case 'W':
		{PPos=vAdd(vMulK(Forward,-PSpeed),PPos);}
		break;
	case 'S':
		{PPos=vAdd(vMulK(Forward,PSpeed),PPos);}
		break;
	case 'A':
		{PPos=vAdd(vMulK(Right,PSpeed),PPos);}
		break;
	case 'D':
		{PPos=vAdd(vMulK(Right,-PSpeed),PPos);}
		break;
/*
	case 'K':
		{
		  if(SelV!=-1)
		  {
  		    Temp=Node[LastActive];
			if(mouse_klick==0)
			{
				TempV=Obj->Vert;
				while(TempV!=NULL)
				{
					if(TempV->Rel==Temp) SwitchRelPos(TempV,Obj->Skel);
					TempV=TempV->Next;
				}
			}
			SwitchRelPos(GetVerticeByNumberInObj(SelV-100,Obj),Temp);
			
			do
			{
				Ende=true;
				TempL=Obj->Line;
				while(TempL!=NULL)
				{
					if((TempL->P1->Rel==Temp)&(TempL->P2->Rel!=Temp)) 
					{ 
						SwitchRelPos(TempL->P2,Temp);
						Ende=false;
					}
					if((TempL->P2->Rel==Temp)&(TempL->P1->Rel!=Temp)) 
					{ 
						SwitchRelPos(TempL->P1,Temp);
						Ende=false;
					}
					TempL=TempL->Next;
				}
			} while(!Ende);
		  }
		}
		break;
*/
	case VK_TAB:
		{ShowSplines=!ShowSplines;}
		break;
	case VK_F5:
		{ShowTexture=!ShowTexture;}
		break;
	case VK_F6:
		{BasePoint=SelV;}
		break;

	case VK_F7:
		{
			SaveWithoutFrame0=!SaveWithoutFrame0;
		}
		break;

	case VK_F8:
		{ViewMode=1-ViewMode;}
		break;

	case VK_F9:
		{ 
			InsertFrame=true;
			if(Flag(Node[LastActive]->Flags,_Fixed))
			{ Node[LastActive]->Flags=UnSetFlag(Node[LastActive]->Flags,_Fixed); }
			else
			{ Node[LastActive]->Flags=SetFlag(Node[LastActive]->Flags,_Fixed); }
		}
		break;

	case VK_F11:
		{ 
			InsertFrame=true;
			if(Flag(Node[LastActive]->Flags,_Attackable))
			{ Node[LastActive]->Flags=UnSetFlag(Node[LastActive]->Flags,_Attackable); }
			else
			{ Node[LastActive]->Flags=SetFlag(Node[LastActive]->Flags,_Attackable); }
		}
		break;
	case VK_F12:
		{ 
			InsertFrame=true;
			if(Flag(Node[LastActive]->Flags,_Klopping))
			{ Node[LastActive]->Flags=UnSetFlag(Node[LastActive]->Flags,_Klopping); }
			else
			{ Node[LastActive]->Flags=SetFlag(Node[LastActive]->Flags,_Klopping); }
		}
		break;

	case VK_ADD:
		{
			Node[LastActive]->SphereSize+=0.1;
		}
		break;
	case VK_SUBTRACT:
		{
			Node[LastActive]->SphereSize-=0.1;
		}
		break;
	case 'J':
		{
			Animation->LoopPoint=gFrame;
		}
		break;
	case 'U':
		{
			Animation->EndCount=gFrame;
		}
		break;
	case 'M':
		{ 
			ShowGhost++;
			if(ShowGhost==3) ShowGhost=0;
		}
		break;
/*
	case 'I':
		{ Frame1=CopyObject(Obj);}
		break;
	case 'O':
		{ Frame2=CopyObject(Obj);}
		break;
*/
	case 'P':
		{ 
			if(!Playing)
			{
				Playing=true;
				PlayPos=0;
			} else
			{   Playing=false; }
		}
		break;

	}
if(ViewMode!=0)
{

	if(InsertFrame&&(!PlayReal)) UpDateAnimList(Obj,Animation,gFrame);
//	if(InsertFrame) UpDateAnimSingleNode(Obj,Animation,gFrame,LastActive);
	if(((OldFrame!=gFrame)|(InsertFrame))&&(ShowGhost!=0))
	{
		ReCalcSkelNode(Ghost->Skel,&Kart_Matrix,&vNull,0);

		StartAnimationPlay(Ghost,Animation);

		for(I=0;I<gFrame;I++)
		{
			CalcObjUsingAnimationAndCountReal(Ghost,Animation,I);
			CalcSkelSpeeds(Obj->Skel);
			CalcSkelMovement(Ghost->Skel,true);
		}

		ReCalcSkelNode(Ghost->Skel,&Kart_Matrix,&vNull,0);

	}
/**/
}
	OldFrame=gFrame;
}



void InitEngine()
{
  long I,K,M;

  vNull=vSet(0,0,0);
  GlobalSector=NULL;

  BaseAni=NULL;
  SaveWithoutFrame0=false;
  InitATanList();

  LoadTGA(&textures[0],"Data/blueface.tga");
  LoadTGA(&textures[1],"Data/crosshair.tga");
  LoadTGA(&textures[2],"Data/target.tga");
  LoadTGA(&textures[3],"Data/kiste.tga");
  
  LoadTGA(&textures[9],"Data/Font.tga");				// Load The Crosshair Texture
  BuildFont();
//	MessageBox (HWND_DESKTOP, "test", "Ergebnis", MB_OK | MB_ICONEXCLAMATION);

  PPos=vSet(0,0,30);
  PRot=vSet(0,0,1);
  Lines=1;
  Points=2;
  Point=(tP3D *) malloc(12*2);
  Line=(tSimpleLine *) malloc(8);
  Point->X=0;
  Point->Y=0;
  Point->Z=0;
  (Point+1)->X=10;
  (Point+1)->Y=0;
  (Point+1)->Z=0;
  Line->P1=0;
  Line->P2=1;
/*
  LoadPureModel("mensch3.dat");
  BasePoint=724; //Mensch
/**/
/*
  LoadPureModel("frau.dat");
  BasePoint=330; //Mensch
/**/
/*
  LoadPureModel("dragon.dat");
  BasePoint=2084;
/**/

/**/
  CreateMaterials();

/*
  CommandList=LoadLevel(LevelName);
  Level=ReCalcCommandList(CommandList);

  ReCalcMatrices(Level,KartMatrix(),1);
  ReCalcMeshes(Level,KartMatrix(),vSet(0,0,0));
*/  
/*
  LoadPureModel("mann.dat");
  BasePoint=3534;
  Obj=ConvertToObjekt();
*/

//  Obj=ConvertSectorToObjekt(Level);	

  Obj=LoadObjFromBCL(LevelName);
  CalcSkelMesh(Obj->Skel);

  Animation=CreateAnimation(Obj);

  ViewMode=1-ViewMode;

  if(Ghost!=NULL) Ghost=DelObj(Ghost);
//  Ghost=CopyObject(Obj);

//  while(1==1) {I++;}

/**/

  ShowTexture=true;

/*
  LoadModelToObj("mann10.b3d");
  ShowTexture=true;
  LoadDaAnimation("walk4.ani");
  PlayReal=true;
  Playing=true;
  PlayPos=0;
  StartAnimationPlay(Obj,Animation);

  LastActive=10;
/**/
}

⌨️ 快捷键说明

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