/** * 更新整體 */ public void tmpUpdateRoof() { BuildingObj nowBuilding = Buildings[selectFloor]; nowBuilding.roofController.mainRidgeHeightOffset = Random.Range(-3, 3); nowBuilding.ResetRoofFunction(); }
/** * 將建築資料轉換成陣列 * 目前想到三種方式: * 1.用個二維list List<List<float>>,將各樓層與其參數記錄下來 * 2.用個二維list List<List<vector3>>,將其變數最小最大值放在X、Z,而 Y 放參數值 * 3.用個 Dic */ void BuildingDataToArray(List <BuildingObj> Buildings) //*** 方法一:這個廢棄 { List <List <float> > DataList = new List <List <float> >(); for (int iIndex = 0; iIndex < Buildings.Count; iIndex++) { BuildingObj nowFloor = Buildings[iIndex]; List <float> floorDataList = new List <float>(); floorDataList.Add(nowFloor.platformController.platWidth); floorDataList.Add(nowFloor.platformController.platLength); floorDataList.Add(nowFloor.platformController.platHeight); floorDataList.Add(Convert.ToInt32(nowFloor.platformController.isStair)); floorDataList.Add(Convert.ToInt32(nowFloor.platformController.isBorder)); floorDataList.Add(nowFloor.bodyController.eaveColumnHeight); floorDataList.Add(nowFloor.bodyController.goldColumnbayNumber); floorDataList.Add(nowFloor.bodyController.eaveColumnbayNumber); floorDataList.Add(nowFloor.bodyController.unitNumberInBay); floorDataList.Add(nowFloor.bodyController.doorNumber); floorDataList.Add(nowFloor.bodyController.eaveColumnRadius); floorDataList.Add(nowFloor.bodyController.goldColumnRadius); floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isGoldColumn)); floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isFrieze)); floorDataList.Add(Convert.ToInt32(nowFloor.bodyController.isBalustrade)); floorDataList.Add(nowFloor.roofController.allJijaHeight); floorDataList.Add(nowFloor.roofController.mainRidgeHeightOffset); floorDataList.Add(nowFloor.roofController.flyEaveHeightOffset); floorDataList.Add(nowFloor.roofController.roofSurfaceHeightOffset); floorDataList.Add(nowFloor.roofController.eaveCurveHeightOffset); DataList.Add(floorDataList); } }
/** * 檢查主脊 */ public void CheckMainRidge(BuildingObj Ting, int RidgeIndex, Vector3 LTingCenter, Vector3 RTingCenter) { RidgeStruct mainRidge = Ting.roofController.MainRidgeList[RidgeIndex]; //* 要被檢測的主脊 Vector3 planeNorVector = (LTingCenter - RTingCenter).normalized; //* 兩亭中間切平面法向量 Plane MidPlane = new Plane(planeNorVector, (LTingCenter + RTingCenter) / 2); //* 兩亭中間切平面 int tileListCount = mainRidge.tilePosList.Count; //* 暫存主脊瓦片列表總數 for (int iIndex = 0; iIndex < tileListCount; iIndex++) { //* 若不同邊 if (!MidPlane.SameSide(mainRidge.tilePosList[0], Ting.roofTopCenter)) { mainRidge.tilePosList.RemoveAt(0); } else { break; } } if (tileListCount != mainRidge.tilePosList.Count) { foreach (Transform child in mainRidge.body.transform) { if (child.name.Equals("main_ridge_new(Clone)")) { Destroy(child.gameObject); } } Ting.roofController.CreateTileByModelAndRidge(ModelController.Instance.mainRidgeModelStruct, mainRidge); } }
/** * 更新屋頂 */ public void UpdateRoofSliderInfo(Slider slider) { BuildingObj nowBuilding = Buildings[selectFloor]; switch (slider.name) { case RoofMenuHandler.JijaHeightSlider_NAME: nowBuilding.roofController.allJijaHeight = slider.value; nowBuilding.ResetRoofFunction(); break; case RoofMenuHandler.SurfaceSlider_NAME: nowBuilding.roofController.roofSurfaceHeightOffset = slider.value; nowBuilding.ResetRoofFunction(); break; case RoofMenuHandler.EaveSlider_NAME: nowBuilding.roofController.eaveCurveHeightOffset = slider.value; nowBuilding.ResetRoofFunction(); break; case RoofMenuHandler.RidgeSlider_NAME: nowBuilding.roofController.mainRidgeHeightOffset = slider.value; nowBuilding.ResetRoofFunction(); break; case RoofMenuHandler.WingAngleSlider_NAME: nowBuilding.roofController.flyEaveHeightOffset = slider.value; nowBuilding.ResetRoofFunction(); break; default: break; } }
public BuildingObj AddBuilding(Vector2Int ij, BuildingDef buildingDef, QualityEnum quality) { BuildingObj newBuilding = new BuildingObj(ij, buildingDef, quality); ManagerBase.domain.buildings.Add(newBuilding); return(newBuilding); }
/** * 將資料陣列轉換成建築資訊 */ public void ArrayDataToBuildingDataMethod3(List <Dictionary <string, List <DataInfo> > > DataList) { for (int iIndex = 0; iIndex < DataList.Count; iIndex++) { Dictionary <string, List <DataInfo> > dicData = DataList[iIndex]; List <DataInfo> platDataList = dicData[Define.PlatformDataList]; List <DataInfo> bodyDataList = dicData[Define.BodyDataList]; List <DataInfo> roofDataList = dicData[Define.RoofDataList]; BuildingObj nowBuilding = MainController.Instance.Buildings[iIndex]; for (int i = 0; i < platDataList.Count; i++) { Type objType = nowBuilding.platformController.GetType(); try { objType.GetField(platDataList[i].Name).SetValue(nowBuilding.platformController, platDataList[i].Value.y); } catch { print("Error :" + platDataList[i].Name + " have problem"); } } for (int i = 0; i < bodyDataList.Count; i++) { Type objType = nowBuilding.bodyController.GetType(); try { Type tryType = objType.GetField(bodyDataList[i].Name).FieldType; if (tryType == typeof(int)) { objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, (int)bodyDataList[i].Value.y); } else if (tryType == typeof(float)) { objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, bodyDataList[i].Value.y); } else { objType.GetField(bodyDataList[i].Name).SetValue(nowBuilding.bodyController, bodyDataList[i].Value.y); } } catch { print("Error :" + bodyDataList[i].Name + " have problem"); } } for (int i = 0; i < roofDataList.Count; i++) { Type objType = nowBuilding.roofController.GetType(); try { objType.GetField(roofDataList[i].Name).SetValue(nowBuilding.roofController, roofDataList[i].Value.y); } catch { print("Error :" + roofDataList[i].Name + " have problem"); } } } }
/** * UI */ public void OnRoofTypeBtnClick(RoofType roofType) { print("!!!!" + roofType.ToString()); BuildingObj nowBuilding = Buildings[selectFloor]; nowBuilding.roofController.roofType = roofType; nowBuilding.ResetRoofFunction(); }
public ResourceJobObj AddJob(JobDef newJobDef, BuildingObj bldg) { ResourceJobObj newJobObj = new ResourceJobObj(newJobDef, bldg); newJobObj.UpdateBonuses(jobBonusList); jobList.Add(newJobObj); return(newJobObj); }
public void Init(IGetUnitInfo info) { Info = info; UnitType unitType = info.GetUnitType(); Instantiate(UnitTable.Instance.GetUnitModel(unitType).Model, modelRoot); //Movement GetComponent <Movement>().Init(new Vector3(info.GetXPos(), info.GetYPos(), info.GetZPos()), info.GetRotation()); //Animation IGetAnimInfo animInfo = info as IGetAnimInfo; if (animInfo != null) { GetComponent <Animation>().Init(animInfo.GetAnimType(), animInfo.GetSpeedRate(), animInfo.GetPlayTime()); } //HealthBar if (UnitType.Core <= unitType && unitType <= UnitType.Tower) { BuildingObj obj = info as BuildingObj; healthBarInstance = Instantiate(generalHealthBar, GameObject.Find("HealthBars").transform); healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.6f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team); } else if (UnitType.TowerBullet <= unitType && unitType <= UnitType.PressurisedSteam) { ActorObj obj = info as ActorObj; } else if (UnitType.Minion <= unitType && unitType <= UnitType.UltraMonster) { UnitObj obj = info as UnitObj; healthBarInstance = Instantiate(generalHealthBar, GameObject.Find("HealthBars").transform); healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.0f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team); } else { ChampionObj obj = info as ChampionObj; healthBarInstance = Instantiate(championHealthBar, GameObject.Find("HealthBars").transform); SetChampionHealthBarData(obj); } //Minimap if (unitType < UnitType.HatsuneMiku) { dotInstance = Instantiate(generalDot, GameObject.Find("MinimapUI").transform); dotInstance.GetComponent <GeneralDot>().SetData(info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos())); } else { dotInstance = Instantiate(championDot, GameObject.Find("MinimapUI").transform); dotInstance.GetComponent <ChampionDot>().SetData(info.GetUnitType(), info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos())); } }
public ResourceJobObj(JobDef def, BuildingObj bldg) : base(def) { this.buildingObj = bldg; this.buildingGuid = bldg.guid; // Add in Building Bonuses foreach (JobBonus jb in bldg.buildingBonuses) { jb.ApplyBonusToJob(this); } this.iLoc = bldg.ijLocation.x; this.jLoc = bldg.ijLocation.y; }
void StartJobButton(JobDef jobSelected) { thisBuilding = BuildingQueries.ByLocation(ManagerBase.domain.buildings, new Vector2Int(iLoc, jLoc)); // Update the building here ResourceJobObj newJob = jobManager.AddJob(jobSelected, thisBuilding); ResourceQuantityQualityList jobResources = resourceChoiceDropdown.GetCurrentChoices(); newJob.SetResources(jobResources); newJob.StartJob(); newJob.AddWorker(); newJob.AddWorker(); FocusOnTile(iLoc, jLoc); }
public void UpdateData(IGetUnitInfo info) { Info = info; UnitType unitType = info.GetUnitType(); //Movement GetComponent <Movement>().SetPosition(new Vector3(info.GetXPos(), info.GetYPos(), info.GetZPos()), info.GetRotation(), info.GetWarped()); //Animation IGetAnimInfo animInfo = info as IGetAnimInfo; if (animInfo != null) { GetComponent <Animation>().SetAnime(animInfo.GetAnimType(), animInfo.GetSpeedRate(), animInfo.GetPlayTime()); } if (UnitType.Core <= unitType && unitType <= UnitType.Tower) { BuildingObj obj = info as BuildingObj; healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.6f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team); } else if (UnitType.TowerBullet <= unitType && unitType <= UnitType.PressurisedSteam) { ActorObj obj = info as ActorObj; } else if (UnitType.Minion <= unitType && unitType <= UnitType.UltraMonster) { UnitObj obj = info as UnitObj; healthBarInstance.GetComponent <GeneralHealthBar>().SetData(new Vector3(transform.position.x, 2.0f, transform.position.z), obj.MaxHP, obj.CurHP, obj.Team); } else { ChampionObj obj = info as ChampionObj; SetChampionHealthBarData(obj); } //Minimap if (unitType < UnitType.HatsuneMiku) { dotInstance.GetComponent <GeneralDot>().SetData(info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos())); } else { dotInstance.GetComponent <ChampionDot>().SetData(info.GetUnitType(), info.GetTeam(), new Vector2(info.GetXPos(), info.GetZPos())); } //Victory if (unitType == UnitType.Core && info.GetCurHP() <= 0) { GameObject.Find("VictoryUI").GetComponent <VictoryUI>().SetVictory(info.GetTeam()); } }
public void UpdateALL(List <Dictionary <string, List <DataInfo> > > DataList) { DataCenter.Instance.ArrayDataToBuildingDataMethod3(DataList); for (int iIndex = 0; iIndex < Buildings.Count; iIndex++) { BuildingObj nowBuilding = Buildings[iIndex]; PlatformController platform = nowBuilding.platformController; //nowBuilding.ResetPlatformFunction(platform.platLength, platform.platWidth, platform.platHeight, platform.isStair); nowBuilding.ResetBodyFunction(); nowBuilding.ResetRoofFunction(); } }
public void UpdateBodyToggleInfo(Toggle toggle) { BuildingObj nowBuilding = Buildings[selectFloor]; CombineTing CT = nowBuilding.transform.GetComponentInParent <CombineTing>(); switch (toggle.name) { case BodyMenuHandler.GoldColToggle_NAME: if (CT) { CT.ResetGoldColumn(toggle.isOn); CT.ResetWindowAndDoorNum(); } else { nowBuilding.ResetGoldColumn(toggle.isOn); nowBuilding.ResetWindowAndDoorNum(); } break; case BodyMenuHandler.FriezeToggle_NAME: if (CT) { CT.ResetFrieze(toggle.isOn); } else { nowBuilding.ResetFrieze(toggle.isOn); } break; case BodyMenuHandler.BalustradeToggle_NAME: if (CT) { CT.ResetBalustrade(toggle.isOn); } else { nowBuilding.ResetBalustrade(toggle.isOn); } break; default: print("!!! Can't Find Toggle Name !!!"); break; } }
/** * 初始化基座 */ public void InitFunction(BuildingObj buildingObj, float platformFrontWidth, float platformFrontLength, float platformHeight, bool isStair, float rotateAngle = 0) { this.buildingObj = buildingObj; this.platWidth = platformFrontWidth; this.platLength = platformFrontLength; this.platHeight = platformHeight; this.isStair = isStair; stairHeight = platformHeight; this.parentObj = buildingObj.platform; this.sides = (int)buildingObj.sides; this.entraneIndexList = buildingObj.entraneIndexList; //*********************************************************************** platFormStruct = CreatePlatform(buildingObj.platform, (int)buildingObj.sides, buildingObj.platformCenter, rotateAngle); StartCreateBorder(isBorder); StartCreateStair(isStair); }
/** * 檢查兩個亭是否需要合併 (只要有另一亭的一個邊點落在亭內) */ public bool isNeedCombine(BuildingObj LTing, BuildingObj RTing) { List <Vector3> newLTingColPos = LTing.bodyController.GetColumnStructBottomPosList(LTing.bodyController.eaveCornerColumnList); List <Vector3> newRTingColPos = RTing.bodyController.GetColumnStructBottomPosList(RTing.bodyController.eaveCornerColumnList); /** * 檢查兩個亭是否需要合併(檢查向量方向) */ int outPointCount2Point = 0; int outPointCount2Center = 0; for (int j = 0; j < newRTingColPos.Count; j++) { Vector3 lastCross2Point = Vector3.zero; Vector3 lastCross2Center = Vector3.zero; for (int i = 0; i < newLTingColPos.Count; i++) //v和所有的e 外積方向相同 代表在正規凸多邊形內部 { Vector3 e = newLTingColPos[(i + 1) % newLTingColPos.Count] - newLTingColPos[i]; Vector3 v = newRTingColPos[j] - newLTingColPos[i]; Vector3 newCross = Vector3.Cross(e, v).normalized; if ((Vector3.Dot(newCross, lastCross2Point) <= 0) && (lastCross2Point != Vector3.zero)) //j點落在亭外 { outPointCount2Point++; break; } lastCross2Point = newCross; } //邊界中心點 for (int i = 0; i < newLTingColPos.Count; i++) { Vector3 e = newLTingColPos[(i + 1) % newLTingColPos.Count] - newLTingColPos[i]; Vector3 v = (newRTingColPos[(j + 1) % newRTingColPos.Count] + newRTingColPos[j]) / 2 - newLTingColPos[i]; Vector3 newCross = Vector3.Cross(e, v).normalized; if ((Vector3.Dot(newCross, lastCross2Center)) <= 0 && (lastCross2Center != Vector3.zero)) //j點落在亭外 { outPointCount2Center++; break; } lastCross2Center = newCross; } } return(!(outPointCount2Point == newRTingColPos.Count) || !(outPointCount2Center == newRTingColPos.Count)); }
/** * 初始化 */ public void InitFunction(BuildingObj buildingObj, float eaveColumnHeight, float goldColumnHeight) { //初始值****************************************************************************** this.buildingObj = buildingObj; this.eaveColumnHeight = eaveColumnHeight; this.goldColumnHeight = goldColumnHeight; columnFundationHeight = eaveColumnHeight * 0.05f; //************************************************************************************** switch (bodyType) { #region Chuan_Dou case BodyType.Chuan_Dou: if (buildingObj.sides == MainController.FormFactorSideType.FourSide) { CreateBody(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, bodyWidth, bodyLength, eaveColumnHeight, buildingObj.bodyCenter); } else { CreateBody(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, buildingObj.platformController.platFormStruct.topPointPosList, bodyWidth, eaveColumnHeight, buildingObj.bodyCenter); } if (goldColumnList.Count > 0) { CreateRingWall(buildingObj.body, ModelController.Instance.goldColumnModelStruct, GetColumnStructBottomPosList(goldColumnList), goldColumnRadius, unitNumberInBay, goldColumnbayNumber, doorNumber); } if (eaveColumnList.Count > 0 && isFrieze) { CreateRingFrieze(buildingObj.body, ModelController.Instance.eaveColumnModelStruct, GetColumnStructBottomPosList(eaveColumnList), eaveColumnRadius, 0.7f * eaveColumnHeight); } if (eaveColumnList.Count > 0 && isBalustrade) { CreateRingBalustrade(buildingObj.body, (int)buildingObj.sides, buildingObj.entraneIndexList, ModelController.Instance.eaveColumnModelStruct, GetColumnStructBottomPosList(eaveColumnList), eaveColumnRadius, 0.1f * eaveColumnHeight); } break; #endregion } } /**
public void CheckSurface(BuildingObj Ting, int SurfaceIndex, Vector3 LTingCenter, Vector3 RTingCenter) { RoofSurfaceStruct surface = Ting.roofController.SurfaceList[SurfaceIndex]; Plane midPlane = new Plane((LTingCenter - RTingCenter).normalized, (LTingCenter + RTingCenter) / 2); //* 兩亭中間切平面 //** 依序檢查每一個表面脊 (左、中、右分開做) for (int iIndex = 0; iIndex < surface.leftRoofSurfaceTileRidgeList.Count; iIndex++) { RoofSurfaceRidgeStruct surfaceRidge = surface.leftRoofSurfaceTileRidgeList[iIndex]; RemoveSurfacePosByPlane(midPlane, surfaceRidge, Ting.roofTopCenter); } if (surface.midRoofSurfaceTileRidge != null) { RemoveSurfacePosByPlane(midPlane, surface.midRoofSurfaceTileRidge, Ting.roofTopCenter); } for (int iIndex = 0; iIndex < surface.rightRoofSurfaceTileRidgeList.Count; iIndex++) { RoofSurfaceRidgeStruct surfaceRidge = surface.rightRoofSurfaceTileRidgeList[iIndex]; RemoveSurfacePosByPlane(midPlane, surfaceRidge, Ting.roofTopCenter); } //** }
public void FocusOnTile(int i, int j) { // Set Location iLoc = i; jLoc = j; // Delete buttons ClearUIObjects(); // Surface Panel if (SetSurfacePanel(i, j)) { thisBuilding = BuildingQueries.ByLocation(ManagerBase.domain.buildings, new Vector2Int(iLoc, jLoc)); // Get the building here } // Ground Panel SetGroundPanel(i, j); // Underground Panel SetUndergroundPanel(i, j); // Draw Jobs up from the bottom DrawActiveJobs(i, j); }
public void UpdatePlameToggleInfo(Toggle toggle) { PlatformController platform = Buildings[selectFloor].platformController; BuildingObj nowBuilding = Buildings[selectFloor]; CombineTing CT = nowBuilding.transform.GetComponentInParent <CombineTing>(); switch (toggle.name) { case PlamformMenuHandler.StairToggle_NAME: if (CT) { CT.platformController.StartCreateStair(toggle.isOn); } else { nowBuilding.platformController.StartCreateStair(toggle.isOn); } break; case PlamformMenuHandler.BorderToggle_NAME: if (CT) { CT.platformController.StartCreateBorder(toggle.isOn); } else { nowBuilding.platformController.StartCreateBorder(toggle.isOn); } break; default: print("!!! Can't Find Toggle Name !!!"); break; } }
/** * 每個樓層皆用一個Dic ,內部分為屋頂屋身基座三個部分(皆為List),最後再放入List中 */ public List <Dictionary <string, List <DataInfo> > > BuildingDataToArrayMethod3(List <BuildingObj> Buildings) //*** 方法三:目前 { List <Dictionary <string, List <DataInfo> > > DataList = new List <Dictionary <string, List <DataInfo> > >(); for (int iIndex = 0; iIndex < Buildings.Count; iIndex++) { BuildingObj nowFloor = Buildings[iIndex]; Dictionary <string, List <DataInfo> > dicData = new Dictionary <string, List <DataInfo> >(); List <DataInfo> roofDataList = new List <DataInfo>(); List <DataInfo> bodyDataList = new List <DataInfo>(); List <DataInfo> platDataList = new List <DataInfo>(); #region PLATFORM_PARAMETER platDataList.Add(new DataInfo("platWidth", new Vector3(Define.Instance.getSetData("platWidth").Value.x, nowFloor.platformController.platWidth, Define.Instance.getSetData("platWidth").Value.z), Define.Instance.getSetData("platWidth").UIName)); platDataList.Add(new DataInfo("platLength", new Vector3(Define.Instance.getSetData("platLength").Value.x, nowFloor.platformController.platLength, Define.Instance.getSetData("platLength").Value.z), Define.Instance.getSetData("platLength").UIName)); platDataList.Add(new DataInfo("platHeight", new Vector3(Define.Instance.getSetData("platHeight").Value.x, nowFloor.platformController.platHeight, Define.Instance.getSetData("platHeight").Value.z), Define.Instance.getSetData("platHeight").UIName)); platDataList.Add(new DataInfo("isStair", new Vector3(Define.Instance.getSetData("isStair").Value.x, Convert.ToInt32(nowFloor.platformController.isStair), Define.Instance.getSetData("isStair").Value.z), Define.Instance.getSetData("isStair").UIName)); platDataList.Add(new DataInfo("isBorder", new Vector3(Define.Instance.getSetData("isBorder").Value.x, Convert.ToInt32(nowFloor.platformController.isBorder), Define.Instance.getSetData("isBorder").Value.z), Define.Instance.getSetData("isBorder").UIName)); #endregion #region BODY_PARAMETER bodyDataList.Add(new DataInfo("goldColumnbayNumber", new Vector3(Define.Instance.getSetData("goldColumnbayNumber").Value.x, nowFloor.bodyController.goldColumnbayNumber, Define.Instance.getSetData("goldColumnbayNumber").Value.z), Define.Instance.getSetData("goldColumnbayNumber").UIName)); //bodyDataList.Add(new DataInfo("eaveColumnbayNumber", // new Vector3(0, nowFloor.bodyController.eaveColumnbayNumber, 10))); bodyDataList.Add(new DataInfo("unitNumberInBay", new Vector3(Define.Instance.getSetData("unitNumberInBay").Value.x, nowFloor.bodyController.unitNumberInBay, Define.Instance.getSetData("unitNumberInBay").Value.z), Define.Instance.getSetData("unitNumberInBay").UIName)); //門的最大數量為(金柱數量的一半加一) bodyDataList.Add(new DataInfo("doorNumber", new Vector3(Define.Instance.getSetData("doorNumber").Value.x, nowFloor.bodyController.doorNumber, Define.Instance.getSetData("doorNumber").Value.y / 2 + 1), Define.Instance.getSetData("doorNumber").UIName)); //bodyDataList.Add(new DataInfo("eaveColumnRadius", // new Vector3(0, nowFloor.bodyController.eaveColumnRadius, 10))); //bodyDataList.Add(new DataInfo("goldColumnRadius", // new Vector3(0, nowFloor.bodyController.goldColumnRadius, 10))); bodyDataList.Add(new DataInfo("eaveColRadInflate", new Vector3(Define.Instance.getSetData("eaveColRadInflate").Value.x, nowFloor.bodyController.eaveColRadInflate, Define.Instance.getSetData("eaveColRadInflate").Value.z), Define.Instance.getSetData("eaveColRadInflate").UIName)); bodyDataList.Add(new DataInfo("eaveColumnHeight", new Vector3(Define.Instance.getSetData("eaveColumnHeight").Value.x, nowFloor.bodyController.eaveColumnHeight, Define.Instance.getSetData("eaveColumnHeight").Value.z), Define.Instance.getSetData("eaveColumnHeight").UIName)); //bodyDataList.Add(new DataInfo("eaveColTopOffset", // new Vector3(0, nowFloor.bodyController.eaveColTopOffset, 8))); //bodyDataList.Add(new DataInfo("eaveColBotOffset", // new Vector3(0, nowFloor.bodyController.eaveColBotOffset, 8))); bodyDataList.Add(new DataInfo("isGoldColumn", new Vector3(Define.Instance.getSetData("isGoldColumn").Value.x, Convert.ToInt32(nowFloor.bodyController.isGoldColumn), Define.Instance.getSetData("isGoldColumn").Value.z), Define.Instance.getSetData("isGoldColumn").UIName)); bodyDataList.Add(new DataInfo("isFrieze", new Vector3(Define.Instance.getSetData("isFrieze").Value.x, Convert.ToInt32(nowFloor.bodyController.isFrieze), Define.Instance.getSetData("isFrieze").Value.z), Define.Instance.getSetData("isFrieze").UIName)); bodyDataList.Add(new DataInfo("isBalustrade", new Vector3(Define.Instance.getSetData("isBalustrade").Value.x, Convert.ToInt32(nowFloor.bodyController.isBalustrade), Define.Instance.getSetData("isBalustrade").Value.z), Define.Instance.getSetData("isBalustrade").UIName)); #endregion #region ROOF_PARAMETER roofDataList.Add(new DataInfo("allJijaHeight", new Vector3(Define.Instance.getSetData("allJijaHeight").Value.x, nowFloor.roofController.allJijaHeight, Define.Instance.getSetData("allJijaHeight").Value.z), Define.Instance.getSetData("allJijaHeight").UIName)); roofDataList.Add(new DataInfo("mainRidgeHeightOffset", new Vector3(Define.Instance.getSetData("mainRidgeHeightOffset").Value.x, nowFloor.roofController.mainRidgeHeightOffset, Define.Instance.getSetData("mainRidgeHeightOffset").Value.z), Define.Instance.getSetData("mainRidgeHeightOffset").UIName)); roofDataList.Add(new DataInfo("flyEaveHeightOffset", new Vector3(Define.Instance.getSetData("flyEaveHeightOffset").Value.x, nowFloor.roofController.flyEaveHeightOffset, Define.Instance.getSetData("flyEaveHeightOffset").Value.z), Define.Instance.getSetData("flyEaveHeightOffset").UIName)); roofDataList.Add(new DataInfo("eaveCurveHeightOffset", new Vector3(Define.Instance.getSetData("eaveCurveHeightOffset").Value.x, nowFloor.roofController.eaveCurveHeightOffset, Define.Instance.getSetData("eaveCurveHeightOffset").Value.z), Define.Instance.getSetData("eaveCurveHeightOffset").UIName)); roofDataList.Add(new DataInfo("roofSurfaceHeightOffset", new Vector3(Define.Instance.getSetData("roofSurfaceHeightOffset").Value.x, nowFloor.roofController.roofSurfaceHeightOffset, Define.Instance.getSetData("roofSurfaceHeightOffset").Value.z), Define.Instance.getSetData("roofSurfaceHeightOffset").UIName)); #endregion dicData.Add(Define.PlatformDataList, platDataList); dicData.Add(Define.BodyDataList, bodyDataList); dicData.Add(Define.RoofDataList, roofDataList); DataList.Add(dicData); } return(DataList); }
/** * 檢查屋面瓦片 */ public void CheckAllSurface() { for (int buildingIndex = 0; buildingIndex < combinedInfos.Count; buildingIndex++) { BuildingObj LTing = BuildingsList[buildingIndex]; Vector3 LTingCenter = LTing.platformCenter; int LTingSides = LTing.bodyController.eaveCornerColumnList.Count; foreach (KeyValuePair <int, List <int> > kvp in combinedInfos[buildingIndex].Info) { int key = kvp.Key; List <int> value = kvp.Value; BuildingObj RTing = BuildingsList[key]; Vector3 RTingCenter = RTing.platformCenter; int RTingSides = RTing.bodyController.eaveCornerColumnList.Count; switch (LTing.roofController.roofType) { case MainController.RoofType.Zan_Jian_Ding: case MainController.RoofType.Lu_Ding: case MainController.RoofType.Wu_Dian_Ding: for (int i = 0; i < value.Count; i++) { //下一亭交buildingIndex的號碼 int intersectionColIndex = FindOtherSideCloserIndex_Copy(combinedInfos[key].Info[buildingIndex], BuildingsList[key].bodyController.GetColumnStructBottomPosList(BuildingsList[key].bodyController.eaveCornerColumnList), BuildingsList[buildingIndex].bodyController.GetColumnStructBottomPosList(BuildingsList[buildingIndex].bodyController.eaveCornerColumnList)[value[i]]); CheckMainRidge(LTing, value[i], LTingCenter, RTingCenter); CheckMainRidge(RTing, intersectionColIndex, LTingCenter, RTingCenter); CheckSurface(LTing, (value[i] - 1 + LTingSides) % LTingSides, LTingCenter, RTingCenter); CheckSurface(LTing, value[i], LTingCenter, RTingCenter); CheckSurface(RTing, (intersectionColIndex - 1 + RTingSides) % RTingSides, LTingCenter, RTingCenter); CheckSurface(RTing, intersectionColIndex, LTingCenter, RTingCenter); } break; case MainController.RoofType.Shya_Shan_Ding: for (int i = 0; i < value.Count; i++) { //下一亭交buildingIndex的號碼 int intersectionColIndex = FindOtherSideCloserIndex_Copy(combinedInfos[key].Info[buildingIndex], BuildingsList[key].bodyController.GetColumnStructBottomPosList(BuildingsList[key].bodyController.eaveCornerColumnList), BuildingsList[buildingIndex].bodyController.GetColumnStructBottomPosList(BuildingsList[buildingIndex].bodyController.eaveCornerColumnList)[value[i]]); CheckMainRidge(LTing, value[i] * 2, LTingCenter, RTingCenter); CheckMainRidge(LTing, value[i] * 2 + 1, LTingCenter, RTingCenter); CheckMainRidge(RTing, intersectionColIndex * 2, LTingCenter, RTingCenter); CheckMainRidge(RTing, intersectionColIndex * 2 + 1, LTingCenter, RTingCenter); CheckSurface(LTing, (value[i] - 1 + LTingSides) % LTingSides, LTingCenter, RTingCenter); CheckSurface(LTing, value[i], LTingCenter, RTingCenter); CheckSurface(RTing, (intersectionColIndex - 1 + RTingSides) % RTingSides, LTingCenter, RTingCenter); CheckSurface(RTing, intersectionColIndex, LTingCenter, RTingCenter); } break; case MainController.RoofType.Dome: CheckSurface(LTing, 0, LTingCenter, RTingCenter); CheckSurface(RTing, 0, LTingCenter, RTingCenter); break; } } } }
/** * 更新基座 */ public void UpdatePlameSliderInfo(Slider slider) { PlatformController platform = Buildings[selectFloor].platformController; BuildingObj nowBuilding = Buildings[selectFloor]; CombineTing CT = nowBuilding.transform.GetComponentInParent <CombineTing>(); switch (slider.name) { case PlamformMenuHandler.WidthSlider_NAME: if (CT) { CT.platformController.platWidth = slider.value; CT.UpdatePlatformFunction(); } else { nowBuilding.ResetPlatformFunction(platform.platLength, slider.value, platform.platHeight, platform.isStair); } break; case PlamformMenuHandler.DepthSlider_NAME: nowBuilding.ResetPlatformFunction(slider.value, platform.platWidth, platform.platHeight, platform.isStair); break; case PlamformMenuHandler.HeightSlider_NAME: if (CT) { float moveOffset = (slider.value - CT.platformController.platHeight) / 2; CT.MoveBuildingBody(new Vector3(0, moveOffset, 0)); for (int i = 0; i < CT.BuildingsList.Count; i++) { CT.BuildingsList[i].MoveBuildingRoof(new Vector3(0, moveOffset, 0)); } CT.platformController.platHeight = slider.value; CT.UpdatePlatformFunction(); } else { float moveOffset = (slider.value - nowBuilding.platformController.platHeight) / 2; nowBuilding.MoveBuildingBody(new Vector3(0, moveOffset, 0)); nowBuilding.MoveBuildingRoof(new Vector3(0, moveOffset, 0)); nowBuilding.ResetPlatformFunction(platform.platLength, platform.platWidth, slider.value, platform.isStair); } break; case PlamformMenuHandler.StairNumSlider_NAME: break; case PlamformMenuHandler.StairLengthSlider_NAME: nowBuilding.ResetStair(slider.value, platform.stairWidth); //***參數未設定好 break; case PlamformMenuHandler.StairWidthSlider_NAME: nowBuilding.ResetStair(platform.stairLength, slider.value); //***參數未設定好 break; default: print("!!! Can't Find Slider Name !!!"); break; } }
public void UpdateRoofOnSliderPointUp(Slider slider) { BuildingObj nowBuilding = Buildings[selectFloor]; nowBuilding.ResetRoofFunction(); }
public List <BuildingObj> AddBuilding(Vector3 pos, float rotateAngle) { List <BuildingObj> buildings = new List <BuildingObj>(); //檢查是否為組合亭 if (AllBuildings.Count > 0) { List <BuildingObj> selectBuildings = MainController.Instance.AllBuildings[selectBuildingsIndex]; for (int i = 0; i < selectBuildings.Count; i++) { GameObject building = new GameObject("building" + buildingCount++); building.gameObject.AddComponent <BuildingObj>(); Vector3 revisePos = pos; revisePos.y = selectBuildings[i].platformCenter.y; building.GetComponent <BuildingObj>().InitFunction(building, revisePos, sides, selectBuildings[i].platformController.platLength, selectBuildings[i].platformController.platWidth, selectBuildings[i].platformController.platHeight, selectBuildings[i].bodyController.eaveColumnHeight, selectBuildings[i].bodyController.goldColumnHeight, selectBuildings[i].roofController.mainRidgeHeightOffset, selectBuildings[i].roofController.allJijaHeight, Vector3ListAddVector3(selectBuildings[i].roofController.topFloorBorderList, pos), (int)selectBuildings[i].roofController.roofType, selectBuildings[i].platformController.isStair, rotateAngle); buildings.Add(building.GetComponent <BuildingObj>()); BuildingObj LTing = building.GetComponent <BuildingObj>(); //檢查與其他組合亭有無需要合併 for (int j = AllBuildings.Count - 1; j >= 0; j--) { BuildingObj RTing = AllBuildings[j][i]; if (isNeedCombine(LTing, RTing)) { GameObject combinTing = new GameObject("CombinTing"); CombineTing combineTingCtrl = combinTing.AddComponent <CombineTing>(); List <BuildingObj> buildingsList = new List <BuildingObj>(); if (RTing.transform.GetComponentInParent <CombineTing>()) { Debug.Log("Already Has CombineTingoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"); Destroy(combinTing); combinTing = RTing.transform.GetComponentInParent <CombineTing>().gameObject; combineTingCtrl = RTing.transform.GetComponentInParent <CombineTing>(); LTing.transform.parent = combinTing.transform; buildingsList.AddRange(combineTingCtrl.BuildingsList); Destroy(combineTingCtrl.body.gameObject); Destroy(combineTingCtrl.platform.gameObject); } else { LTing.transform.parent = combinTing.transform; RTing.transform.parent = combinTing.transform; buildingsList.Add(RTing); } buildingsList.Add(LTing); combineTingCtrl.InitFunction(buildingsList.ToArray()); AllCT.Add(combineTingCtrl); break; } } } } else { Debug.Log("FirstBuilding"); GameObject building = new GameObject("building" + buildingCount++); building.gameObject.AddComponent <BuildingObj>(); building.GetComponent <BuildingObj>().InitFunction(building, pos, sides, initPlatformLength_DownStair, initPlatformWidth_DownStair, initPlatformHeight_DownStair, initEaveColumnHeight, initGoldColumnHeight, 0, initAllJijaHeight_TopStair, null, (int)roofType, false, rotateAngle); buildings.Add(building.GetComponent <BuildingObj>()); Debug.Log("----------------------------------- ----------------------------------- -----------------------------------"); Debug.Log("AllBuildings.Count : " + AllBuildings.Count); } AllBuildings.Add(buildings); return(buildings); }
//檢查亭的交界情況 List <CombinedInfo> CheckConnectedInfo(List <BuildingObj> BuildingsList) { List <CombinedInfo> combinedInfos = new List <CombinedInfo>(); for (int i = 0; i < BuildingsList.Count; i++) { CombinedInfo combinedInfo = new CombinedInfo(); combinedInfos.Add(combinedInfo); } for (int i = 0; i < BuildingsList.Count; i++) { Dictionary <int, List <int> > info = new Dictionary <int, List <int> >(); BuildingObj LTing = BuildingsList[i]; for (int j = BuildingsList.Count - 1; j >= 0; j--) { if (i == j) { continue; } BuildingObj RTing = BuildingsList[j]; if (isNeedCombine(LTing, RTing)) { //Debug.Log(i + "&" + j + " Nedd to be combined"); //檐柱 List <Vector3> LEaveColPosList = LTing.bodyController.GetColumnStructBottomPosList(LTing.bodyController.eaveCornerColumnList); List <Vector3> REaveColPosList = RTing.bodyController.GetColumnStructBottomPosList(RTing.bodyController.eaveCornerColumnList); //中心點位置 Vector3 LTingCenter = LTing.platformCenter; Vector3 RTingCenter = RTing.platformCenter; //交平面 Plane midPlan = new Plane((LTingCenter - RTingCenter).normalized, (LTingCenter + RTingCenter) / 2); //i亭交j亭的交界點 List <int> LIntersectionIndexList = new List <int>(FindOtherSideIndex(LEaveColPosList, RTingCenter, midPlan)); //與j亭交LIntersectionIndexList info.Add(j, LIntersectionIndexList); } } combinedInfos[i].Info = info; } /** * 紀錄所有柱子個別交了多少亭 */ for (int i = 0; i < BuildingsList.Count; i++) { List <int> colStates = new List <int>(); for (int j = 0; j < BuildingsList[i].bodyController.eaveCornerColumnList.Count; j++) { colStates.Add(0); } foreach (KeyValuePair <int, List <int> > kvp in combinedInfos[i].Info) { List <int> value = kvp.Value; for (int j = 0; j < value.Count; j++) { colStates[value[j]]++; } } combinedInfos[i].colStates = colStates; //檢查是否有cycle for (int j = 0; j < combinedInfos[i].colStates.Count; j++) { if (combinedInfos[i].colStates[j] == 3) //為內部點 { combinedInfos[i].count++; combinedInfos[i].startCount++; } } } for (int i = 0; i < combinedInfos.Count; i++) { combinedInfos[i].init_Count = combinedInfos[i].count; } return(combinedInfos); }
/** * 更新屋身 */ public void UpdateBodySliderInfo(Slider slider) { BuildingObj nowBuilding = Buildings[selectFloor]; CombineTing CT = nowBuilding.transform.GetComponentInParent <CombineTing>(); switch (slider.name) { case BodyMenuHandler.ColumeHeightSlider_NAME: if (CT) { float moveOffset = slider.value - CT.bodyController.eaveColumnHeight; for (int i = 0; i < CT.BuildingsList.Count; i++) { CT.BuildingsList[i].MoveBuildingRoof(new Vector3(0, moveOffset, 0)); } CT.bodyController.eaveColumnHeight = slider.value; CT.bodyController.goldColumnHeight = slider.value; CT.UpdateBodyFunction(); } else { float moveOffset = slider.value - nowBuilding.bodyController.eaveColumnHeight; nowBuilding.bodyController.eaveColumnHeight = slider.value; nowBuilding.bodyController.goldColumnHeight = slider.value; nowBuilding.MoveBuildingRoof(new Vector3(0, moveOffset, 0)); nowBuilding.ResetBodyFunction(); } break; case BodyMenuHandler.GoldColNumSlider_NAME: if (CT) { CT.bodyController.goldColumnbayNumber = (int)slider.value; CT.UpdateBodyFunction(); } else { nowBuilding.bodyController.goldColumnbayNumber = (int)slider.value; nowBuilding.DeleteGoldColumn(); nowBuilding.ResetGoldColumn(true); nowBuilding.ResetWindowAndDoorNum(); } break; case BodyMenuHandler.UnitInBay_NAME: if (CT) { CT.bodyController.unitNumberInBay = (int)slider.value; CT.UpdateBodyFunction(); } else { nowBuilding.bodyController.unitNumberInBay = (int)slider.value; nowBuilding.ResetWindowAndDoorNum(); } break; case BodyMenuHandler.DoorNumSlider_NAME: if (CT) { CT.bodyController.doorNumber = (int)slider.value; CT.UpdateBodyFunction(); } else { nowBuilding.bodyController.doorNumber = (int)slider.value; nowBuilding.ResetWindowAndDoorNum(); } break; case BodyMenuHandler.BodyWidthSlider_NAME: if (CT) { nowBuilding.bodyController.bodyWidth = slider.value; nowBuilding.ResetBodyFunction(); CT.UpdateBodyFunction(); CT.UpdatePlatformFunction(); } else { nowBuilding.bodyController.bodyWidth = slider.value; nowBuilding.ResetBodyFunction(); } break; case BodyMenuHandler.BodyLengthSlider_NAME: if (CT) { nowBuilding.bodyController.bodyLength = slider.value; nowBuilding.ResetBodyFunction(); CT.UpdateBodyFunction(); CT.UpdatePlatformFunction(); } else { nowBuilding.bodyController.bodyLength = slider.value; nowBuilding.ResetBodyFunction(); } break; } }
public void Clear() { masterBuildingObj = null; previewBuildingHex = null; }