Exemplo n.º 1
0
    // 滑动
    void EasyTouch_On_Swipe(Gesture gesture)
    {
        if (CameraStatusType_ < CameraStatusType.Normal)
        {
            return;
        }
        if (CameraStatusType_ == CameraStatusType.AutoMoveInDeploy)
        {
            return;
        }
        if (CameraStatusType_ == CameraStatusType.DeployMoveToBase)
        {
            return;
        }
        if (CameraStatusType_ == CameraStatusType.DeployMoveToDeploy)
        {
            return;
        }
        if (gesture.touchCount != 1)
        {
            return;
        }
        Transform  camTrans   = MainCamera_.GetComponent <Transform>();
        CameraInfo cameraInfo = GetCameraInfo(CameraStatusType_);

        // 自由模式或布阵模式下,滑动是平移
        if (CameraStatusType_ == CameraStatusType.Free || CameraStatusType_ == CameraStatusType.Deploy || CameraStatusType_ == CameraStatusType.SkillSelect)
        {
            float   x    = -gesture.swipeVector.x / 4f;
            float   z    = -gesture.swipeVector.y / 2f;
            Vector3 temp = (camTrans.rotation * new Vector3(x, 0, z));
            temp.y = 0;

            cameraInfo.position += temp;
            proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID);
            float width = reference.battlefield_wid * 1.5f;
            cameraInfo.position.x = Mathf.Clamp(cameraInfo.position.x, 0, width);
            int lenth = 0;// reference.deployarea_len + reference.deptharea_len + reference.basearea_len;
            cameraInfo.position.z = cameraInfo.position.z > (lenth - CameraZdistance) ? (lenth - CameraZdistance) : cameraInfo.position.z;
            lenth = reference.deployarea_len + reference.deptharea_len + reference.basearea_len;
            cameraInfo.position.z = cameraInfo.position.z < (-lenth - CameraZdistance - 50) ? (-lenth - CameraZdistance - 50) : cameraInfo.position.z;
        }
        else if (CameraStatusType_ != CameraStatusType.SkillSelect)
        {
            SetCameraType(CameraStatusType.Free);
            EasyTouch_On_Swipe(gesture);
        }
    }
Exemplo n.º 2
0
    public static void AnalyzeBin(byte[] bytes)
    {
        var tempManager = new proto.ReferenceManager();

        tempManager.Parse(bytes, 0, bytes.Length);

        for (int i = 0; i < tempManager.units_res_size(); i++)
        {
            proto.UnitReference unit = tempManager.units_res(i);
            UnitReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.defensive_units_res_size(); i++)
        {
            proto.DefensiveUnitsReference unit = tempManager.defensive_units_res(i);
            DefensiveUnitsReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.buff_res_size(); i++)
        {
            proto.BuffReference unit = tempManager.buff_res(i);
            BuffReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.parts_replace_team_res_size(); i++)
        {
            proto.PartsReplaceTeamReference unit = tempManager.parts_replace_team_res(i);
            PartsReplaceTeamReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.shuttle_res_size(); i++)
        {
            proto.ShuttleReference unit = tempManager.shuttle_res(i);
            ShuttleReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.shuttle_team_res_size(); i++)
        {
            proto.ShuttleTeamReference unit = tempManager.shuttle_team_res(i);
            ShuttleTeamReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.skill_res_size(); i++)
        {
            proto.SkillReference unit = tempManager.skill_res(i);
            SkillReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.parts_res_size(); i++)
        {
            proto.PartReference unit = tempManager.parts_res(i);
            PartReferenceList.Add(unit.id, unit);
        }

        for (int i = 0; i < tempManager.battlefield_res_size(); i++)
        {
            proto.BattlefieldReference battle = tempManager.battlefield_res(i);
            BattlefieldReferenceList.Add(battle.id, battle);
        }

        List <proto.LevelDeployUnitReference> levelDelpoyUnitList = null;

        for (int i = 0; i < tempManager.leveldeployunit_res_size(); i++)
        {
            proto.LevelDeployUnitReference levelDeployUnit = tempManager.leveldeployunit_res(i);

            if (LevelDeployReferenceDic.ContainsKey(levelDeployUnit.battlefield_id))
            {
                levelDelpoyUnitList = LevelDeployReferenceDic[levelDeployUnit.battlefield_id];
            }
            else
            {
                levelDelpoyUnitList = new List <proto.LevelDeployUnitReference>();
                LevelDeployReferenceDic.Add(levelDeployUnit.battlefield_id, levelDelpoyUnitList);
            }

            levelDelpoyUnitList.Add(levelDeployUnit);
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// 相机循环
    /// </summary>
    /// <param name="teamDisplayList"></param>
    /// <returns></returns>
    private IEnumerator CameraThread(Dictionary <int, TeamDisplay> teamDisplayList)
    {
        Transform  camTrans   = MainCamera_.GetComponent <Transform>();
        CameraInfo cameraInfo = GetCameraInfo(CameraStatusType.Normal);

        cameraInfo.position = camTrans.position;

        // 得到场景总长度,以做区域判断
        proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID);
        int lenth = 0;// reference.deployarea_len + reference.deptharea_len + reference.basearea_len;

        while (true)
        {
            cameraInfo = GetCameraInfo(CameraStatusType_);
            Quaternion rotation = Quaternion.Euler(cameraInfo.angles);

            if (CameraStatusType_ == CameraStatusType.NormalLerp)
            {
                SetCameraTarget(teamDisplayList);
                if (CameraTargetTrans_ != null)
                {
                    bool    b1 = false, b2 = false;
                    Vector3 tempTarget = new Vector3(cameraInfo.position.x, cameraInfo.position.y, CameraTargetTrans_.position.z - NormalCameraZDistance);
                    tempTarget = tempTarget.z > (lenth - CameraZdistance) ? new Vector3(tempTarget.x, tempTarget.y, lenth - CameraZdistance) : tempTarget;

                    if (Vector3.Distance(camTrans.localEulerAngles, cameraInfo.angles) > 0.5f)
                    {
                        camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * NormalRotationDamping_);
                    }
                    else
                    {
                        b1 = true;
                    }

                    if (Vector3.Distance(camTrans.position, tempTarget) > 0.5f)
                    {
                        camTrans.position = Vector3.MoveTowards(camTrans.position, tempTarget, Time.deltaTime * NormalLerpPositionDamping_);
                    }
                    else
                    {
                        b2 = true;
                    }

                    if (b1 && b2)
                    {
                        SetCameraType(CameraStatusType.Normal, CameraTargetTrans_);
                    }
                }
                else
                {
                    SetCameraType(CameraStatusType.Free);
                }
            }
            // 普通
            else if (CameraStatusType_ == CameraStatusType.Normal)
            {
                if (CameraTargetTrans_ == null)
                {
                    SetCameraType(CameraStatusType.NormalLerp);
                }
                else
                {
                    if (CameraTargetTrans_ != null)
                    {
                        Vector3 tempTarget = new Vector3(cameraInfo.position.x, cameraInfo.position.y, CameraTargetTrans_.position.z - NormalCameraZDistance);
                        tempTarget        = tempTarget.z > (lenth - CameraZdistance) ? new Vector3(tempTarget.x, tempTarget.y, lenth - CameraZdistance) : tempTarget;
                        camTrans.rotation = Quaternion.Lerp(camTrans.rotation, rotation, Time.deltaTime * NormalRotationDamping_);
                        camTrans.position = Vector3.Lerp(camTrans.position, tempTarget, Time.deltaTime * NormalPositionDamping_);
                    }
                }
            }
            // 自由
            else if (CameraStatusType_ == CameraStatusType.Free || CameraStatusType_ == CameraStatusType.Deploy || CameraStatusType_ == CameraStatusType.SkillSelect)
            {
                camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * OtherRotationDamping_);
                camTrans.position = Vector3.MoveTowards(camTrans.position, cameraInfo.position, Time.deltaTime * OtherPositionDamping_);
            }
            // 锁定舰船
            else if (CameraStatusType_ == CameraStatusType.Lock)
            {
                if (CameraTargetTrans_ != null)
                {
                    float distance = 0;
                    GetDistance(CameraScaleType_, out distance);
                    Vector3 disVector = new Vector3(0.0f, 0.0f, -distance);
                    Vector3 position  = rotation * disVector + CameraTargetTrans_.position + new Vector3(0, 0, 40);
                    if (position.z > (lenth - CameraZdistance))
                    {
                        SetCameraType(CameraStatusType.NormalLerp);
                    }
                    else
                    {
                        camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * LockRotationDamping_);
                        camTrans.position = Vector3.MoveTowards(camTrans.position, position, Time.deltaTime * LockPositionDamping_);
                    }
                }
                else
                {
                    SetCameraType(CameraStatusType.NormalLerp);
                }
            }
            else if (CameraStatusType_ == CameraStatusType.DeployMoveToBase || CameraStatusType_ == CameraStatusType.DeployMoveToDeploy)
            {
                bool b1 = false, b2 = false;
                if (Vector3.Distance(camTrans.localEulerAngles, cameraInfo.angles) > 0.5f)
                {
                    camTrans.rotation = Quaternion.RotateTowards(camTrans.rotation, rotation, Time.deltaTime * OtherRotationDamping_);
                }
                else
                {
                    b1 = true;
                }

                if (Vector3.Distance(camTrans.position, cameraInfo.position) > 0.5f)
                {
                    camTrans.position = Vector3.MoveTowards(camTrans.position, cameraInfo.position, Time.deltaTime * OtherPositionDamping_);
                }
                else
                {
                    b2 = true;
                }

                if (b1 && b2)
                {
                    camTrans.localEulerAngles = cameraInfo.angles;
                    camTrans.position         = cameraInfo.position;
                    SetCameraType(CameraStatusType.Deploy);
                }
            }
            yield return(null);
        }
    }
Exemplo n.º 4
0
    /// <summary>
    /// 布阵相机协程
    /// </summary>
    /// <returns></returns>
    private IEnumerator DeployCameraThread()
    {
        // 相机开始移动
        //yield return new WaitForSeconds( 2f );
        MainCamera_.transform.position         = Vector3.zero;
        MainCamera_.transform.localEulerAngles = Vector3.zero;

        // 相机要指向的位置缓存
        int firstID  = 30000;
        int secondID = 40000;
        int thirdID  = 60000;

        Dictionary <int, Vector3> posList = new Dictionary <int, Vector3>();
        int shipCount = BattleSys.GetShipCount(false);

        for (int i = 0; i < shipCount; i++)
        {
            ClientShip cs = BattleSys.GetShipByIndex(false, i);
            if (cs.Reference.id == firstID || cs.Reference.id == secondID || cs.Reference.id == thirdID)
            {
                if (!posList.ContainsKey(cs.Reference.id))
                {
                    posList.Add(cs.Reference.id, cs.Position);
                }
            }
        }
        Animator animator = MainCamera.AddComponent <Animator>();

        animator.runtimeAnimatorController = Resources.Load("Camera/camera_control") as RuntimeAnimatorController;

        Vector3 pos;

        posList.TryGetValue(firstID, out pos);
        MainCamera_.transform.position        = pos;
        MainCamera.transform.position         = new Vector3(29.3f, 19.9f, -40.8f);
        MainCamera.transform.localEulerAngles = new Vector3(15, 315, 0);
        animator.SetTrigger("DeployCameraStep01");
        yield return(new WaitForSeconds(2.3f));

        posList.TryGetValue(secondID, out pos);
        MainCamera_.transform.position        = pos;
        MainCamera.transform.position         = new Vector3(38.3f, 4.3f, 49.7f);
        MainCamera.transform.localEulerAngles = new Vector3(-2.3f, 238.54f, 0);
        animator.SetTrigger("DeployCameraStep02");
        yield return(new WaitForSeconds(3.51f));

        posList.TryGetValue(thirdID, out pos);
        MainCamera_.transform.position        = pos;
        MainCamera.transform.position         = new Vector3(46.8f, 8.1f, -9.7f);
        MainCamera.transform.localEulerAngles = new Vector3(0, 258, 0);
        animator.SetTrigger("DeployCameraStep03");
        yield return(new WaitForSeconds(3.2f));

        // 显示敌人指挥中心信息
        StartCoroutine(PlayEffectOfMainEnemy(pos));
        yield return(new WaitForSeconds(2.1f));

        posList.Clear();

        // 得到相机和边线的z值差
        proto.BattlefieldReference reference = GlobalConfig.GetBattlefieldReferenceByID(BattleSys.NowMapID);
        if (reference == null)
        {
            yield break;
        }
        // 战场长度
        float length = reference.basearea_len + reference.deptharea_len + reference.deployarea_len;

        Vector3 position = new Vector3(DeployOriginPositionX, DeployOriginPositionY, -length - 23.8f);
        Vector3 angle    = new Vector3(DeployOriginRotationX, DeployOriginRotationY, DeployOriginRotationZ);

        // 初始化基地区域相机属性
        CameraInfo info = GetCameraInfo(CameraStatusType.DeployMoveToBase);

        info.position = position + new Vector3(0, 0, length - reference.basearea_len / 2);
        info.angles   = angle;
        // 初始化布阵区域相机属性
        info          = GetCameraInfo(CameraStatusType.DeployMoveToDeploy);
        info.position = position;
        info.angles   = angle;
        // 设置相机位置和旋转
        MainCamera.transform.position          = Vector3.zero;
        MainCamera.transform.localEulerAngles  = Vector3.zero;
        MainCamera_.transform.position         = position;
        MainCamera_.transform.localEulerAngles = angle;
        animator.SetTrigger("DeployCameraStep04");
        yield return(new WaitForSeconds(2));

        Destroy(animator);

        // 移动完毕,修改模式为可操作模式
        SetCameraType(CameraStatusType.Deploy);
        // 显示布阵界面
        UIManager.ShowPanel <DeployPanel>();
        UIManager.ShowPanel <DeployCameraControl>();
        // 开启相机线程
        StartCoroutine(CameraThread(null));
    }