Beispiel #1
0
void CTourist::YawPitchPos(float yaw,float pitch)
{	
	m_vAngle += D3DXVECTOR3(pitch, yaw, 0);
	ModifyAngle(m_vAngle.x);
	ModifyAngle(m_vAngle.y);

	UpdateWorldMatrix();

}
Beispiel #2
0
void CTourist::PrepairTour()
{
	m_vAngleVel	= D3DXVECTOR3(0,0,0);
	if ((m_pTourInfo == NULL)||(m_nNowTour < 0)||(m_nNowTour >= m_nNumTour))
		return;
	switch(m_pTourInfo[m_nNowTour].nType)
	{
	case 0x01:		//直线运动
		{
			D3DXVECTOR3 vDistance = m_pTourInfo[m_nNowTour].vTarget - m_vPos;
			m_fTimeTest = m_pTourInfo[m_nNowTour].fTime;
			m_fSpeed = /*(*/D3DXVec3Length(&vDistance)/* - 10)*//m_fTimeTest;
		}

		break;
	case 0x02:		//原地转动
		{
			D3DXVECTOR3 vTemp = m_pTourInfo[m_nNowTour].vTarget;
			D3DXMATRIX inverseOrt;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         		
			D3DXMatrixInverse(&inverseOrt, NULL, &m_mOrientation);
			D3DXVec3TransformCoord(&vTemp, &vTemp, &inverseOrt);
			m_fTimeTest = m_pTourInfo[m_nNowTour].fTime;
			float ang = CaculateYaw(&vTemp);
			ModifyAngle(ang);
			m_vAngleVel.y = ang/m_fTimeTest;
			ang = CaculatePitch(&vTemp);
			ModifyAngle(ang);
			m_vAngleVel.x = ang/m_fTimeTest;
		}
		break;
	case 0x08:		//面向圆心做圆周运动
		{
			D3DXVECTOR3 vTemp = m_pTourInfo[m_nNowTour].vTarget;// - m_vPos;
			D3DXMATRIX inverseOrt;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         		
			D3DXMatrixInverse(&inverseOrt, NULL, &m_mOrientation);
			D3DXVec3TransformCoord(&vTemp, &vTemp, &inverseOrt);
			float ang = CaculateYaw(&vTemp);
			m_vAngle.y += ang;
			ModifyAngle(m_vAngle.y);
			UpdateWorldMatrix();
			m_fTimeTest = m_pTourInfo[m_nNowTour].fTime;
			m_vAngleVel.y = m_pTourInfo[m_nNowTour].fAngle/m_fTimeTest;
		}
		break;
	default:
		break;
	}
}
Beispiel #3
0
void CTourist::YawPitchAt(float yaw, float pitch, D3DXVECTOR3 *vCenter)
{
	m_vAngle += D3DXVECTOR3(-pitch, yaw, 0);
	ModifyAngle(m_vAngle.x);
	ModifyAngle(m_vAngle.y);

	D3DXVECTOR3 vRadius = *vCenter - m_vPos;
	D3DXMATRIX mRot, mRotX, mRotY;
	D3DXMatrixRotationX(&mRotX, pitch);
	D3DXMatrixRotationY(&mRotY, yaw);
	D3DXMatrixMultiply(&mRot, &mRotY, &mRotX);
	D3DXVECTOR3 vTemp;
	D3DXVec3TransformCoord(&vTemp, &vRadius, &mRot);
	m_vPos += vRadius - vTemp;

	UpdateWorldMatrix();

}	
Beispiel #4
0
int SpecialSyreen(pPlayer pl)
{
	s16 b;
	s16 angle;
	pPlayer opp=(pPlayer)pl->opp;
	int ret=0;
	s32 dist=distanceBetweenPoints(pl->object.xpos,pl->object.ypos,opp->object.xpos,
		opp->object.ypos);
	if (dist<208&&(!(opp->ship_flags & CREW_IMMUNE)))
		{

			s8 crew_loss;
			crew_loss = ((8		* (208 - dist)/ 209));
			if (crew_loss >= opp->crew)
				crew_loss = opp->crew - 1;

	for (int i=0;i<crew_loss&&opp->crew-ret>1;i++)
	{
		b=nextWeapon(pl,4,12);
	if (b>0)
	{
		pl->weapon[b].type=CREW;
		pl->weapon[b].object.life=1;
		pl->weapon[b].status=200;//GUESS
		pl->weapon[b].damage=0;
		pl->weapon[b].target=pl->opp;
		pl->weapon[b].parent=pl;
		pl->weapon[b].damageparent=1;
		pl->weapon[b].movefunc=&MoveCrew;
		pl->weapon[b].hitfunc=&HitCrew;
		pl->weapon[b].object.ignorecollision=0;

		pl->weapon[b].object.size=8;
		pl->weapon[b].object.angle = 0;

		pl->weapon[b].object.xspeed=0;
		pl->weapon[b].object.yspeed=0;

		pl->weapon[b].turn_wait=CREW_WAIT;

	angle=FindAngle(opp->object.xpos,opp->object.ypos,pl->object.xpos,pl->object.ypos);
	angle=ModifyAngle(angle,((i*2)-crew_loss)*20);

		pl->weapon[b].object.xpos = opp->object.xpos+((s32)(opp->offset*3 * SIN[angle])>>8);
		pl->weapon[b].object.ypos = opp->object.ypos-((s32)(opp->offset*3 * COS[angle])>>8);

		drawOnScreen(&pl->weapon[b].object.xscreen,&pl->weapon[b].object.yscreen,
			pl->weapon[b].object.xpos,pl->weapon[b].object.ypos,screenx,screeny,pl->weapon[b].object.size);

	 	sprites[pl->weapon[b].sprite].attribute0 = COLOR_256 | SQUARE | ROTATION_FLAG |SIZE_DOUBLE | MODE_TRANSPARENT | pl->weapon[b].object.yscreen;	//setup sprite info, 256 colour, shape and y-coord
		sprites[pl->weapon[b].sprite].attribute1 =SIZE_8 | ROTDATA(pl->weapon[b].sprite) | pl->weapon[b].object.xscreen;
		sprites[pl->weapon[b].sprite].attribute2 = pl->SpriteStart+66 | PRIORITY(1);
		ret++;

	}
	}	//loop
Beispiel #5
0
int FireUtwig(pPlayer pl)
{

	s16 b;
	int ret=0;

	
	for (int i=0;i<6;i++)
	{
	b= nextWeapon(pl);
	if (b>=0)
	{
	pl->weapon[b].type=SIMPLE;
	pl->weapon[b].object.life=MISSILE_LIFE;//range
	pl->weapon[b].damage=-1*MISSILE_DAMAGE;//6 suspect 6 was for both guns;
	pl->weapon[b].target=pl->opp;
	pl->weapon[b].parent=pl;
	pl->weapon[b].damageparent=0;
	pl->weapon[b].movefunc=0;
	pl->weapon[b].hitfunc=0;
	pl->weapon[b].object.ignorecollision=0;

	pl->weapon[b].object.size=8;
	pl->weapon[b].object.angle = pl->object.angle;

	s32 speed=20;
	pl->weapon[b].object.xspeed = ((MISSILE_SPEED * (s32)SIN[pl->object.angle])>>8);///SPEED_REDUCT;
	pl->weapon[b].object.yspeed = ((MISSILE_SPEED * (s32)COS[pl->object.angle])>>8);///SPEED_REDUCT;

	//pl->weapon[b].object.xpos = pl->object.xpos+((52 * (s32)SIN[pl->object.angle+(i==0?-30:+30)])>>8)/3;
	//pl->weapon[b].object.ypos = pl->object.ypos-((52 * (s32)COS[pl->object.angle+(i==0?-30:+30)])>>8)/3;

	s16 angle;

	if (i==0)
		angle=ModifyAngle(pl->object.angle,-55);
	else if (i==1)
		angle=ModifyAngle(pl->object.angle,-35);
	else if (i==2)
		angle=ModifyAngle(pl->object.angle,-10);
	else if (i==3)
		angle=ModifyAngle(pl->object.angle,15);
	else if (i==4)
		angle=ModifyAngle(pl->object.angle,45);
	else if (i==5)
		angle=ModifyAngle(pl->object.angle,65);



	pl->weapon[b].object.xpos = pl->object.xpos+((52 * (s32)SIN[angle])>>8)/3;
	pl->weapon[b].object.ypos = pl->object.ypos-((52 * (s32)COS[angle])>>8)/3;

	#ifdef MISSILE_START
	pl->weapon[b].object.xpos-=pl->weapon[b].object.xspeed;
	pl->weapon[b].object.ypos+=pl->weapon[b].object.yspeed;
	#endif

	drawOnScreen(&pl->weapon[b].object.xscreen,&pl->weapon[b].object.yscreen,
		pl->weapon[b].object.xpos,pl->weapon[b].object.ypos,screenx,screeny,pl->weapon[b].object.size);

	sprites[pl->weapon[b].sprite].attribute0 = COLOR_256 | SQUARE | ROTATION_FLAG |SIZE_DOUBLE | MODE_TRANSPARENT | pl->weapon[b].object.yscreen;	//setup sprite info, 256 colour, shape and y-coord
    sprites[pl->weapon[b].sprite].attribute1 =SIZE_8| ROTDATA(pl->weapon[b].sprite) | pl->weapon[b].object.xscreen;
    sprites[pl->weapon[b].sprite].attribute2 = pl->SpriteStart+64 | PRIORITY(1);

    ret++;
	}
	}