コード例 #1
0
fVector3 CEngineInterface::GetSacle(VOID) const
{
	register Fairy::TerrainData* pTerrainData = m_pFairySystem->getTerrainData();
	if(pTerrainData && pTerrainData->getXSize()>0 && pTerrainData->getZSize()>0)
		return fVector3(pTerrainData->mScale.x, pTerrainData->mScale.y, pTerrainData->mScale.z);
	else
		return fVector3(100.0f, 100.0f, 100.0f);
}
コード例 #2
0
ファイル: RenderSystem.cpp プロジェクト: brock7/TianLong
fVector3 CRenderSystem::GetSacle(VOID) const
{
	register WX::TerrainData* pTerrainData = m_pRenderSystem->getTerrainData();
	if(pTerrainData && pTerrainData->getXSize()>0 && pTerrainData->getZSize()>0)
		return fVector3(pTerrainData->mScale.x, pTerrainData->mScale.y, pTerrainData->mScale.z);
	else
		return fVector3(100.0f, 100.0f, 100.0f);
}
コード例 #3
0
VOID CEngineInterface::Camera_GetWindowToViewportRay(INT nX, INT nY, fRay& fRay)
{
	Ogre::Ray ray = m_pFairySystem->getWindowToViewportRay(nX, nY);

	fVector3 fGFX = fVector3(ray.getOrigin().x, ray.getOrigin().y, ray.getOrigin().z);
	Axis_Trans(AX_GFX, fGFX, AX_GAME, fRay.mOrigin);

	fRay.mDirection = fVector3(ray.getDirection().x, ray.getDirection().y, ray.getDirection().z);
}
コード例 #4
0
ファイル: Camera_CharSel.cpp プロジェクト: gitrider/wxsj2
CCamera_CharSel::CCamera_CharSel(Ogre::Camera* pOgreCamera) : CCamera(pOgreCamera)
{
	m_fvLookatPos = fVector3(0.0f, 80.0f, 0.0f);
	m_fvGameLookatPos = fVector3(0.0f, 80.0f, 0.0f);
	m_fPitch = 0.0f;
	m_fDistance = 250.0f;
	m_fDirection = KLU_PI;

	Update();
}
コード例 #5
0
ファイル: LE_Draw.cpp プロジェクト: rasidin/LimitEngine
void Draw::DrawLine(const fPoint &start, const fPoint &end, const cColorRGBA &color)
{
    VertexDraw2D *buffer = LE_DrawManager.GetVertexBuffer2D(2);
    fSize screenSize(LE_DrawManager.GetVirtualScreenSize());
    buffer[0].SetPosition(fVector3(start)/screenSize);
    buffer[0].SetColor(color);
    buffer[1].SetPosition(fVector3(end)/screenSize);
    buffer[1].SetColor(color);
    LE_DrawManager.Draw2DFlush(GraphicsFlag::PT_LINELIST);
}
コード例 #6
0
fVector3 GOFactory::GetCenter(Tile* p_tile, float p_depth)
{
	if (p_tile)
	{
		float w = p_tile->getWidth();
		float h = p_tile->getHeight();
		TilePosition tp = p_tile->getTilePosition();

		return fVector3(tp.x * w + w * 0.5f, tp.y * h + h * 0.5f, p_depth);
	}
	return fVector3(0, 0, 0);
}
コード例 #7
0
ファイル: Obj_Bus.cpp プロジェクト: gitrider/wxsj2
VOID CObject_Bus::Initial(VOID* pParam)
{
	CObject_Dynamic::Initial(pParam);

	RemoveAllPassengers();

	m_fvMoveTargetPos	= fVector3(-1.f, -1.f, -1.f);
	m_bMoving			= FALSE;

	m_pBusData			= NULL;
	m_nCurrentAnimationIndex = -1;

	SObject_BusInit *pBusInit = (SObject_BusInit*)pParam;
	if(pBusInit != NULL)
	{
		m_nDataID			= pBusInit->m_nDataID;
		INT i;
		for(i = 0; i < pBusInit->m_nPassengerCount; i++)
		{
			AddPassenger(i, pBusInit->m_anPassengerIDs[i]);
		}
	}
	else
	{
		m_nDataID			= INVALID_ID;
	}
	UpdateData();

	UpdateAnimation();
}
コード例 #8
0
CObject_Dynamic::CObject_Dynamic()
{
	m_bServerPath	= FALSE;
	m_dwPathID		= UINT_MAX;

	m_posPathNodePrev		= fVector3( 0.f, 0.f, 0.f );
}
コード例 #9
0
ファイル: GIUtil.cpp プロジェクト: gitrider/wxsj2
fVector3 KLU_RotateAngle(const fVector3& pos, const fVector3& axis, FLOAT angle)
{
	const fVector3			vector		= pos;	
	fVector3				unitAxis	= axis;
	unitAxis.normalise();
	const float				halfAngle	= angle/float(2);
	const float				s			= sin(halfAngle);
	const float				c			= cos(halfAngle);
	const float				x			= unitAxis.x * s;
	const float				y			= unitAxis.y * s;
	const float				z			= unitAxis.z * s;
	const float				w			= c;
	const float				xx			= x*x;
	const float				xy 			= y*x;
	const float				xz			= z*x;
	const float				yy			= y*y;
	const float				yz			= z*y;
	const float				zz			= z*z;
	const float				wx			= w*x;
	const float				wy			= w*y;
	const float				wz			= w*z;
	const float				M[3][3]		=
	{
		{float(1)-float(2)*(yy+zz),		float(2)*(xy-wz),				float(2)*(xz+wy)},
		{float(2)*(xy+wz),				float(1)-float(2)*(xx+zz),      float(2)*(yz-wx)},
		{float(2)*(xz-wy),				float(2)*(yz+wx),				float(1)-float(2)*(xx+yy)},
	};

	return fVector3( 
		vector.x*M[0][0] + vector.y*M[0][1] + vector.z*M[0][2],
		vector.x*M[1][0] + vector.y*M[1][1] + vector.z*M[1][2],
		vector.x*M[2][0] + vector.y*M[2][1] + vector.z*M[2][2] );
}
コード例 #10
0
// 把一个物体放到指定得摄影机位置
void CFakeObjectEntityManager::CreateObject(LPCTSTR szObjName, CObjEntityActor* pNode, CObjEntityActor* pAttachNode, LPCTSTR szCameraName, int nTexWidth, int nTexHeight, LPCTSTR szBackgroundName)
{
	// 先根据该fake object的名称来获取摆放位置
	m_fvPosition = Ogre::Vector3(_GetFakeObjPos(szObjName), 10000.f, 0.f);

	//物体不存在,创建新的渲染环境
	FakeObjectMap::iterator it = _GetFakeNode(szObjName, pNode, szCameraName, nTexWidth, nTexHeight, szBackgroundName);

	if(it == m_mapObject.end()) return;

	it->second.pEntityNode = pNode;
	it->second.pAttachEntityNode = pAttachNode;
	//将需要渲染的实体放入渲染环境中

	// 如果骑在马上的,要设置马的位置,把人的位置复位
	Fairy::LogicModel* modelImpl = pNode->GetActorImpl();

	if (modelImpl->isAttached())
	{
		Fairy::LogicModel* parentModel = modelImpl->getAttachModel();

		KLAssert (parentModel);

		modelImpl->setPosition(Ogre::Vector3(0.0f, 0.0f, 0.0f));

		parentModel->setPosition(Ogre::Vector3(m_fvPosition.x, m_fvPosition.y, m_fvPosition.z));
		parentModel->setVisible(true);
	}
	else
		pNode->SetGfxPosition(fVector3(m_fvPosition.x, m_fvPosition.y, m_fvPosition.z));

	//初始就显示,在运行过程中会一直保持visible为true的状态
	pNode->SetVisible(TRUE);
}
コード例 #11
0
MenuItem* GOFactory::createMenuItem( fVector3 p_position, fVector2 p_size,
	string p_text, fVector2 p_textOffset, fVector2 p_fontSize, string p_bgTexPath)
{
	float scrW = GAME_FAIL;
	float scrH = GAME_FAIL;
	if(m_io != NULL)
	{
		scrW = (float)m_io->getScreenWidth();
		scrH = (float)m_io->getScreenHeight();
	}

	fVector2 finalPos, finalTextOffset;
	finalPos.x = scrW * (p_position.x);	
	finalPos.y = scrH * (p_position.y);
	finalTextOffset.x = scrW * (p_textOffset.x);
	finalTextOffset.y = scrH * (p_textOffset.y);

	SpriteInfo* spriteInfo = NULL;
	if( p_bgTexPath != "" )
		spriteInfo = CreateSpriteInfo( p_bgTexPath,
		fVector3(finalPos.x, finalPos.y, p_position.z),
		fVector2(p_size.x*scrW, p_size.y*scrH), NULL );


	GlyphMap* font = NULL;
	TextArea* text = NULL;
	if( p_text != "" )
	{
		text = createMenuItemTextArea(p_position, p_text, p_textOffset, p_fontSize );
		text->setText( p_text );
	}

	return new MenuItem( spriteInfo, text, finalPos, finalTextOffset );
}
コード例 #12
0
MenuSubState* MenuSubStateFactory::createMain()
{
	MenuSubState* tmp			= createMenuSubState();
	vector<string> texts		= createMainTexts();
	MenuItemProperties props	= createMainProperties();
	vector<MenuItem*> items		= createItems( props, texts );
	
	float fw = 1.0f/1920.0f;
	float fh = 1.0f/1080.0f;

	// Add logo!
	items.push_back( m_gof->createMenuItem( 
		fVector3( 0.5f, 0.66f, 0.7f ), fVector2( 960.0f*fw, 525.0f*fh ),
		"", fVector2(0.0f, 0.0f),
		fVector2(fw*20, fh*20), "../Textures/logo.png" ));

	tmp->addItems( items );
	tmp->setBehaviour( new MainSubState() );
	tmp->setAllSelectable();
	tmp->setSelectable( MainSubState::MM_NUM_ITEMS, false );

	tmp->setMenuBackSnd( m_gof->CreateSoundInfo( m_menuBackSoundPath, 80 ) );
	tmp->setMenuNavigatonSnd( m_gof->CreateSoundInfo( m_navigationSoundPath, 80 ) );
	tmp->setItemSelectSnd( m_gof->CreateSoundInfo( m_itemSelectSoundPath, 80 ) );
	
	return tmp;
}
コード例 #13
0
ファイル: GMSoundSystem.cpp プロジェクト: jjiezheng/pap_full
CSoundSystemFMod::CSoundSystemFMod()
{
	s_pMe = this;

	m_bMuteAll = FALSE;
	m_fMasterGain = 1.0f;
	m_vListenerPos = fVector3(0.0f, 0.0f, 0.0f);
}
コード例 #14
0
Glyph* GOFactory::CreateGlyph( const string& p_texture, float p_x,
	float p_y, fVector2 p_size, vector<GlyphAnimation*> p_animations )
{
	fVector3 pos = fVector3(p_x, p_y, 0.99f);
	SpriteInfo* spriteInfo = CreateSpriteInfo(p_texture,pos, p_size, NULL);
	// spriteInfo->visible = false;
	return new Glyph( spriteInfo );
}
コード例 #15
0
ファイル: Obj_Bus.cpp プロジェクト: gitrider/wxsj2
// 压入一条指令
BOOL CObject_Bus::PushCommand(const SCommand_Object *pCmd)
{
	switch(pCmd->m_wID)
	{
	case OC_BUS_MOVE:
		{
			FLOAT x = pCmd->m_afParam[0];
			FLOAT y = pCmd->m_afParam[1];
			FLOAT z = pCmd->m_afParam[2];

			fVector3 fvGame(x, y, z);
			StartMove(&fvGame);
		}
		break;
	case OC_BUS_STOP_MOVE:
		{
			FLOAT x = pCmd->m_afParam[0];
			FLOAT y = pCmd->m_afParam[1];
			FLOAT z = pCmd->m_afParam[2];

			fVector3 fvGame;
			CGameProcedure::s_pGfxSystem->Axis_Trans(
				tGfxSystem::AX_PLAN, fVector3(x, 0.0f, z),
				tGfxSystem::AX_GAME, fvGame);

			SetPosition(fvGame);
			StopMove();
		}
		break;
	case OC_BUS_ADD_PASSENGER:
		{
			INT nIndex			= pCmd->m_anParam[0];
			INT nPassengerID	= pCmd->m_anParam[1];

			AddPassenger(nIndex, nPassengerID);
		}
		break;
	case OC_BUS_REMOVE_PASSENGER:
		{
			INT nPassengerID	= pCmd->m_anParam[0];

			RemovePassenger(nPassengerID);
		}
		break;
	case OC_BUS_REMOVE_ALL_PASSENGER:
		{
			RemoveAllPassengers();
		}
		break;
	default:
		break;
	}
	return TRUE;
}
コード例 #16
0
ファイル: Obj_Bus.cpp プロジェクト: gitrider/wxsj2
VOID CObject_Bus::Release(VOID)
{
	RemoveAllPassengers();
	ReleaseRenderInterface();
	m_nDataID			= INVALID_ID;
	m_pBusData			= NULL;
	m_fvMoveTargetPos	= fVector3(-1.f, -1.f, -1.f);
	m_bMoving			= FALSE;
	m_nCurrentAnimationIndex = -1;
	CObject_Dynamic::Release();
}
コード例 #17
0
// 创建界面模型
int CGamePro_CharCreate::CreateModel()
{
	if( m_pAvatar[0] )
	{
		return TRUE;
	}

	fVector3 CharacterPos[ 2 ];
	fVector3 SrcPos[ 2 ];
	SrcPos[ 0 ] = fVector3(1000, 320, 1000);
	SrcPos[ 1 ] = fVector3( 1000, 320, 1000);

	s_pGfxSystem->Axis_Trans( s_pGfxSystem->AX_GFX, SrcPos[ 0 ],s_pGfxSystem->AX_GAME, CharacterPos[ 0 ] );
	s_pGfxSystem->Axis_Trans( s_pGfxSystem->AX_GFX, SrcPos[ 1 ],s_pGfxSystem->AX_GAME, CharacterPos[ 1 ] );

	// 创建Avatar
	m_pAvatar[0] = (CObject_PlayerOther*)( CFakeObjSystem::GetMe()->NewFakeObject(_T("CObject_PlayerOther"), _T("CreateRole_Woman"), "Camera_Main") );
	m_pAvatar[1] = (CObject_PlayerOther*)( CFakeObjSystem::GetMe()->NewFakeObject(_T("CObject_PlayerOther"), _T("CreateRole_Man"),   "Camera_Main") );

	// 女模型
	m_pAvatar[0]->SetFaceDir(0);
	m_pAvatar[0]->GetCharacterData()->Set_MenPai( CLIENT_GAOMO_MENPAI );
	m_pAvatar[0]->GetCharacterData()->Set_RaceID( 2 );
	//m_pAvatar[ 0 ]->SetPosition( CharacterPos[ 0 ] );
	//m_pAvatar[ 0 ]->SetScale(100);
	// 设置缺省头发颜色
//	m_pAvatar[0]->GetCharacterData()->Set_HairColor(0);|
	
	// 男模型 
	m_pAvatar[1]->SetFaceDir(0);
	m_pAvatar[1]->GetCharacterData()->Set_MenPai( CLIENT_GAOMO_MENPAI );
	m_pAvatar[1]->GetCharacterData()->Set_RaceID( 3 );
	//m_pAvatar[ 1 ]->SetPosition( CharacterPos[ 1 ] );
	//m_pAvatar[ 1 ]->SetScale(100);
	// 设置缺省头发颜色
//	m_pAvatar[1]->GetCharacterData()->Set_HairColor(0);

	return TRUE;
}
コード例 #18
0
ファイル: GMSoundSource.cpp プロジェクト: rvpoochen/wxsj2
CSoundSourceFMod::CSoundSourceFMod(BOOL b3DMode) 
{
	_Sample = NULL;
	_State = source_stoped;

	_Loop = TRUE;
	_b3DMode = b3DMode;
	_Gain = 1.0f;
	_Alpha = 0.0;
	_Pos= fVector3(0.0f, 0.0f, 0.0f);

	_FModChannel= -1;
}
コード例 #19
0
Tile* GOFactory::CreateTile(bool p_type, TilePosition p_position, float p_width,
	float p_height)
{
	fVector3 pos = fVector3(p_position.x * p_width + p_width * 0.5f,
		p_position.y * p_height + p_height * 0.5f, 0.0f);
	fVector2 size = fVector2(p_width, p_height);
	SpriteInfo* spriteInfo = CreateSpriteInfo("../Textures/wall.png",
		pos, size, NULL);

	if (spriteInfo)
		spriteInfo->visible = !p_type;

	return new Tile(p_type, p_position, p_width, p_height, spriteInfo);
}
コード例 #20
0
CSoundSourceFMod::CSoundSourceFMod(INT id, Type type, BOOL b3DMode) 
{
	_ID = id;
	_Sample = 0;
	_State = source_stoped;

	_Loop = TRUE;
	_b3DMode = b3DMode;
	_Alpha = 0.0;
	_Pos= fVector3(0.0f, 0.0f, 0.0f);

	_FModChannel= -1;
	_nType = type;
}
コード例 #21
0
VOID CGamePro_CharCreate::Init(VOID)
{
	//s_pGfxSystem->Scene_Load( -1, "yangliucun.scene" );
	s_pGfxSystem->Camera_SetEyePos   (fVector3(1000, 325, 1000));
	s_pGfxSystem->Camera_SetLookAtPos(fVector3(1000, 320, 0));
	
	if(0 == m_iIsLoadFace)
	{
		int res = m_FaceMng.GetCharacterFaceIfo();
		if(0 == res)
		{
			m_iIsLoadFace = 1;
		}
	}

	if(0 == m_iIsLoadFaceModel)
	{
		int res = m_FaceModelmng.GetCharacterModel();
		if(0 == res)
		{
			m_iIsLoadFaceModel = 1;
		}
	}

	if(0 == m_iIsLoadHairModel)
	{
		int res = m_HairModelMng.GetCharacterModel();
		if(0 == res)
		{
			m_iIsLoadHairModel = 1;
		}
	}

	// 创建模型信息.
	CreateModel();
}
コード例 #22
0
ファイル: Camera_Scene.cpp プロジェクト: gitrider/wxsj2
fVector3 CCamera_Scene::_GetEyePos(
    const fVector3& fvLookAt,
    FLOAT fDistance,
    FLOAT fDirection,
    FLOAT fPitch)
{
    FLOAT y		= fDistance * ::sin(-fPitch);
    FLOAT r_xy	= fDistance * ::cos(-fPitch);
    FLOAT x		= -r_xy * ::sin(fDirection);
    FLOAT z		= -r_xy * ::cos(fDirection);

    return fVector3 (	fvLookAt.x + x,
                        fvLookAt.y + y,
                        fvLookAt.z + z);
}
コード例 #23
0
ファイル: Camera_Scene.cpp プロジェクト: gitrider/wxsj2
VOID CCamera_Scene::SetLookAt(const fVector3& fvPos)
{
    m_fvGameLookatPos = fvPos;

    fVector3 fvTemp;
    if(!CEngineInterface::GetMe()->Axis_Trans(CEngineInterface::AX_GAME, fVector3(fvPos.x, fvPos.y, fvPos.z), CEngineInterface::AX_GFX, fvTemp))
        return;

    // 位置相同 而且 眼睛也不用回归则直接返回
//	if( (fvTemp == m_fvLookatPos) && (STATIC_PITCH - m_fPitch < MIN_ANGLE) && (m_status == NORMAL_STATUS) )
    if( (fvTemp == m_fvLookatPos) && (m_fPitchApproch - m_fPitch < MIN_ANGLE) && (m_status == NORMAL_STATUS) )
        return;

    m_fvLookatPos = fvTemp;
    Update();
}
コード例 #24
0
ファイル: Obj_Bus.cpp プロジェクト: gitrider/wxsj2
CObject_Bus::CObject_Bus()
{
	m_nDataID			= INVALID_ID;
	m_nPassengerCount	= 0;
	INT i;
	for(i = 0; i < DEF_BUS_MAX_PASSENGER_COUNT; i++)
	{
		m_anPassengerIDs[i] = INVALID_ID;
		m_abPassengerAttacheds[i] = FALSE;
	}

	m_nCurrentAnimationIndex = -1;

	m_pBusData			= NULL;

	m_fvMoveTargetPos	= fVector3(-1.f, -1.f, -1.f);
	m_bMoving			= FALSE;
}
コード例 #25
0
ファイル: LE_Draw.cpp プロジェクト: rasidin/LimitEngine
void Draw::DrawBox(const fRect &rect, float rotation, const cColorRGBA &color, Texture *texture, Shader *shader)
{
	VertexDraw2D *buffer = LE_DrawManager.GetVertexBuffer2D(6);
    fSize screenSize(LE_DrawManager.GetVirtualScreenSize());
    fRect rectInProj = rect / screenSize;
    fPoint rightTop(rect.width, 0.0f);
	fPoint rightBottom(rect.width, rect.height);
    fPoint leftBottom(0.0f, rect.height);
    fMatrix4x4 rotmat = fMatrix4x4::RotationZ(rotation);
    rightBottom = rotmat * rightBottom / screenSize;
    rightBottom += rectInProj.xy();
    rightTop = rotmat * rightTop / screenSize;
    rightTop += rectInProj.xy();
    leftBottom = rotmat * leftBottom / screenSize;
    leftBottom += rectInProj.xy();
    buffer[0].SetPosition(fVector3(rectInProj.xy(), 0.0f));
	buffer[0].SetColor(color);
	buffer[0].SetTexcoord(fVector2(0.0f, 0.0f));
	buffer[1].SetPosition(fVector3(leftBottom, 0.0f));
	buffer[1].SetColor(color);
	buffer[1].SetTexcoord(fVector2(0.0f, 1.0f));
	buffer[2].SetPosition(fVector3(rightTop, 0.0f));
	buffer[2].SetColor(color);
	buffer[2].SetTexcoord(fVector2(1.0f, 0.0f));
	buffer[3].SetPosition(fVector3(leftBottom, 0.0f));
	buffer[3].SetColor(color);
	buffer[3].SetTexcoord(fVector2(0.0f, 1.0f));
	buffer[4].SetPosition(fVector3(rightBottom, 0.0f));
	buffer[4].SetColor(color);
	buffer[4].SetTexcoord(fVector2(1.0f, 1.0f));
	buffer[5].SetPosition(fVector3(rightTop, 0.0f));
	buffer[5].SetColor(color);
	buffer[5].SetTexcoord(fVector2(1.0f, 0.0f));
    if(shader == NULL) {
        if(texture) {
            DrawCommand::BindTexture(0, texture);
        } else {
            DrawCommand::BindTexture(0, RenderContext::GetSingleton().GetDefaultTexture(RenderContext::DefaultTextureTypeWhite));
        }
    }
    LE_DrawManager.Draw2DFlush(GraphicsFlag::PT_TRIANGLELIST, shader);
}
コード例 #26
0
ファイル: LE_Draw.cpp プロジェクト: rasidin/LimitEngine
void
Draw::DrawBox(const fRect &rect, float rotation, const cColorRGBA &leftTopColor, const cColorRGBA &rightTopColor, const cColorRGBA &leftBottomColor, const cColorRGBA &rightBottomColor)
{
	VertexDraw2D *buffer = LE_DrawManager.GetVertexBuffer2D(6);
    fSize screenSize(LE_DrawManager.GetVirtualScreenSize());
    fRect rectInProj = rect / screenSize;
    fPoint rightTop(rect.width, 0.0f);
	fPoint rightBottom(rect.width, rect.height);
    fPoint leftBottom(0.0f, rect.height);
    fMatrix4x4 rotmat = fMatrix4x4::RotationZ(rotation);
    rightBottom = rotmat * rightBottom / screenSize;
    rightBottom += rectInProj.xy();
    rightTop = rotmat * rightTop / screenSize;
    rightTop += rectInProj.xy();
    leftBottom = rotmat * leftBottom / screenSize;
    leftBottom += rectInProj.xy();
    buffer[0].SetPosition(fVector3(rectInProj.xy(), 0.0f));
	buffer[0].SetColor(leftTopColor);
	buffer[0].SetTexcoord(fVector2(0.0f, 0.0f));
	buffer[1].SetPosition(fVector3(leftBottom, 0.0f));
	buffer[1].SetColor(leftBottomColor);
	buffer[1].SetTexcoord(fVector2(0.0f, 1.0f));
	buffer[2].SetPosition(fVector3(rightTop, 0.0f));
	buffer[2].SetColor(rightTopColor);
	buffer[2].SetTexcoord(fVector2(1.0f, 0.0f));
	buffer[3].SetPosition(fVector3(leftBottom, 0.0f));
	buffer[3].SetColor(leftBottomColor);
	buffer[3].SetTexcoord(fVector2(0.0f, 1.0f));
	buffer[4].SetPosition(fVector3(rightBottom, 0.0f));
	buffer[4].SetColor(rightBottomColor);
	buffer[4].SetTexcoord(fVector2(1.0f, 1.0f));
	buffer[5].SetPosition(fVector3(rightTop, 0.0f));
	buffer[5].SetColor(rightTopColor);
	buffer[5].SetTexcoord(fVector2(1.0f, 0.0f));
    DrawCommand::BindTexture(0, 0);
    LE_DrawManager.Draw2DFlush(GraphicsFlag::PT_TRIANGLELIST);
}
コード例 #27
0
ファイル: Obj_Bus.cpp プロジェクト: gitrider/wxsj2
BOOL CObject_Bus::Tick_Move(UINT uElapseTime)
{
	FLOAT fElapseTime = (FLOAT)uElapseTime / 1000.f;
	FLOAT fMoveDist = fElapseTime * GetMoveSpeed();
	FLOAT fDist = KLU_GetDist(fVector3(GetPosition().x, 0.f, GetPosition().z), fVector3(m_fvMoveTargetPos.x, 0.f, m_fvMoveTargetPos.z));
	if(fMoveDist >= fDist)
	{
		if(m_fvMoveTargetPos.y <= DEF_BUS_PATH_NODE_INVALID_Y)
		{
			SetMapPosition(fVector2(m_fvMoveTargetPos.x, m_fvMoveTargetPos.z));
		}
		else
		{
			SetPosition(m_fvMoveTargetPos);
		}
		StopMove();
	}
	else
	{
		if(fDist > 0.f)
		{
			fVector3 fvThisPos = GetPosition();
			fVector3 fvLen = m_fvMoveTargetPos - fvThisPos;
			if(m_fvMoveTargetPos.y <= DEF_BUS_PATH_NODE_INVALID_Y)
			{
				fvThisPos.x += (fvLen.x/fDist) * fMoveDist;
				fvThisPos.z += (fvLen.z/fDist) * fMoveDist;
				SetMapPosition(fVector2(fvThisPos.x, fvThisPos.z));
			}
			else
			{
				fvThisPos.x += (fvLen.x/fDist) * fMoveDist;
				fvThisPos.y += (fvLen.y/fDist) * fMoveDist;
				fvThisPos.z += (fvLen.z/fDist) * fMoveDist;
				SetPosition(fvThisPos);
			}
		}
	}

	FLOAT fFaceDir = GetFaceDir();
	if(fabsf(m_fTargetDir - fFaceDir) > 0.01f)
	{
		if(fabsf(m_fTargetDir - fFaceDir) < __PI * 5.f / 4.f
			&& fabsf(m_fTargetDir - fFaceDir) > __PI * 3.f / 4.f)
		{
			SetFaceDir(m_fTargetDir);
		}
		else
		{
			FLOAT fElapseDir = fElapseTime * __PI;
			if(m_fTargetDir - fFaceDir > __PI
				|| (m_fTargetDir - fFaceDir < 0.f && m_fTargetDir - fFaceDir > -__PI))
			{// 正转
				fFaceDir -= fElapseDir;
				if(fFaceDir < 0.f)
				{
					fFaceDir += 2.f *__PI;
				}
				SetFaceDir(fFaceDir);
			}
			else
			{// 反转
				fFaceDir += fElapseDir;
				if(fFaceDir > m_fTargetDir)
				{
					fFaceDir = m_fTargetDir;
				}
				SetFaceDir(fFaceDir);
			}
		}
	}
	return TRUE;
}
コード例 #28
0
BOOL CEngineInterface::Axis_Trans(AXIS_TYPE typeSource, const fVector3& fvSource, AXIS_TYPE typeTar, fVector3& fvTarget)
{
	register Fairy::TerrainData*	pTerrainData = m_pFairySystem->getTerrainData();
	
	// 尚未加载
	if(pTerrainData && (pTerrainData->getXSize()==0 || pTerrainData->getZSize()==0))
	{
		pTerrainData = 0;
	}

	fVector3 fvScale = GetSacle();

	//检查是否是合法的坐标
	fvTarget = fvSource;
	if(!Axis_CheckValid(typeSource, fvSource)) return FALSE;
	if(typeSource == typeTar) return TRUE;

	switch(typeSource)
	{
		//-----------------------------------------------
	case AX_GAME:
		{
			if(AX_PLAN==typeTar) return TRUE;
			else if(AX_GFX == typeTar)
			{
				if(pTerrainData)
				{
					fvTarget.x = pTerrainData->mPosition.x + (FLOAT)fvSource.x * pTerrainData->mScale.x;
					fvTarget.y = pTerrainData->mPosition.y + (FLOAT)fvSource.y * pTerrainData->mScale.y;
					fvTarget.z = pTerrainData->mPosition.z + (FLOAT)fvSource.z * pTerrainData->mScale.z;
				}
				else
				{
					fvTarget.x = (FLOAT)fvSource.x * fvScale.x;
					fvTarget.y = (FLOAT)fvSource.y * fvScale.y;
					fvTarget.z = (FLOAT)fvSource.z * fvScale.z;
				}
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				KLThrow("(AX_GAME->AX_SCREEN) Not support yet!");
			}
		}
		break;
		//-----------------------------------------------
	case AX_PLAN:
		{
			if(!pTerrainData) return FALSE;

			FLOAT fGfxX = pTerrainData->mPosition.x + (FLOAT)fvSource.x * pTerrainData->mScale.x;
			FLOAT fGfxZ = pTerrainData->mPosition.z + (FLOAT)fvSource.z * pTerrainData->mScale.z;

			if(AX_GAME==typeTar)
			{
				//取得相地形高度作为Y坐标(游戏坐标)
				fvTarget.y = (pTerrainData->getHeightAtGrid(fvSource.x, fvSource.z)-pTerrainData->mPosition.y)/ pTerrainData->mScale.y;
				return TRUE;
			}
			else if(AX_GFX == typeTar)
			{
				//取得相地形高度作为Y坐标
				fvTarget.x = fGfxX;
				fvTarget.z = fGfxZ;
				fvTarget.y = pTerrainData->getHeightAtGrid(fvSource.x, fvSource.z);
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				KLThrow("(AX_PLAN->AX_SCREEN) Not support yet!");
			}
		}
		break;

		//-----------------------------------------------
	case AX_GFX:
		{
			if(AX_GAME==typeTar || AX_PLAN==typeTar)
			{
				if(pTerrainData)
				{
					fvTarget.x = (fvSource.x-pTerrainData->mPosition.x)/pTerrainData->mScale.x;
					fvTarget.y = (fvSource.y-pTerrainData->mPosition.y)/pTerrainData->mScale.y;
					fvTarget.z = (fvSource.z-pTerrainData->mPosition.z)/pTerrainData->mScale.z;
				}
				else
				{
					fvTarget.x = (fvSource.x)/fvScale.x;
					fvTarget.y = (fvSource.y)/fvScale.y;
					fvTarget.z = (fvSource.z)/fvScale.z;
				}
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				//KLThrow("(AX_GFX->AX_SCREEN) Not support yet!");
				if(!pTerrainData) return FALSE;
				
				//得到Ogre相机
				Ogre::Camera* pOgreCamera = m_pCamera_Current->GetOgreCamera();
				if(!pOgreCamera) return FALSE;
				if(!(pOgreCamera->isVisible(Ogre::Vector3(fvSource.x, fvSource.y, fvSource.z)))) return FALSE;

				// x:[-1w, 1w]	z:[-1h, 1h]
				Ogre::Vector3 vRet = pOgreCamera->getProjectionMatrix()* pOgreCamera->getViewMatrix() * Ogre::Vector3(fvSource.x, fvSource.y, fvSource.z);

				int nWidth  = m_pFairySystem->getViewport()->getActualWidth();
				int nHeight = m_pFairySystem->getViewport()->getActualHeight();

				fvTarget.x = (( vRet.x + 1.0f)*nWidth/2.0f);
				fvTarget.y = ((-vRet.y + 1.0f)*nHeight/2.0f);
					
				return TRUE;
			}
		}
		break;

		//-----------------------------------------------
	case AX_SCREEN:
		{
			if(!pTerrainData) return FALSE;

			Ogre::Vector3 vRenderPos;
			BOOL bRet = m_pFairySystem->getTerrainIntersects(Fairy::Point((INT)fvSource.x, fvSource.y), vRenderPos);
			if(!bRet) return FALSE;

			if(AX_GAME==typeTar || AX_PLAN==typeTar)
			{
				return Axis_Trans(AX_GFX, fVector3(vRenderPos.x, vRenderPos.y, vRenderPos.z), AX_GAME, fvTarget);
			}
			else if(AX_GFX==typeTar)
			{
				fvTarget = fVector3(vRenderPos.x, vRenderPos.y, vRenderPos.z);
				return TRUE;
			}
		}
		break;
	}
	return FALSE;
}
コード例 #29
0
uint GCNewPlayer_MoveHandler :: Execute( GCNewPlayer_Move* pPacket, Player* pPlayer ) 
{
//__ENTER_FUNCTION
	//AxTrace(0, 2, "GCNewPlayerHandler");
//	return PACKET_EXE_CONTINUE ;

	//当前流程是主流程
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
	{
		CObjectManager* pObjectManager = CObjectManager::GetMe();

		//检查位置是否合法
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewPlayer_MoveHandler");
		}

		//创建玩家
		CObject_PlayerOther* pOther = (CObject_PlayerOther*)(pObjectManager->FindServerObject( (INT)pPacket->getObjID() ));
		fVector3 fvGame;
		CGameProcedure::s_pGfxSystem->Axis_Trans(
			CRenderSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ),
			CRenderSystem::AX_GAME, fvGame);

		if ( pOther == NULL )
		{
			pOther = pObjectManager->NewPlayerOther( (INT)pPacket->getObjID() );

			SObjectInit initPlayerOther;
			initPlayerOther.m_fvPos	= fvGame;

			pOther->Initial( &initPlayerOther );
		}
		else
		{
			fVector2 mapPos(fvGame.x, fvGame.z);
			pOther->SetMapPosition(mapPos);
			pOther->Enable( OSF_VISIABLE );
			pOther->Disalbe( OSF_OUT_VISUAL_FIELD );
		}

		////激活鼠标查询
		//if(pOther->GetRenderInterface())
		//{
		//	pOther->Enable(OSF_RAY_QUERY);
		//}

		//更新装备信息
		pOther->GetCharacterData()->Set_EquipVer(pPacket->getEquipVer());
		//跟新移动速度
		pOther->GetCharacterData()->Set_MoveSpeed(pPacket->getMoveSpeed());

		// move to command
		{
			WORLD_POS posTarget;
			posTarget.m_fX	= pPacket->getTargetPos().m_fX;
			posTarget.m_fZ	= pPacket->getTargetPos().m_fZ;

			SCommand_Object cmdTemp;
			cmdTemp.m_wID			= OC_MOVE;
			cmdTemp.m_auParam[0]	= 0;
			cmdTemp.m_anParam[1]	= pPacket->getHandleID();
			cmdTemp.m_anParam[2]	= 1;
			cmdTemp.m_apParam[3]	= &posTarget;
			pOther->PushCommand(&cmdTemp );
		}

		//放入Ask队列
		CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask(pOther->GetID(), CObject_Character::CT_PLAYEROTHER);

		// tempcode{
		// 此版不做服务器繁忙客户端延后发消息的处理
//		CGCharAskBaseAttrib msgAskBaseAttrib;
//		msgAskBaseAttrib.setTargetID( (INT)pPacket->getObjID() );
//		CNetManager::GetMe()->SendPacket( &msgAskBaseAttrib );

		//AxTrace(0, 0, "[%d]Ask %d", m_hmObject.size(), pPacket->getObjID());
		// }

		pOther->PushDebugString("GCNewPlayer");
		pOther->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
	}

	return PACKET_EXE_CONTINUE ;

//__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
//__ENTER_FUNCTION
//	AxTrace(0, 2, "GCNewPlayerHandler");
//
//	//当前流程是主流程
//	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
//	{
//		CObjectManager* pObjectManager = CObjectManager::GetMe();
//
//		//创建玩家
//		CObject_PlayerOther* pOther = pObjectManager->CreatePlayerOther(
//											(INT)pPacket->getObjID(),
//											(INT)pPacket->getRace(),
//											pPacket->getEquipVer(),
//											fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ),
//											true);
//
//		if(!pOther) return PACKET_EXE_CONTINUE;
//
//		//设置新的位置
//		pOther->SetMapPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ));
//		pOther->RegisterToZone();
//		//IDLE装态
//		pOther->SetMotionStatus(CMS_STATUS_IDLE);
//		pOther->PushDebugString("GCNewPlayer");
//		pOther->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
//	}
//
//	return PACKET_EXE_CONTINUE ;
//
//__LEAVE_FUNCTION
//
//	return PACKET_EXE_ERROR ;
}
コード例 #30
0
uint GCNewPet_MoveHandler::Execute( GCNewPet_Move* pPacket, Player* pPlayer ) 
{
	//当前流程是主流程
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
	{
		CObjectManager* pObjectManager = CObjectManager::GetMe();

		//检查位置是否合法
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler");
		}
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getTargetPos().m_fX, pPacket->getTargetPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler target");
		}

		//创建玩家
		CObject_PlayerNPC* pNPC = (CObject_PlayerNPC*)pObjectManager->FindServerObject( (INT)pPacket->getObjID() );
		fVector3 fvGame;
		CGameProcedure::s_pGfxSystem->Axis_Trans(
			CRenderSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ),
			CRenderSystem::AX_GAME, fvGame);

		if ( pNPC == NULL )
		{
			pNPC = pObjectManager->NewPlayerNPC( (INT)pPacket->getObjID() );

			SObjectInit initPlayerNPC;
			initPlayerNPC.m_fvPos	= fvGame;
			initPlayerNPC.m_fvRot	= fVector3( 0.f, 0.f, 0.f );

			pNPC->Initial( &initPlayerNPC );
		}
		else
		{
			fVector2 mapPos(fvGame.x, fvGame.z);
			pNPC->SetMapPosition(mapPos);
			pNPC->Enable( OSF_VISIABLE );
			pNPC->Disalbe( OSF_OUT_VISUAL_FIELD );
		}
		pNPC->SetNpcType(NPC_TYPE_PET);

		pNPC->GetCharacterData()->Set_MoveSpeed(pPacket->getMoveSpeed());

		// move to command
		{
			WORLD_POS posTarget;
			posTarget.m_fX	= pPacket->getTargetPos().m_fX;
			posTarget.m_fZ	= pPacket->getTargetPos().m_fZ;

			SCommand_Object cmdTemp;
			cmdTemp.m_wID			= OC_MOVE;
			cmdTemp.m_auParam[0]	= 0;
			cmdTemp.m_anParam[1]	= pPacket->getHandleID();
			cmdTemp.m_anParam[2]	= 1;
			cmdTemp.m_apParam[3]	= &posTarget;
			pNPC->PushCommand(&cmdTemp );
		}

		//放入Ask队列
		CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask(pNPC->GetID(), CObject_Character::CT_MONSTER);

		// tempcode{
		// 此版不做服务器繁忙客户端延后发消息的处理
//		CGCharAskBaseAttrib msgAskBaseAttrib;
//		msgAskBaseAttrib.setTargetID( (INT)pPacket->getObjID() );
//		CNetManager::GetMe()->SendPacket( &msgAskBaseAttrib );

		// }


		//同步渲染层
		char szTemp[MAX_PATH];
		_snprintf(szTemp, MAX_PATH, "GCNewPet_Move(%.1f,%.1f)", 
			pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ);
		pNPC->PushDebugString(szTemp);
		pNPC->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
	}

	return PACKET_EXE_CONTINUE ;
}