예제 #1
0
        /// <summary>
        /// 无法建造警告
        /// </summary>
        /// <param name="_buildPosition"></param>
        /// <returns></returns>
        void CannotBuildWarning(int _builderIndex, Vector3 _buildPosition)
        {
            if (!builders[_builderIndex].hintModel)
            {
                return;
            }
            Transform warningHintModel = Instantiate(builders[_builderIndex].hintModel, _buildPosition, Quaternion.Euler(35f, 0f, 0f));

            Destroy(warningHintModel.gameObject, 1f);
            //使警告模型可见
            Funcs.SetObjectVisuality(builders[_builderIndex].hintModel, true);
            //使模型半透明
            Funcs.ChangeObjectAlphaValue(warningHintModel, 0.3f);


            /*
             * Vector3 hintModelPosition = teamObj.hintModel.position;
             * teamObj.hintModel.position = _buildPosition;
             * //使模型半透明
             * Funcs.ChangeObjectAlphaValue(teamObj.hintModel, 0.3f);
             * yield return new WaitForSeconds(Time.deltaTime * 150f);
             * //恢复模型透明度
             * Funcs.ChangeObjectAlphaValue(teamObj.hintModel, 1f);
             * teamObj.hintModel.position = hintModelPosition;
             */
        }
예제 #2
0
        void PartOKRPC(string _item, int _newTeamIndex, int _thisModelIndex)
        {
            bool      findPart   = false;
            Transform finalModel = models[_thisModelIndex];

            if (finalModel)
            {
                Transform part = finalModel.Find(_item);
                if (part)
                {
                    findPart = true;
                }
                else
                {
                    for (int i = 0; i < finalModel.childCount; i++)
                    {
                        if (finalModel.GetChild(i).childCount > 0)
                        {
                            part = finalModel.GetChild(i).Find(_item);
                            if (part)
                            {
                                findPart = true;
                                break;
                            }
                        }
                    }
                }

                if (findPart)
                {
                    part.gameObject.SetActive(true);
                    if (newTeams[_newTeamIndex].GetComponent <TeamObj>().visible)
                    {
                        StartCoroutine(Funcs.SlowDisappearIE(part, 2f, 80f, true));
                    }
                    else
                    {
                        Funcs.ChangeObjectAlphaValue(part, 0f);
                    }
                }
            }
        }
예제 #3
0
        void SpawnMonsterObjectsRPC(WorldObj.Nationality _nationality, int _soldiernumber, WorldObj.SoldierType _soldiertype, int _teamMorola, int _viewId, int _viewIdModel)
        {
            //计算出野怪位置
            Vector3 GriffinPosition = Vector3.zero;

            switch (_soldiertype)
            {
            case SoldierType.Griffin:
                bool rightposition = false;
                while (!rightposition)
                {
                    GriffinPosition = RandomPosition();
                    rightposition   = true;
                    for (int j = 0; j < citiespositions.Count; j++)
                    {
                        if (Vector3.Distance(citiespositions[j], GriffinPosition) < 2f)
                        {
                            rightposition = false;
                            break;
                        }
                    }
                }

                break;

            default:
                break;
            }
            GameObject newMonster = Instantiate(team, GriffinPosition, Quaternion.identity);

            newMonster.GetComponent <PhotonView>().viewID = _viewId;
            //给新派生的队伍对象赋值
            TeamObj teamObj = newMonster.GetComponent <TeamObj>();

            teamObj.nationality   = _nationality;
            teamObj.soldiernumber = _soldiernumber;
            teamObj.soldiertype   = _soldiertype;
            teamObj.hero          = "";
            teamObj.teamspeed     = WorldObj.BeginTeamSpeed;
            teamObj.teammorale    = WorldObj.BeginTeamMorale;
            //根据士兵类型激活队伍模型
            Transform teamModel = null;

            switch (teamObj.soldiertype)
            {
            case WorldObj.SoldierType.Griffin:
                teamModel = teamObj.transform.Find("Griffin_Yellow");
                break;
            }
            if (teamModel)
            {
                //激活队伍模型
                teamModel.gameObject.SetActive(true);
                //手动分配队伍模型的PhotonViewID
                teamModel.GetComponent <PhotonView>().viewID = _viewIdModel;
            }

            //使其不可见
            Funcs.ChangeObjectAlphaValue(teamObj.teamHealthCanvas, 0f);
            Funcs.ChangeObjectAlphaValue(teamObj.transform, 0f);
        }
예제 #4
0
        IEnumerator GoAndBuildIE(int _builderIndex, Vector3 _buildPosition)
        {
            UIController uiController = countryObj.GetComponent <UIController>();

            //测试是否能建造
            if (!CanBuild(_builderIndex, _buildPosition))
            {
                uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.CannotBuild, builders[_builderIndex].gameObject);
                //无法建造警告
                CannotBuildWarning(_builderIndex, _buildPosition);
                //则设置该标志为真,使得再次点击可以直接重选建造位置
                countryObj.reGoBuild = true;
                yield break;
            }
            //开始行走向建造目标位置,移动提示模型到该位置并使其半透明
            if (builders[_builderIndex].hintModel)
            {
                builders[_builderIndex].hintModel.position = _buildPosition;
                StopCoroutine(builders[_builderIndex].coroutineHintModelFlash);
                builders[_builderIndex].coroutineHintModelFlash = null;
                //使模型可见
                Funcs.SetObjectVisuality(builders[_builderIndex].hintModel, true);
                //使模型半透明
                Funcs.ChangeObjectAlphaValue(builders[_builderIndex].hintModel, 0.4f);
            }
            //队伍开始行走直到接近目标位置
            builders[_builderIndex].GetComponent <NavMeshAgent>().SetDestination(_buildPosition);

            uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.GoBuild, builders[_builderIndex].gameObject);

            while (Vector3.Distance(builders[_builderIndex].transform.position, _buildPosition) > 1.2f)
            {
                yield return(new WaitForSeconds(Time.deltaTime * 75));
            }

            //测试是否能建造
            //开始建造
            if (!CanBuild(_builderIndex, _buildPosition))
            {
                uiController.ScoutInfoShow(countryObj.nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.CannotBuild, builders[_builderIndex].gameObject);

                yield break;
            }

            cityController.BuildNewTeam(builders[_builderIndex].nationality, 1000, "", WorldObj.SoldierType.Tank, builders[_builderIndex].partsnames, _buildPosition);
            //保存并得到保存的已建造的队伍序号
            photonView.RPC("SaveNewTeamRPC", PhotonTargets.All, null);
            //马上取出该序号防止其他进程改变其值
            int thisNewTeamIndex = newTeamIndex;

            //将Work带的配件表赋值给新建造的队伍,以便在新建队伍的初始化中调用
            photonView.RPC("GivePartsNamesRPC", PhotonTargets.All, builders[_builderIndex].partsnames);
            //开始建造后,使得工程队转向建造位置,静止不动并不可选取
            builders[_builderIndex].transform.LookAt(new Vector3(_buildPosition.x, builders[_builderIndex].transform.position.y, _buildPosition.z));
            //锁住队伍
            LockUnLockTeam(builders[_builderIndex], true);
            //准备建造模型逐步建造
            photonView.RPC("PrepareStepBuildRPC", PhotonTargets.All, WorldObj.SoldierType.Tank, builders[_builderIndex].nationality);
            //逐步建造队伍模型
            StepBuild(thisNewTeamIndex, _builderIndex, builders[_builderIndex].partsnames, 10f);


            //删除提示模型
            if (builders[_builderIndex].hintModel)
            {
                Destroy(builders[_builderIndex].hintModel.gameObject);
            }

            //协程结束则清空协程变量
            builders[_builderIndex].coroutineGoAndBuild = null;
        }