void Start() { /* Reserve for Sence logic*/ gm = this; data = Data.GlobalData; towerShapes = new List <TowerShape>(); enemies = new List <Enemy>(); pickTower = null; pickRegion = null; selectTypeHandler = 0; buildPosition = Vector3.zero; datas1 = data.s1; datas2 = data.s2; datas3 = data.s3; counts1 = data.count1; counts2 = data.count2; highLightObj = GameObject.CreatePrimitive(PrimitiveType.Sphere).GetComponent <Transform>(); Destroy(highLightObj.GetComponent <Collider>()); highLightObj.GetComponent <MeshRenderer>().material = Resources.Load <Material>("Materials/MapMaterials/Silhouette"); highLightObj.gameObject.SetActive(false); selectedMaterial = Resources.Load <Material>("Materials/MapMaterials/Glow"); mapButton.SetActive(false); towerButton1.SetActive(false); towerButton2.SetActive(false); /*Game Data*/ money = data.startMoney; //start money for player enemyTowerCount = 0; enemySceneTimer = 0f; }
void SolidificateTowerShape(TowerShape pickTower) { if (pickTower != null && pickTower.IsSolidificated == false) { bool allowance = false; if (pickTower.gameObject.GetComponent <AttackTowerEntity>() != null) { AttackTowerEntity tmp = pickTower.gameObject.GetComponent <AttackTowerEntity>(); allowance = tmp.Solidification(); } else if (pickTower.gameObject.GetComponent <DefenceTowerEntity>() != null) { DefenceTowerEntity tmp = pickTower.gameObject.GetComponent <DefenceTowerEntity>(); allowance = tmp.Solidification(); } else if (pickTower.gameObject.GetComponent <ProductionTowerEntity>() != null) { ProductionTowerEntity tmp = pickTower.gameObject.GetComponent <ProductionTowerEntity>(); allowance = tmp.Solidification(); } if (allowance) { TestPack.TowerChange(pickTower); pickTower.IsSolidificated = true; this.money -= data.solidificateCost; } } else { Debug.Log("Tower already solidificreate AttackTowered"); } }
//自爆塔 public static void DestoryOwnTower(TowerShape towershape) { TowerChange dot = new TowerChange(); dot.ti = new TowerInfo(towershape.ShapeId, towershape.transform.localPosition.x, towershape.transform.localPosition.y, towershape.transform.localPosition.z); dot.OptType = OptionType.DESTORY_TOWER; LoginRequist.ucl.rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(dot), null); }
//塔固化时调用,发送固化塔的类型与位置 public static void TowerChange(TowerShape towershape) { TowerChange tch = new TowerChange(); tch.ti = new TowerInfo(towershape.ShapeId, towershape.transform.localPosition.x, towershape.transform.localPosition.y, towershape.transform.localPosition.z); tch.OptType = OptionType.TOWER_CHANGE; LoginRequist.ucl.rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(tch), null); }
public void DestroyTowerShape(TowerShape pickTower) { if (towerShapes.Count > 0) { //int index = Random.Range(0, towerShapes.Count); int index = towerShapes.FindIndex(a => a.SerialId == pickTower.SerialId); // foreach (Enemy enemy in enemies) { if (pickTower.GetComponent <DefenceTowerEntity>() != null) { enemy.isLock = false; } } // // release cell TowerEntity t = pickTower.gameObject.GetComponent <TowerEntity>(); t.cell.available = true; if (t.linkTowers.Count > 0) { t.solidificationLinkCells[0].available = true; t.solidificationLinkCells[1].available = true; } towerShapeFactory.Reclaim(towerShapes[index]); //Switch the index of selected and last one int lastIndex = towerShapes.Count - 1; towerShapes[index] = towerShapes[lastIndex]; towerShapes.RemoveAt(lastIndex); TestPack.TowerNum(towerShapes); //Disable selected outline //highLightObj.gameObject.SetActive(false); //selectedObject.GetComponent<MeshRenderer>().material = previousMaterial; //selectedObject = null; highLightObj.gameObject.SetActive(false); for (int i = 0; i < enemies.Count; i++) { SearchAndGo(enemies[i]); } } else { Debug.Log("No tower in pools to destroy!"); } }
//Put destroyed tower back to factory public void Reclaim(TowerShape shapeToRecycle) { if (recycle) { if (pools == null) CreatePools(); pools[shapeToRecycle.ShapeId].Add(shapeToRecycle); if( shapeToRecycle.gameObject.GetComponent<TowerEntity>().isSolidicated == true) { Transform t = shapeToRecycle.transform; t.localScale /= Data.GlobalData.factorScale; } shapeToRecycle.gameObject.SetActive(false); } else { Destroy(shapeToRecycle.gameObject); } }
void CreateTowerShape(int towerId, HexCell buildRegion, int initState, float healthFactor = 1) { TowerShape instance = towerShapeFactory.Get(towerId, towerId); Transform t = instance.transform; TowerEntity e = instance.gameObject.GetComponent <TowerEntity>(); e.health = (int)(e.maxHealth * healthFactor); if (buildRegion == null) { Debug.LogError("No cell found?"); } else { e.cell = buildRegion; buildPosition = HexCoordinates.FromCoordinate(buildRegion.coordinates); instance.coordinates = buildRegion.coordinates; buildRegion.available = false; } //Care if move the root of prefabs to ground t.localPosition = buildPosition; if (t.localScale.y >= 6) { t.localScale /= data.factorScale; } //Create link if production tower //if(towerId == 2) // mapManager.hexGrid.CreatePowerLinkToCell( // instance.gameObject.GetComponent<ProductionTowerEntity>()); towerShapes.Add(instance); TestPack.TowerNum(towerShapes); instance.GetComponent <TowerEntity>().state = initState; for (int i = 0; i < enemies.Count; i++) { SearchAndGo(enemies[i]); } }
public void ConvertTo(TowerShape origin, string targetName, float healthFactor) { if (origin == null) { Debug.LogError("No Tower found to convert!"); } HexCell cell = origin.gameObject.GetComponent <TowerEntity>().cell; if (cell == null) { Debug.LogError("?"); } DestroyTowerShape(origin); if (targetName == "AttackTower") { CreateTowerShape(0, cell, 3, healthFactor); for (int i = 0; i < enemies.Count; i++) { SearchAndGo(enemies[i]); } } else if (targetName == "DefenceTower") { CreateTowerShape(1, cell, 3, healthFactor); for (int i = 0; i < enemies.Count; i++) { SearchAndGo(enemies[i]); } } else if (targetName == "ProductionTower") { CreateTowerShape(2, cell, 3, healthFactor); for (int i = 0; i < enemies.Count; i++) { SearchAndGo(enemies[i]); } } }
void MobilePick() { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position); //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); mapButton.SetActive(false); towerButton1.SetActive(false); towerButton2.SetActive(false); if (Physics.Raycast(ray, out hit)) { if (hit.transform.tag == "Untagged") //any non-interactive objects { selectTypeHandler = 0; } else if (hit.transform.tag == "Tower") { pickTower = hit.transform.parent.GetComponent <TowerShape>(); if (pickTower.gameObject.GetComponent <AttackTowerEntity>() != null) { convertText1.text = "转守"; convertText2.text = "转费"; } else if (pickTower.gameObject.GetComponent <DefenceTowerEntity>() != null) { convertText1.text = "转费"; convertText2.text = "转攻"; } else if (pickTower.gameObject.GetComponent <ProductionTowerEntity>() != null) { convertText1.text = "转攻"; convertText2.text = "转守"; } Debug.Log("hit:" + hit.collider.gameObject.name); selectTypeHandler = 1; //Selected effect if (!selectedObject || selectedObject != hit.transform) { if (selectedObject) { selectedObject.GetComponent <MeshRenderer>().material = previousMaterial; } selectedObject = hit.transform.gameObject; previousMaterial = selectedObject.GetComponent <MeshRenderer>().material; selectedObject.GetComponent <MeshRenderer>().material = selectedMaterial; highLightObj.position = hit.transform.position; highLightObj.rotation = hit.transform.rotation; highLightObj.localScale = hit.transform.localScale; highLightObj.GetComponent <MeshFilter>().mesh = hit.collider.GetComponent <MeshFilter>().mesh; highLightObj.gameObject.SetActive(true); } towerButton1.SetActive(true); towerButton2.SetActive(false); } else if (hit.transform.tag == "Map") { pickRegion = hit.collider.GetComponent <HexCell>(); Debug.Log("hit:" + hit.collider.gameObject.name); if (pickRegion.available == true) { //buildPosition = HexCoordinates.FromCoordinate(instance.coordinates); Debug.Log("hit: map"); selectTypeHandler = 2; if (!selectedObject || selectedObject.name != hit.transform.name) { if (selectedObject) { selectedObject.GetComponent <MeshRenderer>().material = previousMaterial; } selectedObject = hit.transform.gameObject; previousMaterial = selectedObject.GetComponent <MeshRenderer>().material; selectedObject.GetComponent <MeshRenderer>().material = selectedMaterial; highLightObj.position = hit.transform.position; highLightObj.rotation = hit.transform.rotation; highLightObj.localScale = hit.transform.localScale; highLightObj.GetComponent <MeshFilter>().mesh = hit.collider.GetComponent <MeshFilter>().mesh; highLightObj.gameObject.SetActive(true); } mapButton.SetActive(true); } else { Debug.Log("Region already accupied by a tower!"); } } /*Reserve for other object*/ } else { Debug.Log("hit: nothing"); if (selectedObject) { highLightObj.gameObject.SetActive(false); selectedObject.GetComponent <MeshRenderer>().material = previousMaterial; selectedObject = null; } } }
private void powerShow(Message msg) { if (msg.OpCode == OPCODE.NotifyInfo) { var seq = msg.NotifyInfo.Sequence; if (seq > 0) { object retParam = MessagePackDecoder <object>(msg.NotifyInfo.RpcParams); TowerChange tc = JsonConvert.DeserializeObject <TowerChange>(retParam.ToString()); switch (tc.OptType) { case OptionType.UPDATE_TOWER: if (tc.towernum >= 0) { GameManager.gm.setEnemyTowerCount(tc.towernum); } //TODO:与UI势力条绑定 break; case OptionType.TOWER_CHANGE: if (tc.ti != null) { Vector3 createEnemyPosition = new Vector3(); createEnemyPosition.x = tc.ti.x; createEnemyPosition.y = tc.ti.y; createEnemyPosition.z = tc.ti.z; var a = new GameObject(); a.AddComponent <MonsterMake>().SetData(tc.ti.shapeid, createEnemyPosition, OptionType.TOWER_CHANGE); } break; case OptionType.DESTORY_TOWER: if (tc.ti != null) { Vector3 CreateEnemyPosition = new Vector3(); CreateEnemyPosition.x = tc.ti.x; CreateEnemyPosition.y = tc.ti.y; CreateEnemyPosition.z = tc.ti.z; var a = new GameObject(); a.AddComponent <MonsterMake>().SetData(tc.ti.shapeid, CreateEnemyPosition, OptionType.DESTORY_TOWER); } break; case OptionType.SCAN: TowerChange st = new TowerChange(); foreach (TowerShape towerShape in GameManager.gm.towerShapes) { TowerInfo temp = new TowerInfo(towerShape.ShapeId, towerShape.transform.localPosition.x, towerShape.transform.localPosition.y, towerShape.transform.localPosition.z); st.a.Add(temp); } st.OptType = OptionType.SCAN_MAKE; rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(st), null); break; case OptionType.SCAN_MAKE: //fetch行为 if (tc.a.Count > 0) { foreach (TowerInfo tif in tc.a) { Vector3 v = new Vector3(); v.x = tif.x; v.y = tif.y; v.z = tif.z; v.x += 1200f; TowerShape ts = Instantiate(TowerShapeFactory.tsf.prefabs[tif.shapeid], v, Quaternion.identity); TowerEntity te = ts.gameObject.GetComponent <TowerEntity>(); Destroy(te); Destroy(ts.gameObject, 4f); } } break; case OptionType.GAME_OVER: if (tc.result == "false") { Debug.Log("Game Over"); TowerChange uw = new TowerChange(); uw.result = "true"; uw.OptType = OptionType.GAME_OVER; rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(uw), null); //SceneManager.LoadScene("LoseScene"); sceneLoader.LoadScene("WinScene"); } else if (tc.result == "true") { //Debug.Log("You Win"); //SceneManager.LoadScene("WinScene"); sceneLoader.LoadScene("LoseScene"); } break; } } } }