public Ship GetShip() { //var builder = new ShipBuilder(Owner, Battle, x, endx, y, endy, isHorizontal); IShipBuilder shipabstractbuilder = new ShipBuilder(Owner, Battle, x, endx, y, endy, isHorizontal); AbstractShipBuilder builder = new AbstractShipBuilder(shipabstractbuilder); ShipChain buildReset = new BuildReset(builder); ShipChain buildBase = new BuildBase(builder); ShipChain buildCoordinates = new BuildCoordinates(builder); ShipChain buildSize = new BuildSize(builder); buildReset.SetNextChain(buildBase); buildBase.SetNextChain(buildCoordinates); buildCoordinates.SetNextChain(buildSize); buildSize.SetNextChain(null); ShipChain mainBuild = buildReset; mainBuild.Build(); System.Diagnostics.Debug.WriteLine("Chain of responsibility: shipbuilding chain executed"); //builder.BuildBase(); //builder.BuildCoordinates(); //builder.BuildSize(); return(builder.GetShip()); }
void BuildClick(BuildBase build) { m_CurentBuild = build; m_NameText.text = build.Name; m_DesText.text = build.Des; m_CoinText.text = build.Coin.ToString(); //更新可以随机的英雄图标 foreach (GameObject go in m_HeroIconList) { ObjectManager.Instance.ReleaseObject(go); } m_HeroIconList.Clear(); List <HeroBase> heroBases = HeroManager.Instance.GetRaceHeroList(build.RaceType); foreach (HeroBase hero in heroBases) { GameObject heroGo = ObjectManager.Instance.InstantiateObject(Consts.UI_GridItem); heroGo.transform.SetParent(m_HeroGrid); heroGo.GetComponent <GridItem>().Init(Tools.LoadSprite(hero.IconPath), () => { uiManager.PushPanel(UIPanelType.HeroInfoPanel, paramList: new object[] { hero }); }); m_HeroIconList.Add(heroGo); } }
void RaceBtnClick(GameObject itemGo, BuildBase build) { ImgHide(m_RaceHide, itemGo.transform); if (m_HeroHide != null) { m_HeroHide.gameObject.SetActive(false); } ChangeUI(build.Name, build.Des, Tools.LoadSprite(build.IconPath)); //更新英雄 foreach (GameObject go in m_HeroUIList) { ObjectManager.Instance.ReleaseObject(go); } m_HeroUIList.Clear(); List <HeroBase> heroList = HeroManager.Instance.GetRaceHeroList(build.RaceType); foreach (HeroBase hero in heroList) { GameObject gridItem = ObjectManager.Instance.InstantiateObject(Consts.UI_GridItem); gridItem.transform.SetParent(m_HeroGrid); gridItem.GetComponent <GridItem>().Init(Tools.LoadSprite(hero.IconPath), () => { HeroBtnClick(gridItem, hero); }); m_HeroUIList.Add(gridItem); } float width = heroList.Count * 40 > ((RectTransform)m_HeroGrid.parent).rect.width ? heroList.Count * 40 : ((RectTransform)m_HeroGrid.parent).rect.width; m_HeroGrid.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width); //更新升级项 ChangeEvolutionItem(m_RaceEvoluDict[build.RaceType]); }
private void StepOut() { if (this.stack.Count <= 1) { return; } BuildBase previousBuild = this.stack.Pop(); this.UpdateBreadcrumb(); this.UpdateBuildTimelineListBox(this.stack.Peek()); BuildTimeline previousBt = this.BuildTimelineListBox.Items.OfType <BuildTimeline>().SingleOrDefault(x => x.Build == previousBuild); if (previousBt == null) { previousBt = this.BuildTimelineListBox.Items.OfType <BuildTimeline>().FirstOrDefault(); } this.BuildTimelineListBox.SelectedItem = previousBt; this.BuildTimelineListBox.UpdateLayout(); ListBoxItem listBoxItem = (ListBoxItem)this.BuildTimelineListBox.ItemContainerGenerator.ContainerFromItem(previousBt); listBoxItem.Focus(); }
public void DA_corrected_matrix_2_row_data() { initData_classdata_4_rows_2_class(); //double[] meanMatrix = // new double[] { 60, 107.5 }; BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] meanMatrix = (double[])obj.Invoke( "getDataSetMeanMatrix", new object[] { }); List <double[][]> correctedData = (List <double[][]>)obj.Invoke("getCorrectedDataMatrix", new object[] { _classInputMatrix, meanMatrix }); double[][] tmp = correctedData[0]; Assert.IsTrue(tmp[0][0] == 40); Assert.IsTrue(tmp[0][1] == 0); Assert.IsTrue(tmp[1][0] == 92.5); Assert.IsTrue(tmp[1][1] == -27.5); tmp = correctedData[1]; Assert.IsTrue(tmp[0][0] == -30); Assert.IsTrue(tmp[0][1] == -10); Assert.IsTrue(tmp[1][0] == -15.5); Assert.IsTrue(tmp[1][1] == -49.5); }
public void BuildInteraction(BuildBase buildBase) { if (buildBase.PercenTime < 1) { return; } if (buildBase is HospitalBuild) { buildBase.Interact(new System.Action <int>((int x) => { healthSystem.health += x; })); } else if (buildBase is WoodBuild) { buildBase.Interact(new System.Action <int>((int y) => { allwoodCount += y; charackterShoulderInventory.SyncItem(allwoodCount); })); } else if (buildBase is EnternewWorldBuild) { buildBase.Interact(); } }
/// <summary> /// 移除建筑物 /// </summary> /// <param name="buildBase"></param> public void RemoveBuildBaes(BuildBase buildBase) { Vector3 buildPosition = buildBase.buildBaseData.buildPosition.GetVector3(); if (dicBuildBase.ContainsKey(buildPosition)) { dicBuildBase.Remove(buildPosition); } }
/// <summary> /// 获取建筑模型 /// </summary> /// <param name="buildTypeEnum"></param> /// <param name="name"></param> /// <param name="buildRule"></param> public GameObject GetBuildBaseModel(BuildBase centerBuildBase, BuildRuleEnum buildRule, string name) { if (dicBuildBaseForBuilding.TryGetValue(name, out BuildBaseManager buildBaseManager)) { List <BuildBase> listAroundBuildBase = GetAroundBuildBase(centerBuildBase); return(buildBaseManager.GetBuildBaseModel(listAroundBuildBase, centerBuildBase, buildRule)); } return(null); }
/// <summary> /// 通过坐标获取建筑 /// </summary> /// <param name="listData"></param> /// <param name="position"></param> /// <returns></returns> public List <BuildBase> GetBuildBaseByPosition(List <BuildBase> listData, Vector3 position) { BuildBase buildBase = GetBuildBaseByPosition(position); if (buildBase) { listData.Add(buildBase); } return(listData); }
/// <summary> /// 建造动画 /// </summary> /// <param name="buildType"></pa ram> /// <param name="build"></param> public void AnimForBuild(BuildTypeEnum buildType, BuildBase buildBase) { switch (buildType) { case BuildTypeEnum.Building: buildBase.AnimForBuild(); break; case BuildTypeEnum.Foundation: break; } }
public void CreateAllBuild(string modelName) { BuildHandler.Instance.manager.LoadBuildBaseRes(BuildTypeEnum.Building, modelName); List <BuildRuleEnum> ruleList = EnumUtil.GetEnumValue <BuildRuleEnum>(); for (int i = 0; i < ruleList.Count; i++) { BuildRuleEnum itemRule = ruleList[i]; GameObject objModel = BuildHandler.Instance.manager.GetBuildBaseModel(null, itemRule, modelName); GameObject objBuild = Instantiate(gameObject, modelBuilding.gameObject); BuildBase buildBase = objBuild.GetComponent <BuildBase>(); BuildBaseBean buildBaseData = new BuildBaseBean(); Vector3 centerPostion = new Vector3(i * 5, 0, 0); buildBaseData.SetBuildPosition(centerPostion); buildBaseData.SetBuildRule(itemRule); buildBaseData.SetBuildType(BuildTypeEnum.Building); buildBase.SetBuilBaseData(buildBaseData); objBuild.transform.position = centerPostion; BuildHandler.Instance.manager.AddBuildBase(buildBase); buildBase.AutoCheckBuildRule(); BuildRuleEnumTool.GetBuildRuleData(itemRule, out int number, out bool up, out bool down, out bool left, out bool right, out bool before, out bool after); if (up) { CreateBuildItem(centerPostion + new Vector3(0, 1, 0)); } if (down) { CreateBuildItem(centerPostion + new Vector3(0, -1, 0)); } if (left) { CreateBuildItem(centerPostion + new Vector3(-1, 0, 0)); } if (right) { CreateBuildItem(centerPostion + new Vector3(1, 0, 0)); } if (before) { CreateBuildItem(centerPostion + new Vector3(0, 0, -1)); } if (after) { CreateBuildItem(centerPostion + new Vector3(0, 0, 1)); } buildBase.AutoCheckBuildRule(); } }
/// <summary> /// 增加建筑物 /// </summary> /// <param name="buildBase"></param> public void AddBuildBase(BuildBase buildBase) { Vector3 buildPosition = buildBase.buildBaseData.buildPosition.GetVector3(); if (dicBuildBase.ContainsKey(buildPosition)) { dicBuildBase[buildPosition] = buildBase; } else { dicBuildBase.Add(buildPosition, buildBase); } }
/// <summary> /// 检测并且修建 /// </summary> public void CheckAndBuild() { if (timeForBuildDelay > 0) { return; } RayUtil.RayToScreenPoint(out bool isCollider, out RaycastHit hit); if (!isCollider) { return; } BuildBase buildBase = hit.collider.GetComponent <BuildBase>(); if (buildBase != null) { Vector3 hitPosition = hit.point; Vector3 offsetPosition = new Vector3(0, 0, 0); Vector3 buildPosition = buildBase.transform.position; if (hitPosition.x == buildPosition.x + 0.5f) { offsetPosition = new Vector3(1, 0, 0); } else if (hitPosition.x == buildPosition.x - 0.5f) { offsetPosition = new Vector3(-1, 0, 0); } else if (hitPosition.y == buildPosition.y + 0.5f) { offsetPosition = new Vector3(0, 1, 0); } else if (hitPosition.y == buildPosition.y - 0.5f) { offsetPosition = new Vector3(0, -1, 0); } else if (hitPosition.z == buildPosition.z + 0.5f) { offsetPosition = new Vector3(0, 0, 1); } else if (hitPosition.z == buildPosition.z - 0.5f) { offsetPosition = new Vector3(0, 0, -1); } //判断该点是否有建筑 Vector3 newBuildPosition = buildPosition + offsetPosition; if (!GameDataHandler.Instance.CheckHasBuild(newBuildPosition) && !GameDataHandler.Instance.CheckBorder(newBuildPosition)) { timeForBuildDelay = 0; BuildHandler.Instance.CreateBuildBase <BuildForBuilding>(BuildTypeEnum.Building, newBuildPosition); } } }
public void DA_dataset_mean_2_row_data() { initData_dataset_2_rows(); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] means = (double[])obj.Invoke("getDataSetMeanMatrix", new object[] {}); Assert.IsTrue(means[0] == 80); Assert.IsTrue(means[1] == 140); }
/// <summary> /// 检测并且拆除 /// </summary> public void CheckAndDemolition() { RayUtil.RayToScreenPoint(out bool isCollider, out RaycastHit hit); if (!isCollider) { return; } BuildBase buildBase = hit.collider.GetComponent <BuildBase>(); if (buildBase != null && buildBase.buildBaseData.GetBuildType() == BuildTypeEnum.Building) { BuildHandler.Instance.DestroyBuildBase(buildBase); } }
public void DA_dataset_mean_7_row_data_example() { initData_dataset_7_row_2_class_example(); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] means = (double[])obj.Invoke("getDataSetMeanMatrix", new object[] { }); Assert.IsTrue(means[0] >= 2.87 && means[0] <= 2.89); Assert.IsTrue(means[1] >= 5.66 && means[0] <= 5.69); }
/// <summary> /// 获取建筑模型 /// </summary> /// <param name="buildRule"></param> /// <returns></returns> public GameObject GetBuildBaseModel(List <BuildBase> listAroundBuildBase, BuildBase centerBuildBase, BuildRuleEnum buildRule) { if (dicBuildRule.TryGetValue(buildRule, out BuildBaseModelBean modelData)) { if (modelData != null) { if (!CheckUtil.ListIsNull(listAroundBuildBase)) { //是否有地面方块 bool hasGround = false; BuildRuleEnum centerBuildRule = centerBuildBase.buildBaseData.GetBuildRule(); //检测周围方块 for (int i = 0; i < listAroundBuildBase.Count; i++) { BuildBase itemBuildBase = listAroundBuildBase[i]; //检测是否下面有砖块,并且砖块为地基 if (BuildRuleEnumTool.CheckHasDown(centerBuildRule) && (itemBuildBase.buildBaseData.GetBuildType() == BuildTypeEnum.Foundation || itemBuildBase.buildBaseData.GetBuildType() == BuildTypeEnum.Ground)) { hasGround = true; } } //如果有地面方块,则使用地基层 if (hasGround) { if (!CheckUtil.ListIsNull(modelData.listBaseModel)) { return(RandomUtil.GetRandomDataByList(modelData.listBaseModel)); } } } if (!CheckUtil.ListIsNull(modelData.listObjModel)) { return(RandomUtil.GetRandomDataByList(modelData.listObjModel)); } } } if (dicBuildRule.TryGetValue(BuildRuleEnum.Zero, out BuildBaseModelBean modelDataZero)) { if (!CheckUtil.ListIsNull(modelDataZero.listObjModel)) { return(modelDataZero.listObjModel[0]); } } return(null); }
/// <summary> /// 拆除建筑 /// </summary> /// <param name="buildBase"></param> public void DestroyBuildBase(BuildBase buildBase) { //获取周围方块 List<BuildBase> listAroundBuild = manager.GetAroundBuildBase(buildBase); //移除数据 GameDataHandler.Instance.manager.RemoveSceneListBuildData(buildBase.buildBaseData); manager.RemoveBuildBaes(buildBase); DestroyImmediate(buildBase.gameObject); //改变周围方块状态 for (int i = 0; i < listAroundBuild.Count; i++) { BuildBase itemBase = listAroundBuild[i]; itemBase.AutoCheckBuildRule(); } }
/// <summary> /// 获取周围6格格子 /// </summary> /// <param name="centerBuildBase"></param> public List <BuildBase> GetAroundBuildBase(BuildBase centerBuildBase) { List <BuildBase> listData = new List <BuildBase>(); if (centerBuildBase == null) { return(listData); } Vector3 centerPosition = centerBuildBase.buildBaseData.buildPosition.GetVector3(); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(1, 0, 0)); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(-1, 0, 0)); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(0, 1, 0)); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(0, -1, 0)); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(0, 0, 1)); listData = GetBuildBaseByPosition(listData, centerPosition + new Vector3(0, 0, -1)); return(listData); }
public void DA_covariance_matrix_example_data() { initData_dataset_7_row_2_class_example(); List <double[][]> allData = new List <double[][]>(); allData.Add(_classMatrix1); allData.Add(_classMatrix2); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] meanMatrix = (double[])obj.Invoke( "getDataSetMeanMatrix", new object[] {}); List <double[][]> correctedData = (List <double[][]>)obj.Invoke("getCorrectedDataMatrix", new object[] { allData, meanMatrix }); List <double[][]> covMatrix = (List <double[][]>)obj.Invoke("getCoVarianceMatrix", new object[] { correctedData }); double[][] tmp = covMatrix[0]; Assert.AreEqual(tmp.Length, 2); Assert.AreEqual(tmp[0].Length, 2); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][0], 0.166)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][1], -.192)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][0], -.192)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][1], 1.349)); tmp = covMatrix[1]; Assert.AreEqual(tmp.Length, 2); Assert.AreEqual(tmp[0].Length, 2); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][0], 0.259)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][1], -0.286)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][0], -0.286)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][1], 2.142)); }
public void DA_pooled_covariance_matrix_example() { initData_dataset_7_row_2_class_example(); List <double[][]> allData = new List <double[][]>(); allData.Add(_classMatrix1); allData.Add(_classMatrix2); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] probabilityMatrix = (double[])obj.Invoke( "getClassProbabilities", new object[] { allData }); double[] meanMatrix = (double[])obj.Invoke( "getDataSetMeanMatrix", new object[] { }); List <double[][]> correctedData = (List <double[][]>)obj.Invoke("getCorrectedDataMatrix", new object[] { allData, meanMatrix }); List <double[][]> covMatrix = (List <double[][]>)obj.Invoke("getCoVarianceMatrix", new object[] { correctedData }); double[][] pooledCoVarMatrix = (double[][])obj.Invoke( "getPooledCoVarianceMatrix", new object[] { covMatrix, probabilityMatrix }); Assert.AreEqual(pooledCoVarMatrix.Length, 2); Assert.AreEqual(pooledCoVarMatrix[0].Length, 2); Assert.IsTrue(SupportFunctions.DoubleCompare(pooledCoVarMatrix[0][0], 0.206)); Assert.IsTrue(SupportFunctions.DoubleCompare(pooledCoVarMatrix[0][1], -0.233)); Assert.IsTrue(SupportFunctions.DoubleCompare(pooledCoVarMatrix[1][0], -0.233)); Assert.IsTrue(SupportFunctions.DoubleCompare(pooledCoVarMatrix[1][1], 1.689)); }
//This assume assignment to local class values is done protected void setPrivateVariablesInBuildObject(BuildBase buildBase) { var prop = buildBase.GetType().GetField("_noOfAttributes", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); prop.GetValue(buildBase); prop.SetValue(buildBase, _trainingData.Length - 1); prop = buildBase.GetType().GetField("_trainingData", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); prop.SetValue(buildBase, _trainingData); prop = buildBase.GetType().GetField("_indexTargetAttribute", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); prop.SetValue(buildBase, _indexTargetAttribute); prop = buildBase.GetType().GetField("_noOfDataSamples", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); prop.SetValue(buildBase, _trainingData[0].Length); }
public void DA_corrected_matrix_example_data() { initData_dataset_7_row_2_class_example(); List <double[][]> allData = new List <double[][]>(); allData.Add(_classMatrix1); allData.Add(_classMatrix2); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] meanMatrix = (double[])obj.Invoke( "getDataSetMeanMatrix", new object[] { }); List <double[][]> correctedData = (List <double[][]>)obj.Invoke("getCorrectedDataMatrix", new object[] { allData, meanMatrix }); double[][] tmp = correctedData[0]; Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][0], 0.060)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][1], -.357)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][2], 0.679)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][3], 0.269)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][0], 0.951)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][1], 2.109)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][2], -0.025)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][3], -.209)); tmp = correctedData[1]; Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][0], -.305)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][1], -0.732)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[0][2], 0.386)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][0], -1.218)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][1], 0.547)); Assert.IsTrue(SupportFunctions.DoubleCompare(tmp[1][2], -2.155)); }
/// <summary> /// 创建一个建筑 /// </summary> /// <param name="buildPosition"></param> public T CreateBuildBase<T>(BuildTypeEnum buildType, Vector3 buildPosition) where T : BuildBase { BuildBase modelBuild = null; //设置建造数据 BuildBaseBean buildBaseData = new BuildBaseBean(); buildBaseData.SetBuildType(buildType); buildBaseData.SetBuildRule(BuildRuleEnum.Zero); buildBaseData.SetBuildPosition(buildPosition); //生成不同的模型 switch (buildType) { case BuildTypeEnum.Building: modelBuild = modelForBuilding; break; case BuildTypeEnum.Foundation: modelBuild = modelForFoundation; break; } if (modelBuild == null) return null; GameObject objBuild = Instantiate(gameObject, modelBuild.gameObject, buildPosition); T cptBuild = objBuild.GetComponent<T>(); cptBuild.SetBuilBaseData(buildBaseData); //增加数据 GameDataHandler.Instance.manager.AddSceneListBuildData(buildBaseData); manager.AddBuildBase(cptBuild); //建筑动画 AnimForBuild(buildType, cptBuild); //获取周围方块 List<BuildBase> listAroundBuild = manager.GetAroundBuildBase(cptBuild); //改变周围方块状态 for (int i = 0; i < listAroundBuild.Count; i++) { BuildBase itemBase = listAroundBuild[i]; itemBase.AutoCheckBuildRule(); } return cptBuild; }
/// <summary> /// 获取建筑规则 /// </summary> /// <param name="listData"></param> public virtual BuildRuleEnum GetBuildRule(List <BuildBase> listData) { bool upRule = false; bool downRule = false; bool leftRule = false; bool rightRule = false; bool beforeRule = false; bool afterRule = false; for (int i = 0; i < listData.Count; i++) { BuildBase buildBase = listData[i]; Vector3 tempRule = (buildBaseData.buildPosition.GetVector3() - buildBase.buildBaseData.buildPosition.GetVector3()); if (tempRule.y == 1) { downRule = true; } if (tempRule.y == -1) { upRule = true; } if (tempRule.x == 1) { leftRule = true; } if (tempRule.x == -1) { rightRule = true; } if (tempRule.z == 1) { beforeRule = true; } if (tempRule.z == -1) { afterRule = true; } } return(BuildRuleEnumTool.GetBuildRule(listData.Count, upRule, downRule, leftRule, rightRule, beforeRule, afterRule)); }
public void DA_probability_class_matrix_example() { initData_dataset_7_row_2_class_example(); List <double[][]> allData = new List <double[][]>(); allData.Add(_classMatrix1); allData.Add(_classMatrix2); BuildBase lda = getBuildAndAssignValues(); PrivateObject obj = new PrivateObject(lda); double[] probabilityMatrix = (double[])obj.Invoke( "getClassProbabilities", new object[] { allData }); Assert.AreEqual(probabilityMatrix.Length, 2); Assert.IsTrue(SupportFunctions.DoubleCompare(probabilityMatrix[0], (4.0 / 7.0))); Assert.IsTrue(SupportFunctions.DoubleCompare(probabilityMatrix[1], (3.0 / 7.0))); }
protected void CreateBuildItem(Vector3 position) { GameObject objBuild = Instantiate(gameObject, modelBuilding.gameObject); BuildBase buildBase = objBuild.GetComponent <BuildBase>(); BuildBaseBean buildBaseData = new BuildBaseBean(); buildBaseData.SetBuildPosition(position); buildBaseData.SetBuildRule(BuildRuleEnum.Zero); buildBaseData.SetBuildType(BuildTypeEnum.Building); buildBase.SetBuilBaseData(buildBaseData); objBuild.transform.position = position; buildBase.AutoCheckBuildRule(); Renderer[] rendererArrary = buildBase.GetComponentsInChildren <Renderer>(); foreach (Renderer renderer in rendererArrary) { renderer.material.color = Color.black; } BuildHandler.Instance.manager.AddBuildBase(buildBase); }
void DoBuildLogic() { // Check if we got a building an show its information if (doShowInfo) { if (Physics.Raycast(_cam.ScreenPointToRay(Input.mousePosition), out hit, 100, InfoLayer)) { var info = hit.collider.gameObject.GetComponent <BuildInformation> (); if (info != null) { if (CurrentInfo == info) { HideBuildInfo(); } else { ShowInfo(info); } } } else { HideBuildInfo(); } } // Let the build material flicker if (CurrentBuilding != null) { var canBuild = Money >= CurrentBuilding.Money; BuildMaterial.SetColor(buildMatTintColorId, new Color( canBuild ? 0 : 1, canBuild ? 1 : 0, 0, (Mathf.Sin(Time.realtimeSinceStartup * 8f) / 8) + .25f)); // General building raycast if (Physics.Raycast(_cam.ScreenPointToRay(Input.mousePosition), out hit, 100, BuildLayer)) { // Show new highlight if (lastHighlight != hit.collider.gameObject) { if (lastHighlight != null) { lastHighlight.Hide(); lastHighlight = null; } lastHighlight = hit.collider.gameObject.GetComponent <BuildBase> (); lastHighlight.Show(); } if (doBuild && canBuild) { lastHighlight.Hide(); var go = Instantiate(CurrentBuilding.Prefab, lastHighlight.transform.parent); go.GetComponent <BuildInformation> ().Building = CurrentBuilding; lastHighlight.gameObject.SetActive(false); doBuild = false; Money -= CurrentBuilding.Money; buildingsBuilt++; // TODO ca-tching } } else if (lastHighlight != null) { lastHighlight.Hide(); lastHighlight = null; } } // Platform building raycast if (Physics.Raycast(_cam.ScreenPointToRay(Input.mousePosition), out hit, 100, PlatformBuildLayer)) { // See if we hit a floor instead (layers are bitmasks, so no easier check here) if (hit.collider.gameObject.HasLayer(FloorLayer)) { if (lastPlatformHighlight != null) { if (hit.collider.gameObject != lastPlatformHighlight) { lastPlatformHighlight.SetActive(false); } else if (doBuild && Money >= PlatformCost) { // We got a platform we want to build Money -= PlatformCost; // Reset material var renderer = lastPlatformHighlight.GetComponent <MeshRenderer> (); renderer.sharedMaterial = defaultPlatformMaterial; // Reactivate build base so we can build stuff again platformBuildBase.SetActive(true); // reset for next platform lastPlatformHighlight = null; platformRenderer = null; platformsBuilt++; } } } else { var snappedToGrid = new Vector3( Mathf.Round((hit.point.x) / .5f) * .5f, 0, Mathf.Round((hit.point.z) / .5f) * .5f); if (lastPlatformHighlight != null) { // Only allow platforms near others, so we do a simple four-directional raycast lastPlatformHighlight.transform.position = snappedToGrid; lastPlatformHighlight.SetActive( Physics.Raycast(snappedToGrid, Vector3.forward, out hit, .5f, FloorLayer) || Physics.Raycast(snappedToGrid, Vector3.right, out hit, .5f, FloorLayer) || Physics.Raycast(snappedToGrid, Vector3.back, out hit, .5f, FloorLayer) || Physics.Raycast(snappedToGrid, Vector3.left, out hit, .5f, FloorLayer)); } else { lastPlatformHighlight = Instantiate(PlatformPrefab, snappedToGrid, Quaternion.identity, PlayerBase); platformRenderer = lastPlatformHighlight.GetComponent <MeshRenderer> (); defaultPlatformMaterial = defaultPlatformMaterial ?? platformRenderer.sharedMaterial; platformBuildBase = FindChildWithBuildLayer(lastPlatformHighlight); platformBuildBase.SetActive(false); } } } doBuild = false; doShowInfo = false; }