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 ); }
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(); } } } }
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(); } } } }
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(); } }
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() ); }
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); }