//interraction avec l'objet sur lequel l'utilisateur clique void interract(Vector2 screenPosition) { RaycastHit2D hit = Physics2D.Raycast(screenPosition, Vector2.zero); if (hit.transform != null && hit.transform.gameObject.layer == 5) { return; //use to prevent from clickink through UI } StopCoroutine("move"); deselection(); //rotateToTarget(screenPosition); if (hit.collider != null) { playerGridPos = new Vector2(Mathf.Round(transform.position.x), Mathf.Round(transform.position.y)); Vector2 hitGridPos = new Vector2(Mathf.Round(hit.collider.transform.position.x), Mathf.Round(hit.collider.transform.position.y)); if (hit.collider.tag == "Destructible" && //check if a destructible is hit Vector2.Distance(hit.collider.transform.position, gameObject.transform.position) <= maxInteractionDistance) //check if the distance between the play and the object is correct { if (hit.collider.gameObject.GetComponent <OreVein> () != null) { OreVein oreVein = hit.collider.gameObject.GetComponent <OreVein> (); oreVein.damage(digDamages [oreVein.getType()]); } else { hit.collider.gameObject.GetComponent <Destructible> ().damage(digDamagesToRocks); } rotateToTarget(hit.collider.transform.position); audioSource.PlayOneShot(digSound); endPlaceBuilding(); } else if ((hit.collider.tag == "Floor" && placingObject) && //building construction Vector2.Distance(hit.collider.transform.position, gameObject.transform.position) <= maxConstructionDistance && //check if the distance between the play and the object is correct (Mathf.Abs(playerGridPos.x - hitGridPos.x) > 0.01f || Mathf.Abs(playerGridPos.y - hitGridPos.y) > 0.01f)) //check if the selected case is not player's case { if (enoughRessources(buildingToPlace.GetComponent <Building>().getCosts())) { mapManager.placeBuilding(buildingToPlace, hit.collider.transform.position); } else { PopupMessage.instance.ShowMessage("Not enough ressources"); } //endPlaceBuilding (); } else if ((hit.collider.tag == "Item") && //item collection Vector2.Distance(hit.collider.transform.position, gameObject.transform.position) <= maxInteractionDistance) //check if the distance between the play and the object is correct { if (hit.collider.gameObject.GetComponent <Item> ().collect()) { audioSource.PlayOneShot(collectSound); } } else if (hit.collider.tag == "Building" && !placingObject) //building selection { selectedTile = hit.collider.gameObject; buildingToPlace = null; if (itemSlot != null && itemSlot.GetComponent <UsableItem> () != null && selectedTile.GetComponent <Building> ().hasUpgrade(itemSlot.GetComponent <UsableItem> ().type)) { buildingToPlace = selectedTile; } //UIManager.instance.getCostsBar().updateDisplay (); selectedTile.GetComponent <Building> ().selection(); if (OnSelectBuildingEvent != null) { OnSelectBuildingEvent(); } } else { Debug.Log("Rien touché"); } if (placingObject) { endPlaceBuilding(); } } }