📄 animation.cpp
字号:
/* Animation.CPP
*
* provides Animation-Declarations & -operations
*
* Copyright 2003 by PaP / JTMK
*/
#include "stdio.h"
#include <windows.h>
#include "SystemIO.h"
#include "objekt.h"
#include "Animation.h"
tAnimationList *AktList;
tAnimFrame *FindFrame(tAnimFrame *Frame_1,long FramePos)
{
while((Frame_1->Next!=NULL)&&(Frame_1->Next->StartCnt<=FramePos))
{
Frame_1=Frame_1->Next;
}
return(Frame_1);
}
void CalcObjUsingAnimationAndCountReal(tObjekt *Obj,tAnimation *Anim,long Cnt)
{
tSkelList *SkelList;
tAnimationList *AnimList;
SkelList=Obj->SkelList;
AnimList=Anim->NodeList;
while(SkelList!=NULL)
{
AnimList->AktFrame=FindFrame(AnimList->Frame0,Cnt);
// Letzter Animationsschritt , no calc
if(AnimList->AktFrame->Next==NULL)
{
if(Anim->LoopPoint!=-1) AnimList->AktFrame=AnimList->Frame0;
SkelList->Node->ZielOrgPos=AnimList->AktFrame->Node->OrgPos;
SkelList->Node->ZielRoll=AnimList->AktFrame->Node->Roll;
} else
{
SkelList->Node->ZielOrgPos=AnimList->AktFrame->Next->Node->OrgPos;
SkelList->Node->ZielRoll=AnimList->AktFrame->Next->Node->Roll;
}
// SkelList->Node->Flags=AnimList->AktFrame->Node->Flags;
SkelList=SkelList->Next;
AnimList=AnimList->Next;
}
}
void StartAnimationPlay(tObjekt *Obj,tAnimation *Anim)
{
tSkelList *SkelList;
tAnimationList *AnimList;
SkelList=Obj->SkelList;
AnimList=Anim->NodeList;
while(SkelList!=NULL)
{
// Letzter Animationsschritt , no calc
SkelList->Node->OrgPos=AnimList->Frame0->Node->OrgPos;
SkelList->Node->Roll=AnimList->Frame0->Node->Roll;
SkelList->Node->Flags=AnimList->Frame0->Node->Flags;
SkelList=SkelList->Next;
AnimList=AnimList->Next;
}
}
tAnimation *LoadAnimation(char *fname)
{
// fwrite(Anim,sizeof(tAnimation),1,F);
tAnimation *Anim;
tAnimationList *List,*OldList;
tAnimFrame *Frame,*OldFrame;
char Ch;
t_File_Handle *F;
F=Load_File(fname);
Anim=(tAnimation *) malloc(sizeof(tAnimation));
FileRead(F,Anim,sizeof(tAnimation));
Anim->FrameCounter=0;
List=NULL;
FileRead(F,&Ch,1);
while(Ch!=_EndOfFile)
{
if(Ch==_ListItem)
{
OldList=List;
List=(tAnimationList *)malloc(sizeof(tAnimationList));
List->Next=NULL;
List->Frame0=NULL;
Frame=NULL;
if(OldList==NULL)
{
Anim->NodeList=List;
} else
{
OldList->Next=List;
}
}
if(Ch==_Frame)
{
// MessageBox (HWND_DESKTOP, "Test Message", "B-Clopd3D Interrupted", MB_OK | MB_ICONEXCLAMATION);
OldFrame=Frame;
Frame=(tAnimFrame*) malloc(sizeof(tAnimFrame));
Frame->Pre=OldFrame;
Frame->Next=NULL;
FileRead(F,&Frame->StartCnt,4);
Frame->Node=(tSkeletonNode*)malloc(sizeof(tSkeletonNode));
// FileRead(F,Frame->Node,sizeof(tSkeletonNode));
FileRead(F,&Frame->Node->OrgPos,sizeof(tP3D));
FileRead(F,&Frame->Node->Flags,sizeof(char));
FileRead(F,&Frame->Node->Roll,sizeof(float));
if(OldFrame==NULL)
{
List->Frame0=Frame;
List->AktFrame=Frame;
} else
{
OldFrame->Next=Frame;
}
}
FileRead(F,&Ch,1);
}
Close_File(F);
// MessageBox (HWND_DESKTOP, "Test Message", "B-Clopd3D Interrupted", MB_OK | MB_ICONEXCLAMATION);
return(Anim);
}
void LoadBaseAnimation(tObjekt *Obj,char *fname)
{
tAnimation *Temp;
tSkeletonNode *Node1,*Node2;
tAnimationList *List;
tSkelList *ListN;
Temp=LoadAnimation(fname);
List=Temp->NodeList;
ListN=Obj->SkelList;
while(List!=NULL)
{
Node1=ListN->Node;
Node2=List->Frame0->Node;
Node1->OrgPos=Node2->OrgPos;
Node1->Roll=Node2->Roll;
ListN=ListN->Next;
List=List->Next;
}
ReCalcSkelNode(Obj->Skel,KartMatrix(),vNull);
SetMeshAsItIs(Obj->Skel);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -