📄 anmobj.cpp
字号:
// anmobj.cpp: implementation of the anmobj class.
// 学程序编游戏系列丛书
// 唐明理 E_mail: cqtmL@163.com
//====================================================================
#include "stdafx.h"
#include "anmobj.h"
#include "baiscobj.h"
//////////////////////////////////////////////////////////////////////
int dongzuo[7]={0,2,2,7,12,14,14};
extern baiscobj* m_baiscobj;
//////////////////////////////////////////////////////////////////////
anmobj::anmobj()
{
}
anmobj::~anmobj()
{}
bool anmobj::manmove(int i)
{ float stx=.5f,stz=.5f;
float qx=man[i].qd[0]-man[i].zd[0];
float qz=man[i].qd[1]-man[i].zd[1];
float qxa=abs(qx);
float qza=abs(qz);
if((int)qx==0&&(int)qz==0) return true;
if(qxa<stx) stx=qxa;
if(qza<stz) stz=qza;
if((int)qx!=0) man[i].qd[0]-=qxa/qx*stx;
if((int)qz!=0) man[i].qd[1]-=qza/qz*stz;
if((int)qx>0&&(int)qz<0) {re[i]=45*1;return false;}
if((int)qx>0&&(int)qz>0) {re[i]=45*3;return false;}
if((int)qx<0&&(int)qz>0) {re[i]=45*5;return false;}
if((int)qx<0&&(int)qz<0) {re[i]=45*7;return false;}
if ((int)qz<0) {re[i]=45*0;return false;}
if((int)qx>0) {re[i]=45*2;return false;}
if ((int)qz>0) {re[i]=45*4;return false;}
if((int)qx<0) {re[i]=45*6;return false;}
return false;
}
void anmobj::setman(int i,float y)
{ if(model[0]==NULL) return;
srand(timeGetTime());
man[i].qd[2]=y;
counter[i]++;
if(counter[i]>2)
{ counter[i]=0;
if(man[i].dz!=19) frame[i]++;
else {frame[i]=man[i].death;}
if(man[i].dz==1)
{if(manmove(i)==true)
{if(man[i].dz>15)
{if(man[i].dz==16) man[i].death=177;
if(man[i].dz==17) man[i].death=183;
if(man[i].dz==18) man[i].death=189;
man[i].dz=19;frame[i]-=1;
return;
}
man[i].dz=dongzuo[rand()%7];
frame[i]=anim[0][man[i].dz].start;
}
}
if(frame[i]>anim[0][man[i].dz].end)
{ if(man[i].dz>15)
{if(man[i].dz==16) man[i].death=177;
if(man[i].dz==17) man[i].death=183;
if(man[i].dz==18) man[i].death=189;
man[i].dz=19;frame[i]-=1;
return;
}
if(man[i].dz!=1)
{ man[i].dz=dongzuo[rand()%7];
if(rand()%10==0)
{man[i].dz=1;
man[i].zd[0]=RAND_COORD((MAP_W-1)*MAP_SCALE);
man[i].zd[1]=RAND_COORD((MAP_W-1)*MAP_SCALE);
}
}
frame[i]=anim[0][man[i].dz].start;
}
}
///////////////////////////////////////////////////////////////////
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix();
glTranslatef(man[i].qd[0],man[i].qd[2], -man[i].qd[1]);
glRotatef(re[i]+90,0,1,0);//
glScaled(.06f,.06f,.06f);//
glEnable(GL_TEXTURE_2D);//
if(model[0]!=NULL)
{ texture[0]->ChangeSettings(GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR,
GL_CLAMP,GL_CLAMP,0);
md2_drawModel (model[0],(int)frame[i],0,0);
}
if(model[1]!=NULL && man[i].dz<size[1]-1)
{ texture[1]->ChangeSettings(GL_LINEAR,GL_LINEAR_MIPMAP_LINEAR,
GL_CLAMP,GL_CLAMP,0);
md2_drawModel (model[1],(int)frame[i],0,0);
}
glDisable(GL_TEXTURE_2D);//
glPopMatrix();//
glPopAttrib();
}
void anmobj::getobj(CString na)//
{ anim[0]=anim[1]=NULL;
if(model[0]!=NULL) {delete[] model[0];model[0]=NULL;}
if(model[1]!=NULL) {delete[] model[1];model[1]=NULL;}
model[0] = md2_readModel(na+"tris.md2");
texture[0] = new Texture(na+"tris.PCX");
model[1] = md2_readModel(na+"weapon.md2");
texture[1] = new Texture(na+"weapon.pcx");
if(model[1]!=NULL) size[1] = md2_getAnimationCount(model[1]);
if(model[0]!=NULL)
{size[0] = md2_getAnimationCount(model[0]);
animations (model[0],0);//
for(int i=0;i<RNSHU;i++)
{counter[i]=0;
frame[i]=(float)(40+rand()%5);//
}
}
}
animation* anmobj::animations (md2_model_t* model,int p)
{ if (size[p] == 0) return 0;//
if(anim[p]!=NULL) delete[] anim[p];//
anim[p] = new animation[size[p]];//
for (int i=0; i<size[p]; i++)//
{ strcpy (anim[p][i].name,md2_getAnimationName(model,i));//
md2_getAnimationFrames(model,i,&anim[p][i].start,&anim[0][i].end);//
}
return 0;//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -