/// <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(); }
/// <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); }
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); }
/// <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); }
/// <summary> /// 获取建筑信息 /// </summary> /// <param name="biomeType"></param> /// <returns></returns> public BuildingInfoBean GetBuildingInfo(BuildingTypeEnum buildingType) { return(GetBuildingInfo((int)buildingType)); }