예제 #1
0
파일: Obj_Map.cpp 프로젝트: brock7/TianLong
VOID CObject_Map::SetPosition(const fVector3& fvPosition) 
{ 
	//找到该物体所处的网格
	CScene* pActiveScene = (CScene*)CWorldManager::GetMe()->GetActiveScene();
	if(pActiveScene)
	{
		//当前有激活场景
		m_ivGridPos.x = (INT)pActiveScene->GetZoneX(fvPosition.x);
		m_ivGridPos.y = (INT)pActiveScene->GetZoneZ(fvPosition.z);

		//是否是UI模型
		if(!GetFakeObjectFlag()) 
		{
			//如果已经有注册过的网格,首先反注册
			if(m_pZone)
				m_pZone->UnRegisterObject(this);

			//注册到新网格上
			CZone* pZone = pActiveScene->GetZone(m_ivGridPos.x, m_ivGridPos.y);
			if(!pZone || pZone == m_pZone) return;
			pZone->RegisterObject(this);
		}
	}

	CObject::SetPosition( fvPosition );
}
예제 #2
0
VOID CObject_PlayerOther::UpdateHairMesh(VOID)
{
	if(m_pRenderInterface != NULL)
	{
		INT nHairMesh = GetCharacterData()->Get_HairMesh();
		if(nHairMesh == INVALID_ID)
		{
			nHairMesh = m_pCharRace->nDefHairGeo;
		}
		if(nHairMesh != INVALID_ID)
		{
			//-----------------------------------------------------------
			//角色头发模型数据库
			DBC_DEFINEHANDLE(s_pCharHairMesh, DBC_CHARACTER_HAIR_GEO);
			//查找相应记录
			const _DBC_CHAR_HAIR_GEO* pHairMesh = (const _DBC_CHAR_HAIR_GEO*)s_pCharHairMesh->Search_Index_EQU(nHairMesh);
			if(pHairMesh != NULL)
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_HAIR_MESH, pHairMesh->pMeshFile);
			}
			else
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_HAIR_MESH, "");
			}
			//如果是UI物体,重新设置VisibleFlag
			if(GetFakeObjectFlag())
			{
				m_pRenderInterface->Actor_SetUIVisibleFlag();
			}
		}
	}
}
예제 #3
0
VOID CObject_PlayerOther::UpdateFaceMesh(VOID)
{
	if(m_pRenderInterface != NULL)
	{
		INT nFaceMeshID = GetCharacterData()->Get_FaceMesh();
		if(nFaceMeshID == INVALID_ID)
		{
			nFaceMeshID = m_pCharRace->nDefHeadGeo;
		}
		if(nFaceMeshID != INVALID_ID)
		{
			//-----------------------------------------------------------
			//角色头部模型数据库
			DBC_DEFINEHANDLE(s_pCharHeadGeo, DBC_CHARACTER_HEAD_GEO);
			//查找相应记录
			const _DBC_CHAR_HEAD_GEO* pFaceGeo = (const _DBC_CHAR_HEAD_GEO* )s_pCharHeadGeo->Search_Index_EQU(nFaceMeshID);
			if(pFaceGeo != NULL)
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_FACE_MESH, pFaceGeo->pMeshFile);
			}
			else
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_FACE_MESH, "");
			}

			//如果是UI物体,重新设置VisibleFlag
			if(GetFakeObjectFlag())
			{
				m_pRenderInterface->Actor_SetUIVisibleFlag();
			}
		}
	}
}
예제 #4
0
VOID CObject_Character::Initial( VOID* pParam )
{
	//AxProfile::AxProfile_PopNode("ObjInit");
	CObject_Phy::Initial(pParam);

	m_bAnimationEnd				= FALSE;
	m_uFightStateTime	= 0;

	SetCurrentLogicCommand(NULL);
	m_fLogic_Speed				= 1.f;

	SetMapPosition( fVector2( GetPosition().x, GetPosition().z ) );
	
	//创建逻辑信息
	m_pCharacterData = CDataPool::GetMe()->CharacterData_Create(this);

	//创建信息板
	//AxProfile::AxProfile_PushNode("ObjInit_CreateBoard");
	if(!GetFakeObjectFlag()&& CGameProcedure::s_pUISystem)
	{
		m_pInfoBoard = CGameProcedure::s_pUISystem->CreateCreatureBoard();
		m_pInfoBoard->SetElement_ObjId(this->GetServerID());

		m_pInfoBoard->SetElement_LeaderFlag(FALSE);
		m_pInfoBoard->SetElement_Name("");
		m_pInfoBoard->SetElement_SaleSign(FALSE);
		SetElement_Title("",_TITLE::NO_TITLE);
		m_pInfoBoard->Show(FALSE);
	}
	//AxProfile::AxProfile_PopNode("ObjInit_CreateBoard");

	m_uTime_LogicEventListTick	= CGameProcedure::s_pTimeSystem->GetTimeNow();

	Enable(OSF_VISIABLE);
	Disalbe(OSF_OUT_VISUAL_FIELD);

	m_bDropBox_HaveData			= FALSE;
	m_nDropBox_ItemBoxID		= INVALID_ID;
	m_DropBox_OwnerGUID			= INVALID_ID;
	m_posDropBox_CreatePos		= WORLD_POS(-1.f, -1.f);

	m_bHideWeapon = FALSE;
	UpdateCharRace();
	UpdateCharModel();
	UpdateMountModel();

	SObjectInit *pCharacterInit = (SObjectInit*)pParam;
	if ( pCharacterInit != NULL )
	{
		// 状态信息
		RemoveAllImpact();
		Start_Idle();
	}
}
예제 #5
0
VOID CObject_Character::CreateRenderInterface(VOID)
{
	if(!m_pRenderInterface) return;

	//在渲染层刷新位置
	SetPosition(GetPosition());
	Enable(OSF_VISIABLE);

	//根据是否是FakeObject作一定处理
	if(GetFakeObjectFlag())
	{
		//禁止鼠标选择
		m_pRenderInterface->SetRayQuery(FALSE); 
		//设置特殊的VisibleFlag
		m_pRenderInterface->Actor_SetUIVisibleFlag();
	}
	else
	{
		m_pRenderInterface->Attach_ProjTexture(tEntityNode::SHADOW_BLOB, TRUE, GetShadowRange());

		//设置选择优先级
		if(CT_PLAYERMYSELF == GetCharacterType()) 
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PLAYERMYSLEF);
		else if(CT_PLAYEROTHER == GetCharacterType()) 
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PLAYEROTHER);
		else if(NPC_TYPE_PET == ((CObject_PlayerNPC*)this)->GetNpcType())
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_PET);
		else
			m_pRenderInterface->RayQuery_SetLevel(tEntityNode::RL_CREATURE);
	}

	//设置骨骼动画回调
	m_pRenderInterface->SetAnimationEndEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationEnd), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationCanBreakEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationCanBreak), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationHitEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationHit), (DWORD)GetID() );
	m_pRenderInterface->SetAnimationShakeEvent( (FUNC_ONANIMATIONEND)(CObject_Character::_OnAnimationShakeEvent), (DWORD)GetID() );
}
예제 #6
0
VOID CObject_PlayerOther::UpdateEquip(HUMAN_EQUIP point)
{
	CCharacterData *pCharacterData = GetCharacterData();
	if(pCharacterData == NULL)
	{
		return ;
	}

	if(point == HEQUIP_WEAPON && IsHideWeapon())
	{
		return ;
	}

	if(!GetFakeObjectFlag())
	{
		if(pCharacterData->Get_ModelID() != INVALID_ID)
		{
			return ;
		}
	}

	//生成一个临时的Item对象
	CObject_Item_Equip *pTempEquip = NULL;
	INT nID = pCharacterData->Get_Equip(point);
	if(nID != INVALID_ID)
	{
		pTempEquip = (CObject_Item_Equip *)CObject_Item::NewItem(nID);
	}

	//如果是装备根据装配点装备物品
	if(pTempEquip != NULL && ICLASS_EQUIP == pTempEquip->GetItemClass())
	{
		switch(pTempEquip->GetItemType())
		{
		case HEQUIP_WEAPON:				//武器,挂接类装备
			{
				EquipItem_BodyLocator(pTempEquip->GetItemType(), pTempEquip->GetVisualID());
				SetWeaponType( pTempEquip->GetWeaponType() );
			}
			break;
		case HEQUIP_CAP:				//帽子, 身体, 手臂, 鞋, 装备类物品
		case HEQUIP_ARMOR:				
		case HEQUIP_CUFF:				
		case HEQUIP_BOOT:	
			{
				EquipItem_BodyPart(pTempEquip->GetItemType(), pTempEquip->GetVisualID());
			}
			break;
		case HEQUIP_SASH:				//腰带, 戒子, 项链
		case HEQUIP_RING:				
		case HEQUIP_NECKLACE:		
		default:
			break;
		}
	}
	else
	{
		//卸载装备
		UnEquipItem(point);
	}

	//如果是UI物体,重新设置VisibleFlag
	if(GetFakeObjectFlag())
	{
		m_pRenderInterface->Actor_SetUIVisibleFlag();
	}

	CObject_Item::DestroyItem(pTempEquip);
}