www.pudn.com > MyGame.rar > Ship3D.cpp


// Ship3D.cpp: implementation of the CShip3D class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "MyGame.h" 
#include "Ship3D.h" 
 
#include "GameObjTimed.h" 
#include "Bullet.h" 
#include "Ship.h" 
//#include "BulletFireBall.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CShip3D::~CShip3D() 
{ 
 
} 
 
CShip3D::CShip3D(char * filename, char * texturename) 
{ 
	M.Open(filename); 
	M.Normalize(); 
	if(texturename) 
	{ 
		M.SetTexture(texturename); 
		M.SetMapMode(CMesh::PLANAR); 
	} 
    M.Smooth(); 
	B.r=3; 
} 
 
int CShip3D::Draw() 
{ 
	int nt=0; 
	static float flamelen=5; 
	glPushMatrix(); 
	glTranslate(p); 
	glRotatef(angle,0,0,1); 
	if(av>0) glRotatef(-30,1,0,0); 
	if(av<0) glRotatef( 30,1,0,0); 
	glPushMatrix(); 
	glScalef(8,8,8); 
	glRotatef(180,1,0,0); 
	glColor3f((GLfloat).7,(GLfloat)1.,(GLfloat).7); 
    glDisable(GL_CULL_FACE); 
	nt+=M.Draw(); 
	glEnable(GL_CULL_FACE); 
	glPopMatrix(); 
	glTranslatef(-2,0,0); 
	glDisable(GL_LIGHTING); 
	if(lthrust) 
	{ 
		glBegin(GL_TRIANGLE_FAN); 
		glColor3f((GLfloat).95,(GLfloat).9,(GLfloat).6); 
		glVertex3f(-1, -6,  0); 
		glVertex3f(0,  -10,  0); 
		glVertex3f(1, -6,  0); 
		glVertex3f(0,  -4,  0); 
		glEnd(); 
		nt+=2; 
	} 
	if(rthrust) 
	{ 
		glBegin(GL_TRIANGLE_FAN); 
		glColor3f((GLfloat).95,(GLfloat).9,(GLfloat).6); 
		glVertex3f(1, 6,  0); 
		glVertex3f(0,  10,  0); 
		glVertex3f(-1,  6,  0); 
		glVertex3f(0,  5,  0); 
		glEnd(); 
		nt+=2; 
	} 
	if(thrust) 
	{ 
		if(flamelen==12) flamelen=10; 
		else flamelen=12; 
		glBegin(GL_TRIANGLE_FAN); 
		glColor3f((GLfloat).95,(GLfloat).9,(GLfloat).6); 
		glVertex3f(-5,0,0); 
		glColor3f((GLfloat).95,(GLfloat).5,(GLfloat).1); 
		glVertex3f(-2, 0,  0); 
		glVertex3f((GLfloat)-3, (GLfloat)1.7,(GLfloat)0); 
		glVertex3f(-4, 2,  0); 
		glVertex3f(-7, 1, 0); 
		glColor3f((GLfloat).6,(GLfloat).3,(GLfloat).1); 
		glVertex3f(-flamelen,0,0); 
		glColor3f((GLfloat).95,(GLfloat).5,(GLfloat).1); 
		glVertex3f(-7,-1,  0); 
		glVertex3f(-4,-2,  0); 
		glVertex3f(-3,(GLfloat)-1.7,0); 
		glVertex3f(-2, 0,  0); 
		glEnd(); 
		nt+=8; 
	} 
	glEnable(GL_LIGHTING); 
	glPopMatrix(); 
	return nt; 
} 
 
void CShip3D::Shoot(list &LB) 
{ 
	if(ActiveBullet+2 < MaxBullet()) 
	{ 
		ActiveBullet+=3; 
		CBullet *bb; 
		angle-=10; 
		bb =new CBullet(p - RotateZ(Point3f(0,+2,0),float((angle+10)*M_PI/180.0f)),angle,v+VDir()*30); 
		LB.push_back(bb); 
		angle+=20; 
		bb =new CBullet(p - RotateZ(Point3f(0,-2,0),float((angle-10)*M_PI/180.0f)),angle,v+VDir()*30); 
		LB.push_back(bb); 
		angle-=10; 
		bb =new CBullet(p,angle,v+VDir()*30); 
		LB.push_back(bb); 
	} 
}