public override bool CanBeSelected(Joueur joueurActif, TurnManager.phases phaseActive) { if (phaseActive == TurnManager.phases.Deploiement) { return(joueurActif.Equals(joueur) && territoire == null && canAct); } else { return(joueurActif.Equals(joueur) && canAct); } }
void Update() { if (turnManager.GetJoueurActif() != null) { Joueur joueurActif = turnManager.GetJoueurActif(); TurnManager.phases phaseActive = turnManager.PhaseActive; joueurLabel.color = Utils.GetColor(joueurActif.Couleur); joueurLabel.transform.Find("Nom").gameObject.GetComponent <Text>().text = joueurActif.Nom; if (phaseActive == TurnManager.phases.Deploiement) { joueurLabel.transform.Find("Phase Active").gameObject.GetComponent <Text>().text = "Déploiement"; } else { joueurLabel.transform.Find("Phase Active").gameObject.GetComponent <Text>().text = phaseActive.ToString(); } if (joueurActif.Credits == 0) { fonds.text = "Fonds : 0 (+" + joueurActif.EstimatedEarnings() + ") Cr"; } else { fonds.text = "Fonds : " + joueurActif.Credits + "k (+" + joueurActif.EstimatedEarnings() + ") Cr"; } } if (Input.GetKeyDown(KeyCode.P)) { if (Input.GetKeyDown(KeyCode.P)) { isPaused = !isPaused; parametersPanel.SetActive(!parametersPanel.activeSelf); } if (isPaused) { Time.timeScale = 0f; } else { Time.timeScale = 1.0f; } } if (waitingPanel.activeSelf) { int index = (int)(Time.time * framesPerSecond) % loadingFrames.Count; waitingPanel.transform.FindChild("Image").GetComponent <Image>().sprite = loadingFrames[index]; } }
void Update() { if (guiManager == null) { guiManager = GameObject.Find("GUIManager").GetComponent <GUIController>(); } else if (!guiManager.dialogOpened) // Si une fenêtre de dialogue n'est pas ouverte { joueurActif = guiManager.GetComponent <TurnManager>().GetJoueurActif(); // Réinitialisation du timer comptant le temps passé avec le bouton pressé if (Input.GetMouseButtonDown(1)) { timeDown = 0.0f; } else if (Input.GetMouseButton(1)) { timeDown += 0.1f; // 1/2 seconde c'est écoulé sans relâchement du bouton, le joueur veut sélectionner avec le triangle // !isSelecting permet d'éviter de réinitialiser la sélection if (timeDown > 0.5f && !isSelecting) { isSelecting = true; mousePosition1 = Input.mousePosition; removeAllSelection(selectedObjects); selectedObjects = new List <Unite>(); } } // Lorsque le bouton est relâché, ajoute les unités sélectionnées s'il y en a if (Input.GetMouseButtonUp(1)) { TurnManager.phases phaseActive = guiManager.GetComponent <TurnManager>().PhaseActive; // C'est un clic, on ajoute l'unité pointée par le curseur if (timeDown < 0.5f) { RaycastHit hit; if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 13.5f, LayerMask.GetMask("Unites"))) { Unite unit = hit.collider.gameObject.GetComponent <Unite>(); if (unit.CanBeSelected(joueurActif, phaseActive)) { AddSelection(hit.collider.gameObject.GetComponent <Unite>()); } } else { removeAllSelection(selectedObjects); } } else // C'est une sélection multiple, on ajoute tout ce qui est dans le rectangle { removeAllSelection(selectedObjects); foreach (var selectableObject in FindObjectsOfType <Unite>()) { if (IsWithinSelectionBounds(selectableObject.gameObject) && selectableObject.CanBeSelected(joueurActif, phaseActive)) { AddSelection(selectableObject); } } isSelecting = false; /* * var sb = new StringBuilder(); * sb.AppendLine(string.Format("Selecting [{0}] Units", selectedObjects.Count)); * foreach (var selectedObject in selectedObjects) * sb.AppendLine("-> " + selectedObject.gameObject.name); * Debug.Log(sb.ToString()); */ } timeDown = 0.0f; } // Highlight all objects within the selection box if (isSelecting) { TurnManager.phases phaseActive = guiManager.GetComponent <TurnManager>().PhaseActive; foreach (var selectableObject in FindObjectsOfType <Unite>()) { if (IsWithinSelectionBounds(selectableObject.gameObject) && !selectedObjects.Contains(selectableObject) && selectableObject.CanBeSelected(joueurActif, phaseActive)) { AddSelection(selectableObject); } } } } }
/// <summary> /// Vérifie qu'une unité peut être sélectionnée. /// </summary> /// <param name="joueurActif">Joueur Le joueur actif à ce tour</param> /// <param name="phaseActive">TurnManager.phases La phase en cour</param> /// <returns>bool true si l'unité peut être ajoutée, false sinon</returns> public virtual bool CanBeSelected(Joueur joueurActif, TurnManager.phases phaseActive) { return(false); }
void OnMouseUp() { if (!guiManager.GetComponent <GUIController>().dialogOpened) // S'il n'y a pas de fenêtre de dialogue d'ouverte { if (dragged) { dragged = false; TurnManager.phases phaseActive = guiManager.GetComponent <TurnManager>().PhaseActive; RaycastHit hit; // Le Raycast vérifiera si la droite perpendiculaire à la map passant par l'unité touche un territoire // et donc si l'unité tombera sur un territoire if (Physics.Raycast(this.transform.position, Vector3.down, out hit, 4.0f, LayerMask.GetMask("BoardLayer"))) { System.Object zoneSelectionnee = GameObject.Find("Territoires colorés").GetComponent <ColoredTerritories>().GetHoveredTerritory(hit); if (zoneSelectionnee != null) { if (zoneSelectionnee.GetType().Name == "Territoire") { Territoire territoireSelectionnee = zoneSelectionnee as Territoire; // Terrestre terrestre = this as Terrestre; // if(territoireSelectionnee.Equals(terrestre.territoire)) if (territoireSelectionnee.joueur == joueur) { // Les unités peuvent se déplacer pendant la phase de déploiement si elles viennent d'être achetée ou durant la // phase de mouvement if (phaseActive != TurnManager.phases.Attaque) { MoveMultipleUnits(territoireSelectionnee); } else { InvalidPositioning("Vous ne pouvez (re)déployer vos unités en-dehors la phase de mouvement ou de déploiement."); } } else { if (phaseActive == TurnManager.phases.Attaque) { Attack(territoireSelectionnee); } else { InvalidPositioning("Vous ne pouvez attaquer en-dehors de la phase d'attaque."); } } } else { Route routeSelectionnee = zoneSelectionnee as Route; if (routeSelectionnee.joueur == joueur || routeSelectionnee.joueur == null) { // Les unités peuvent se déplacer pendant la phase de déploiement si elles viennent d'être achetée ou durant la // phase de mouvement if (phaseActive != TurnManager.phases.Attaque) { MoveMultipleUnits(routeSelectionnee); } else { InvalidPositioning("Vous ne pouvez redéployer vos unités en-dehors la phase de mouvement."); } } else { if (phaseActive == TurnManager.phases.Attaque) { Attack(routeSelectionnee); } else { InvalidPositioning("Vous ne pouvez attaquer en-dehors de la phase d'attaque"); } } } } else { InvalidPositioning("Cette unité ne peut être déployée ici."); } } else { foreach (Unite unit in selectedList) { unit.transform.position = unit.offset; } } } } }