Beispiel #1
0
    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());
            }
        }
    }
Beispiel #2
0
    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;
    }
Beispiel #3
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;
                }
            }
        }
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
    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);
    }
Beispiel #6
0
    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;
            }
        }
    }