コード例 #1
0
        /// <summary>
        /// //计算英雄探索某一野外的收益
        /// </summary>
        /// <param name="heroData">英雄数据</param>
        /// <param name="heroPos">英雄位置</param>
        /// <param name="fieldData">野外数据</param>
        /// <param name="fieldPos">野外位置</param>
        /// <returns></returns>
        public float Calculate(HeroData heroData, Vector3 heroPos, FieldData fieldData, Vector3 fieldPos)
        {
            //收益
            //经验 + 金钱 + 声望
            float exp  = CalculateExp(heroData, fieldData, fieldData.resRemain);
            float gold = CalculateGold(heroData, fieldData, fieldData.resRemain);
            float fame = CalculateFame(heroData, fieldData, fieldData.resRemain);

            //时间
            float time = CalculateExploreTime(heroData, fieldData, fieldData.resRemain);
            //路途时间
            float travelTime = EUtilityHelperL.CalcDistanceIn2D(heroPos, fieldPos) / heroData.moveSpeed;

            return((exp + gold + fame) / (time + travelTime + Mathf.Epsilon));
        }
コード例 #2
0
ファイル: WorldManager.cs プロジェクト: lykyyy/HalfWorld
        //获取一个随机的野外位置
        private Vector3 GetFieldPos(Transform city)
        {
            Vector3 randPos = Vector3.zero;
            //每次随机查找位置可以随机的机会,越大则越可能让世界摆放的相对分散,计算时间也越长
            int chance = randomChance;
            //是否找到了合适的位置
            bool             findOut = false;
            List <Transform> temp    = null;

            m_fieldClonesAroundCity.TryGetValue(city, out temp);
            while (chance > 0 && !findOut)
            {
                findOut = true;
                --chance;
                //在m_cityRadiusRange.x ~ m_cityRadiusRange.y半径范围内随机一个位置
                //注意这里随机的位置是相对于当前city空间的
                var randV2 = Random.insideUnitCircle.normalized * Random.Range(m_cityRadiusRange.x, m_cityRadiusRange.y);
                randPos.x = randV2.x;
                randPos.z = randV2.y;
                if (temp != null)
                {
                    //计算与其他野外的位置关系
                    foreach (var item in temp)
                    {
                        //距离有点近呢
                        //需要将空间位置进行一次转换
                        if (EUtilityHelperL.CalcDistanceIn2D(city.InverseTransformPoint(item.transform.position), randPos) < m_fieldDensity)
                        {
                            findOut = false;
                            break;
                        }
                    }
                }
            }

            //提醒一下
            if (!findOut)
            {
                Debug.LogWarning("没有找到合适的野外位置,凑合一下吧~");
            }

            return(randPos);
        }
コード例 #3
0
ファイル: City.cs プロジェクト: lykyyy/HalfWorld
        /// <summary>
        /// 获得随机的野外位置
        /// </summary>
        /// <param name="density">密度系数</param>
        /// <param name="minRadius">最小半径</param>
        /// <param name="maxRadius">最大半径</param>
        /// <returns></returns>
        private Vector3 GetFieldPos(float density, float minRadius, float maxRadius)
        {
            Vector3 randPos = Vector3.zero;
            //每次随机查找位置可以随机的机会,越大则越可能让世界摆放的相对分散,计算时间也越长
            int chance = EGameConstL.FIELD_RAND_CHANCE;

            //是否找到了合适的位置
            bool findOut = false;

            while (chance > 0 && !findOut)
            {
                findOut = true;
                --chance;
                //在m_cityRadiusRange.x ~ m_cityRadiusRange.y半径范围内随机一个位置
                //注意这里随机的位置是相对于当前city空间的
                var randV2 = Random.insideUnitCircle.normalized * Random.Range(minRadius, maxRadius);

                randPos.x = randV2.x;
                randPos.z = randV2.y;

                //计算与其他野外的位置关系
                foreach (var item in m_roundFields)
                {
                    //距离有点近呢
                    //需要将空间位置进行一次转换
                    if (EUtilityHelperL.CalcDistanceIn2D(transform.InverseTransformPoint(item.transform.position), randPos) < density)
                    {
                        findOut = false;
                        break;
                    }
                }
            }

            //提醒一下
            if (!findOut)
            {
                Debug.LogWarning("Can not find out optimum random position for field...");
            }

            return(randPos);
        }
コード例 #4
0
ファイル: WorldManager.cs プロジェクト: lykyyy/HalfWorld
        //获取一个随机的城市位置
        private Vector3 GetCityPos()
        {
            Vector3 randPos = new Vector3(0f, 1.01f, 0f);

            //每次随机查找位置可以随机的机会,越大则越可能让世界摆放的相对分散,计算时间也越长
            int chance = EGameConstL.CITY_RAND_CHANCE;
            //是否找到了合适的位置
            bool findOut = false;

            while (chance > 0 && !findOut)
            {
                findOut = true;
                --chance;
                //随机一个位置
                randPos.x = Random.Range(-m_mapSize.x * 0.5f, m_mapSize.x * 0.5f);
                randPos.z = Random.Range(-m_mapSize.y * 0.5f, m_mapSize.y * 0.5f);
                //计算与其他城市间的位置关系
                foreach (var item in m_allCities)
                {
                    //距离有点近呢
                    if (EUtilityHelperL.CalcDistanceIn2D(item.transform.localPosition, randPos) < m_cityDensity)
                    {
                        findOut = false;
                        break;
                    }
                }
            }

            //提醒一下
            if (!findOut)
            {
                Debug.LogWarning("Can not find out optimum random position for city...");
            }

            return(randPos);
        }