⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctenpin.cpp

📁 一个3D的保龄球的源代码
💻 CPP
字号:
/*
* <p>Title: class CTenpin</p>
* <p>Description: Update tenpins’ positions and rotations when they have collision with ball.</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: Gameloft ShangHai</p>
* @author Tao Qing, Wei XIA
* @version 1.0
*/
#include "CTenpin.h"
#include "Game.h"
#include "CScene.h"

CTenpin::CTenpin(int id):CObject(OBJ_PIN), m_id(id) 
{
	init();
}

CTenpin::CTenpin():CObject(OBJ_PIN)
{
	m_id = 0;
	init();
}


void CTenpin::init()
{
	
	m_tenpinState = TENPIN_STATE_OUTSIDE;
	m_rollingArea = 0;
	m_tenpinJumpHeight = 0;
	m_tenpinRotation = 0;
	
	for (int i = 0; i < 3; ++i) {        
        m_tenpinAngle[i] = 0;
	}
	
	m_vPos.x = 0;
	m_vPos.y = 0;
	m_vPos.z = 15;
}

CTenpin::~CTenpin() {
}
void CTenpin::movingTenpin(Vector4s step ) {
	m_vPos.x += step.x;
	m_vPos.y += step.y;
	m_vPos.z += step.z;
}


void CTenpin::Restart()
{
	m_rollingArea = 0;
	m_tenpinJumpHeight = 0;
	m_tenpinRotation = 0;
	
	for (int i = 0; i < 3; ++i) {        
        m_tenpinAngle[i] = 0;
	}
	m_vRot.x = 0;
	m_vRot.y = 0;
	m_vRot.z = 0;
	//m_vPos.z = (8-1) * 4 * DEFAULT_EXTEND;
}

void CTenpin::SetRenderingProperty()
{
	m_vRot.x = 0;//m_tenpin[i].m_tenpinAngle[2];//m_tenpin[i].m_tenpinAngle[2];//0;//m_tenpin[i].m_tenpinAngle[0];// * sin(450) /VALUE_MULTIPLE_TEN;
	
	m_vRot.y =m_tenpinAngle[0]; //09-21 Milo 4096/360
	
	m_vRot.z = 2048-m_tenpinAngle[2];//m_tenpin[i].m_rollingArea;
}

void CTenpin::GrabbingTenpin(bool isSweep, bool isFirstStep, bool isSetting)
{	
	if(isSetting == TRUE)
	{
		if(m_tenpinState == TENPIN_STATE_STAND)
			{
				m_vPos.x += 0;
				m_vPos.y += 0;
				m_vPos.z -= 4  ;
			}
	}
	else
	{
		
		if (isSweep == TRUE)
		{
			m_vRot.x = 0;			
			m_vRot.y = 512;
			m_vRot.z = abs(m_vRot.z)>512&&abs(m_vRot.z)<1536 ? 1024 : 0;
			
			
			if(m_tenpinState != TENPIN_STATE_OUTSIDE)
			{	
				m_vPos.x += 0;	
				m_vPos.y += 3  ;
				if(m_vPos.y>2117)
					m_vPos.z -= 3;
				else
					m_vPos.z =TENPIN_RADIUS;
			}	
		}
		else
		{
			
			if(isFirstStep ==TRUE && m_tenpinState == TENPIN_STATE_STAND)
			{
				m_vPos.x += 0;
				m_vPos.y += 0;
				m_vPos.z += 4  ;
				
			}
			else if(m_tenpinState != TENPIN_STATE_OUTSIDE && m_tenpinState != TENPIN_STATE_STAND)
			{	
				m_vRot.x = 0;
				m_vRot.y = 512;
				
				m_vRot.z = abs(m_vRot.z)>512&&abs(m_vRot.z)<1536 ? 1024 : 0;
				
				m_vPos.x += 0;	
				m_vPos.y += 2  ;
				if(m_vPos.y>2117)
					m_vPos.z -= 3;
				else
					m_vPos.z =TENPIN_RADIUS;				
			}	
		}
	}
}

void CTenpin::Render(CRender3D *pR3d, bool isDrawModel)
{
	if (m_iModelID == MODEL_2D_TENPIN && !m_bHide)		
	{
		UpdateWorldMat();
		pR3d->GetG3d()->m_renderParam |= RP_COLORKEY;
		Vector4s temp ;
		temp.x = (m_vPos.x );
		temp.y = (m_vPos.y);
		temp.z = (m_vPos.z);
		temp = temp - pR3d->GetG3d()->GetEye();
		m_matWorld.RotateZ(Atan2i(temp.x, temp.y)-512);
		pR3d->RenderModel(MODEL_2D_TENPIN, &m_matWorld, m_iCurFrame);
	}
	else
		CObject::Render(pR3d);
	return;
}

void CTenpin::SetOnLane()
{
	m_vPos.z = 15;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -