📄 particlesys.cpp
字号:
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 + -