void UpdateMemberRenderInterfaceByIndex(int nIndex) { if (m_anPassengerIDs[nIndex] == 0) { return; } if (m_abPassengerAttacheds[nIndex]) { return; } if (GetRenderInterface() != null && m_pBusData != null && m_pBusData.m_aSeatInfo[nIndex].m_pszLocator.Length > 0) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[nIndex]); if (pObj != null && pObj.GetRenderInterface() != null) { GetRenderInterface().Attach_Object(pObj.GetRenderInterface(), m_pBusData.m_aSeatInfo[nIndex].m_pszLocator); CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID((uint)ServerID); } m_abPassengerAttacheds[nIndex] = true; UpdateAnimation(); SetPosition(GetPosition()); } } }
void RemoveAllPassengers() { int i; for (i = 0; i < GameStruct_Bus.DEF_BUS_MAX_PASSENGER_COUNT; i++) { if (m_anPassengerIDs[i] != MacroDefine.INVALID_ID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = 0; m_abPassengerAttacheds[i] = false; } } m_nPassengerCount = 0; }
public void DetachCharacterInterface(uint nObjID) { if (nObjID == 0) { return; } int nCount = GetPassengerCount(); if (nCount > 0) { int i; for (i = 0; i < nCount; i++) { if (m_anPassengerIDs[i] == nObjID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = 0; m_abPassengerAttacheds[nCount - 1] = false; return; } } } }
bool RemovePassenger(uint nPassengerID) { if (nPassengerID == 0) { return(false); } int nCount = GetPassengerCount(); if (nCount > 0) { int i; for (i = 0; i < nCount; i++) { if (m_anPassengerIDs[i] == nPassengerID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = 0; m_abPassengerAttacheds[nCount - 1] = false; // 减少乘客 [8/26/2011 ivan edit] --m_nPassengerCount; return(true); } } } return(false); }
int s_nLastHitObj = -1; //上次选中的对象ID public CObject GetMouseOverObject(Vector3 pt, out Vector3 fvMouseHitPlan) //pt: screen Position in pixel { fvMouseHitPlan = Vector3.zero; CObject hitObj = null; Ray ray = Camera.main.ScreenPointToRay(pt); RaycastHit hitInfo; bool hit = Physics.Raycast(ray, out hitInfo); if (hit) { GameObject hitGo = hitInfo.collider.gameObject; //根据layer判断是否相交于动态对象还是静态的物体 if (hitGo.layer == LayerManager.ActorLayer && hitGo != null && mPhyObjectsMap.ContainsKey(hitGo)) { hitObj = mPhyObjectsMap[hitGo]; fvMouseHitPlan = hitObj.GetPosition(); } else { fvMouseHitPlan = hitInfo.point; } } int nHitObjID = hitObj != null ? hitObj.ID : -1; if (s_nLastHitObj != nHitObjID) { if (hitObj != null && hitObj.GetRenderInterface() != null) { hitObj.GetRenderInterface().SetMouseHover(true); } CObject pLastHitObj = FindObject(s_nLastHitObj); if (pLastHitObj != null && pLastHitObj.GetRenderInterface() != null) { pLastHitObj.GetRenderInterface().SetMouseHover(false); } s_nLastHitObj = nHitObjID; } return(hitObj); }
public virtual void SetMainTarget(int id, DESTROY_MAIN_TARGET_TYPE delType) { CObject pFindObj = null; if (id != MacroDefine.INVALID_ID) { pFindObj = (CObject)FindServerObject(id); } //不考虑无法选择的物体 //如果没选中物体或者选种的物体是不CanbeSelect的,告诉服务器取消当前选种对象。 if (pFindObj == null || (pFindObj != null && !(pFindObj.CanbeSelect()))) { if (mMainTarget != null && mMainTarget.GetRenderInterface() != null) { //关闭选择环 mMainTarget.GetRenderInterface().Attach_ProjTexture(GFX.GfxObject.PROJTEX_TYPE.SELECT_RING, false, 1.0f, 1.7f, null); mMainTarget = null; if ((delType != DESTROY_MAIN_TARGET_TYPE.DEL_OBJECT) || (pFindObj != null && !(pFindObj.CanbeSelect()))) { // 如果是鼠标右键销毁, target 窗口. // 2006-4-12 如果当前选择的不是队友返回。 // 设置当前没有选中队友 // SetCurSelTeam(-1); AutoReleaseSkill.Instance.SetTargetObject(-1); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_MAINTARGET_CHANGED, -1); } else { //if(!IsSelTeam()) // { // 2006-4-12 如果当前选择的不是队友返回。 // CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_MAINTARGET_CHANGED,-1); // } } } else { // 设置当前没有选中队友 // SetCurSelTeam(-1); AutoReleaseSkill.Instance.SetTargetObject(-1); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_MAINTARGET_CHANGED, -1); } return; } if (pFindObj != null && (pFindObj != mMainTarget)) { //关闭选择环 if (mMainTarget != null && mMainTarget.GetRenderInterface() != null) { mMainTarget.GetRenderInterface().Attach_ProjTexture(GFX.GfxObject.PROJTEX_TYPE.SELECT_RING, false, 1.0f, 1.7f, null); } //设置选择对象 mMainTarget = pFindObj; //告诉server选中的对象 //发往服务器 CGLockTarget msg = new CGLockTarget(); msg.TargetID = id; NetManager.GetNetManager().SendPacket(msg); //打开新的选择环 if (mMainTarget != null && mMainTarget.GetRenderInterface() != null) { CObject_PlayerNPC pFindNPC = (CObject_PlayerNPC)pFindObj; float Select_Ring_Range = pFindNPC.GetProjtexRange(); //ENUM_RELATION eCampTypeMetoIt = ENUM_RELATION.RELATION_INVALID; //if(g_theKernel.IsKindOf(m_pMainTarget->GetClass(), GETCLASS(CObject_Character))) //{ // eCampTypeMetoIt = CalcRelationType( // CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_CampData()->m_nCampID, // pFindNPC->GetCampData()->m_nCampID, // CGameProcedure::s_pCampDataMgr ); // // 如果选中的是玩家则通过PK模式判断关系 [8/19/2011 edit by ZL] // if (eCampTypeMetoIt != RELATION_ENEMY) // { // INT tempRelation = CObjectManager::GetMe()->GetMySelf()->GetRelationOther((CObject_Character*)pFindObj); // if ( tempRelation != -1 ) // eCampTypeMetoIt = (ENUM_RELATION)tempRelation; // } //} mMainTarget.GetRenderInterface().Attach_ProjTexture(GFX.GfxObject.PROJTEX_TYPE.SELECT_RING, true, Select_Ring_Range, 1.7f, null); } //产生一个选择对象更改的事件 UIWindowMng.Instance.ShowWindow("TargetWindow"); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_MAINTARGET_CHANGED, id); AutoReleaseSkill.Instance.SetTargetObject(id); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // 设置选中队友2006-4-1 // //TeamMemberInfo* pInfo = CUIDataPool::GetMe()->GetTeamOrGroup()->GetMemberByServerId(m_pMainTarget->GetServerID()); //if(pInfo) //{ // GUID_t GUID = pInfo->m_GUID; // // 设置当前选中队友 // SetCurSelTeam(TRUE); // SetCurSelTeam(GUID); //} } }
public override void Tick() { if (m_bAlreadyHit) { base.Tick(); } else { if (m_pBulletData == null) { m_bAlreadyHit = true; return; } switch ((ENUM_BULLET_CONTRAIL_TYPE)m_pBulletData.m_nContrailType) { case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_BEELINE: case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_PARABOLA: { Vector3 fvTargetPos; if (m_bSingleTarget) { CObject pObj = CObjectManager.Instance.FindServerObject(m_idTarget); if (pObj != null) { fvTargetPos = pObj.GetPosition(); if (pObj.GetRenderInterface() != null && (m_pBulletData.m_szHitEffectLocator.Length != 0)) { pObj.GetRenderInterface().GetLocator(m_pBulletData.m_szHitEffectLocator, ref fvTargetPos); } else { fvTargetPos = pObj.GetPosition(); } } else { fvTargetPos = new Vector3(-1.0f, -1.0f, -1.0f); CObjectManager.Instance.DestroyObject(this); return; } } else { fvTargetPos = m_fvTargetPos; } float fCurTickFlyDist = m_pBulletData.m_fSpeed * GameProcedure.s_pTimeSystem.GetDeltaTime() / 1000.0f; float fDistSq = (fvTargetPos - GetPosition()).sqrMagnitude; if (GFX.GfxUtility.IsLessEqual(fDistSq, fCurTickFlyDist * fCurTickFlyDist)) { if (m_pBulletData.m_nContrailType == (int)ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_PARABOLA) { float fStartToEndDist = m_fStartToEndDist; float fTargetToStartDist = (fvTargetPos - m_fvStartPos).magnitude; float fCenterToTargetDist = Mathf.Abs(fTargetToStartDist - fStartToEndDist / 2.0f); float fTemp = (fCenterToTargetDist * 2.0f) / fStartToEndDist; float fAddY = (1.0f - (fTemp * fTemp)) * m_pBulletData.m_fContrailParam; fvTargetPos.y += fAddY; } Vector2 curPos = new Vector2(GetPosition().x, GetPosition().z); Vector2 targetPos = new Vector2(fvTargetPos.x, fvTargetPos.z); float fDir = GFX.GfxUtility.GetYAngle(curPos, targetPos); SetPosition(fvTargetPos); SetFaceDir(fDir); AlreadyHit(); } else { Vector3 vDir = fvTargetPos - GetPosition(); vDir.Normalize(); Vector3 vFlyLength; vFlyLength.x = vDir.x * fCurTickFlyDist; vFlyLength.y = vDir.y * fCurTickFlyDist; vFlyLength.z = vDir.z * fCurTickFlyDist; fvTargetPos = vFlyLength + GetPosition(); if (m_pBulletData.m_nContrailType == (int)ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_PARABOLA) { float fStartToEndDist = m_fStartToEndDist; float fTargetToStartDist = (fvTargetPos - m_fvStartPos).magnitude; float fCenterToTargetDist = Mathf.Abs(fTargetToStartDist - fStartToEndDist / 2.0f); float fTemp = (fCenterToTargetDist * 2.0f) / fStartToEndDist; float fAddY = (1.0f - (fTemp * fTemp)) * m_pBulletData.m_fContrailParam; fvTargetPos.y += fAddY; } Vector2 curPos = new Vector2(GetPosition().x, GetPosition().z); Vector2 targetPos = new Vector2(fvTargetPos.x, fvTargetPos.z); float fDir = GFX.GfxUtility.GetYAngle(curPos, targetPos); SetPosition(fvTargetPos); SetFaceDir(fDir); } } break; case ENUM_BULLET_CONTRAIL_TYPE.BULLET_CONTRAIL_TYPE_NONE: default: { AlreadyHit(); } break; } } }