📄 ctenpin.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 + -