void ClickHandler(Vector2 pos) { Ray ray = Camera.main.ScreenPointToRay(pos); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.transform.tag == "PlayerField") { if (currentPlayerEnergy > player.energyCost) { currentPlayerEnergy -= player.energyCost; if (player.isAtk) { GameObject soldierObjPlayer = Instantiate(soldierAtkPrefab, hit.point, Quaternion.identity, gameplayComponents.transform); SoldierAtk s = soldierObjPlayer.GetComponent <SoldierAtk>(); s.ball = ballObj; s.Soldier.SetAttr(true); s.Soldier.GameManager = this; AtkSoldiers.Add(s); } else { GameObject soldierObj = Instantiate(soldierDefPrefab, hit.point, Quaternion.identity, gameplayComponents.transform); SoldierDef s = soldierObj.GetComponent <SoldierDef>(); s.Soldier.SetAttr(true); s.Soldier.GameManager = this; DefSoldiers.Add(s); } } } else if (hit.transform.tag == "EnemyField") { if (currentEnemyEnergy > enemy.energyCost) { currentEnemyEnergy -= enemy.energyCost; if (enemy.isAtk) { GameObject soldierObjEnemy = Instantiate(soldierAtkPrefab, hit.point, Quaternion.Euler(0, 180, 0), gameplayComponents.transform); SoldierAtk s = soldierObjEnemy.GetComponent <SoldierAtk>(); s.ball = ballObj; s.Soldier.SetAttr(false); s.Soldier.GameManager = this; AtkSoldiers.Add(s); } else { GameObject soldierObjEnemy = Instantiate(soldierDefPrefab, hit.point, Quaternion.Euler(0, 180, 0), gameplayComponents.transform); SoldierDef s = soldierObjEnemy.GetComponent <SoldierDef>(); s.Soldier.SetAttr(false); s.Soldier.GameManager = this; DefSoldiers.Add(s); } } } } }
void OnCollisionEnter(Collision collision) { if (gameObject.tag == "SoldierDef" && collision.gameObject.tag == "SoldierAtk") { SoldierDef soldierDef = transform.parent.GetComponent <SoldierDef>(); SoldierAtk soldierAtk = collision.transform.parent.GetComponent <SoldierAtk>(); if (transform.parent.GetComponent <SoldierDef>().target == soldierAtk) { soldierDef.targetCaught = true; soldierAtk.isCaught = true; } } }
void ClickHandler(Vector2 pos) { // 2D screen => 3d world space Ray ray = Camera.main.ScreenPointToRay(pos); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //OnscreenDebugOutput.Log($"Touch at {pos}, hit {hit.transform.tag} at {hit.point}"); if (hit.transform.tag == "PlayerField") { if (currentPlayerEnergy > player.energyCost) { currentPlayerEnergy -= player.energyCost; if (player.isAtk) { GameObject soldierObjPlayer = Instantiate(soldierAtkPrefab, hit.point, Quaternion.identity, gameplayComponents.transform); SoldierAtk s = soldierObjPlayer.GetComponent <SoldierAtk>(); s.ball = ballObj; s.Soldier.SetAttr(true); s.Soldier.GameManager = this; AtkSoldiers.Add(s); //OnscreenDebugOutput.Log($"Added {s} at {hit.point}"); } else { GameObject soldierObj = Instantiate(soldierDefPrefab, hit.point, Quaternion.identity, gameplayComponents.transform); SoldierDef s = soldierObj.GetComponent <SoldierDef>(); s.Soldier.SetAttr(true); s.Soldier.GameManager = this; DefSoldiers.Add(s); //OnscreenDebugOutput.Log($"Added {s} at {hit.point}"); } } } // TODO: remove this pls // Replace with a simple *Do nothing* // or a message to let the player know that // they can't put soldiers in enemy's field. // Or only activate this in 2-players mode else if (hit.transform.tag == "EnemyField") { if (currentEnemyEnergy > enemy.energyCost) { currentEnemyEnergy -= enemy.energyCost; if (enemy.isAtk) { GameObject soldierObjEnemy = Instantiate(soldierAtkPrefab, hit.point, Quaternion.Euler(0, 180, 0), gameplayComponents.transform); SoldierAtk s = soldierObjEnemy.GetComponent <SoldierAtk>(); s.ball = ballObj; s.Soldier.SetAttr(false); s.Soldier.GameManager = this; AtkSoldiers.Add(s); } else { GameObject soldierObjEnemy = Instantiate(soldierDefPrefab, hit.point, Quaternion.Euler(0, 180, 0), gameplayComponents.transform); SoldierDef s = soldierObjEnemy.GetComponent <SoldierDef>(); s.Soldier.SetAttr(false); s.Soldier.GameManager = this; DefSoldiers.Add(s); } } } } }