Ejemplo n.º 1
0
 /// <summary>
 /// 查询UI
 /// </summary>
 protected void UIForQuery()
 {
     GUILayout.BeginHorizontal();
     queryBuildingType = EditorUI.GUIEnum <BuildingTypeEnum>("建筑类型", (int)queryBuildingType);
     if (EditorUI.GUIButton("查询建筑", 150))
     {
         listQueryData = serviceForBuildingInfo.QueryDataById((int)queryBuildingType);
     }
     GUILayout.Space(50);
     if (EditorUI.GUIButton("查询所有建筑", 150))
     {
         listQueryData = serviceForBuildingInfo.QueryAllData();
     }
     GUILayout.EndHorizontal();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Определение требования освещенности
        /// </summary>
        public InsValue CalcTimeAndGetRate(List <IIlluminationArea> illums, BuildingTypeEnum buildingType)
        {
            if (illums == null)
            {
                return(InsValue.Empty);
            }
            int               maxTimeContinuosIlum = 0;
            int               curContinuosTime     = 0;
            int               totalTime            = 0;
            string            startTime;
            string            endTime;
            IIlluminationArea prev = null;

            foreach (var item in illums)
            {
                item.Time         = CalcTime(item.AngleStartOnPlane, item.AngleEndOnPlane, out startTime, out endTime);
                curContinuosTime += item.Time;
                totalTime        += item.Time;
                item.TimeStart    = startTime;
                item.TimeEnd      = endTime;

                if (prev != null)
                {
                    var interval = CalcTime(prev.AngleEndOnPlane, item.AngleStartOnPlane, out startTime, out endTime);
                    if (interval >= 10)
                    {
                        curContinuosTime = item.Time;
                    }
                }

                if (curContinuosTime > maxTimeContinuosIlum)
                {
                    maxTimeContinuosIlum = curContinuosTime;
                }

                prev = item;
            }

            InsRequirement req      = DefineInsRequirement(maxTimeContinuosIlum, totalTime, buildingType);
            var            insValue = new InsValue(req, maxTimeContinuosIlum, totalTime);

            return(insValue);
        }
Ejemplo n.º 3
0
        public InsRequirement DefineInsRequirement(int maxTimeContinuosIlum, int totalTime, BuildingTypeEnum buildingType)
        {
            var rate = InsRequirementEnum.A;

            if (buildingType == BuildingTypeEnum.Social)
            {
                if (maxTimeContinuosIlum >= 120)
                {
                    rate = InsRequirementEnum.C;
                }
            }
            else
            {
                // Непрерывная (более 2часов)
                if (maxTimeContinuosIlum >= 120)
                {
                    rate = InsRequirementEnum.C;
                }
                else if (totalTime >= 150 && maxTimeContinuosIlum >= 60)
                {
                    rate = InsRequirementEnum.D;
                }
                else if (maxTimeContinuosIlum >= 90)
                {
                    rate = InsRequirementEnum.B;
                }
                // Чуток не дотягивает до B - от 1ч.22мин. до 1ч.30мин.
                else if (maxTimeContinuosIlum >= 82)
                {
                    rate = InsRequirementEnum.A1;
                }
            }
            var req = InsService.GetInsReqByEnum(rate);

            return(req);
        }
Ejemplo n.º 4
0
    /// <summary>
    /// 增加建筑
    /// </summary>
    /// <param name="addRate"></param>
    /// <param name="randomData"></param>
    /// <param name="startPosition"></param>
    /// <param name="buildingType"></param>
    public static bool AddBuilding(float addRate, uint randomData, Vector3Int startPosition, BuildingTypeEnum buildingType)
    {
        float randomRate;

        if (addRate < 0.00001f)
        {
            //概率小于万分之一的用RandomTools
            int         seed        = WorldCreateHandler.Instance.manager.GetWorldSeed();
            RandomTools randomTools = RandomUtil.GetRandom(seed, startPosition.x, startPosition.y, startPosition.z);
            //生成概率
            randomRate = randomTools.NextFloat();
        }
        else
        {
            randomRate = WorldRandTools.GetValue(startPosition, randomData);
        }
        if (randomRate < addRate)
        {
            BuildingInfoBean buildingInfo = BiomeHandler.Instance.manager.GetBuildingInfo(buildingType);

            List <BuildingBean> listBuildingData = buildingInfo.listBuildingData;

            int randomAngle = WorldRandTools.Range(0, 4, startPosition) * 90;

            for (int i = 0; i < listBuildingData.Count; i++)
            {
                BuildingBean buildingData   = listBuildingData[i];
                Vector3Int   targetPosition = startPosition + buildingData.GetPosition();
                float        createRate     = WorldRandTools.GetValue(targetPosition);

                if (buildingData.randomRate == 0 || createRate < buildingData.randomRate)
                {
                    VectorUtil.GetRotatedPosition(startPosition, targetPosition, new Vector3(0, randomAngle, 0));
                    WorldCreateHandler.Instance.manager.AddUpdateBlock(targetPosition, buildingData.blockId, (BlockDirectionEnum)buildingData.direction);
                }
            }
            return(true);
        }
        return(false);
    }
Ejemplo n.º 5
0
 /// <summary>
 /// 获取建筑信息
 /// </summary>
 /// <param name="biomeType"></param>
 /// <returns></returns>
 public BuildingInfoBean GetBuildingInfo(BuildingTypeEnum buildingType)
 {
     return(GetBuildingInfo((int)buildingType));
 }