// Use this for initialization void Start() { startZoom = Camera.main.orthographicSize; etatDebutPartie = EtatDebutPartie.Dezoom; etatDezoom = -1; etatZoom = -1; mapGenerator = GameObject.FindGameObjectWithTag("MapGenerator").GetComponent <MapGenerator>(); nombreTuilesX = mapGenerator.largeur; nombreTuilesY = mapGenerator.hauteur; }
// Update is called once per frame void Update() { switch (etatDebutPartie) { //Dezoom général case EtatDebutPartie.Dezoom: float valeurIncrementationDezoom = sigmoid(etatDezoom); etatDezoom += incrementationZooms * Time.deltaTime; if (etatDezoom >= 1) { Camera.main.orthographicSize = dezoomMax; etatDebutPartie = EtatDebutPartie.ChoixCamp; } else { Camera.main.orthographicSize = startZoom + ((dezoomMax - startZoom) * valeurIncrementationDezoom); } break; //Choix de la position du camp case EtatDebutPartie.ChoixCamp: Vector2 positionCamp = new Vector2(); positionCamp.x = Mathf.Floor(Camera.main.ScreenToWorldPoint(Input.mousePosition).x + .5f); positionCamp.y = Mathf.Floor(Camera.main.ScreenToWorldPoint(Input.mousePosition).y + .5f); if (!Input.GetMouseButtonDown(0)) { if (campAPoser == null) { campAPoser = Instantiate(prefabCamp); GameObject placementBatiment = Instantiate(uniteBlanche); placementBatiment.name = nomGameObjectPlacementBatiment; placementBatiment.transform.parent = campAPoser.transform; placementBatiment.transform.localScale = new Vector3(.96f, .92f, 1); placementBatiment.transform.position = campAPoser.transform.position; placementBatiment.GetComponent <SpriteRenderer>().color = new Color(0, 0, 0, .4f); } campAPoser.transform.position = positionCamp; //Coloration du camp pour une position disponible bool positionValide = true; for (int y = debutYCamp; y <= finYCamp; y++) { for (int x = debutXCamp; x <= finXCamp; x++) { //Verification des tuiles autours du camp try { if (mapGenerator.tuilesMap[(int)positionCamp.y + y, (int)positionCamp.x + x] == MapGenerator.TypeTuile.Eau) { positionValide = false; } } catch { positionValide = false; } } } campAPoser.GetComponent <SpriteRenderer>().color = positionValide ? Color.white : Color.red; } else { bool positionValide = true; for (int y = debutYCamp; y <= finYCamp; y++) { for (int x = debutXCamp; x <= finXCamp; x++) { //Verification des tuiles autours du camp //Si c'est de l'eau ou en dehors de la carte la position n'est plus valide try { if (mapGenerator.tuilesMap[(int)positionCamp.y + y, (int)positionCamp.x + x] == MapGenerator.TypeTuile.Eau) { positionValide = false; } } catch { positionValide = false; } } } if (positionValide) { //Pathfinding oPathFinding pathFinding = GameObject.Find("MapGenerator").GetComponent <oPathFinding>(); //Détruit les arbres autours campAPoser.transform.Find("ColliderPoseCamp").GetComponent <BoxCollider2D>().enabled = true; //Indique au PathFinding les nouvelles zones marchables ou non for (int i = -2; i <= 2; i++) { for (int j = -2; j <= 2; j++) { Vector2 positionVerification = new Vector2(campAPoser.transform.position.x + i, campAPoser.transform.position.y + j); //Bordures autour du camp if (i == -2 || i == 2 || j == -2 || j == 2) { if (mapGenerator.arbreSurPosition(positionVerification)) { pathFinding.definirNoeudArbre(positionVerification, false); } } else //Intérieur du camp { pathFinding.definirNoeudArbre(positionVerification, true); } } } //Enlève la zone noir de visualisation de placement Destroy(campAPoser.transform.Find(nomGameObjectPlacementBatiment).gameObject); //Passe au prochain état du début de partie : Le zoom qui recentre sur le camp etatDebutPartie = EtatDebutPartie.Zoom; //Spawn le camp ennemi GameObject.Find("MapGenerator").GetComponent <EnnemiSpawner>().spawnCampEnnemi(campAPoser); } } break; //Zoom sur la cabane finale case EtatDebutPartie.Zoom: //On determine la position vers laquelle se diriger si le camp est près d'une limite de la map Vector3 positionFinaleZoom = campAPoser.transform.position; positionFinaleZoom.x = Mathf.Clamp(positionFinaleZoom.x, 10.5f, nombreTuilesX - 11f); positionFinaleZoom.y = Mathf.Clamp(positionFinaleZoom.y, 5.5f, nombreTuilesY - 6.5f); //Incrementation du zoom float valeurIncrementationZoom = sigmoid(etatZoom); etatZoom += incrementationZooms * Time.deltaTime; if (etatZoom >= 1) { Camera.main.orthographicSize = startZoom; Camera.main.transform.position = new Vector3(positionFinaleZoom.x, positionFinaleZoom.y, -10); //Suppression du script quand les phases du début sont toutes terminées Destroy(this); //Créé le script pour faire spawn le joueur GetComponent <SpawnPlayer>().camp = campAPoser; GetComponent <SpawnPlayer>().uniteBlanche = uniteBlanche; GetComponent <SpawnPlayer>().enabled = true; } else { Camera.main.orthographicSize = dezoomMax - ((dezoomMax - startZoom) * valeurIncrementationZoom); Camera.main.transform.position = new Vector3( startZoomCameraPosition.x + ((positionFinaleZoom.x - startZoomCameraPosition.x) * valeurIncrementationZoom), startZoomCameraPosition.y + ((positionFinaleZoom.y - startZoomCameraPosition.y) * valeurIncrementationZoom), -10 ); } break; } //Deplacement de la camera dans le placement du camp if (etatDebutPartie == EtatDebutPartie.ChoixCamp) { Vector2 positionSouris = Input.mousePosition; Vector3 positionCamera = Camera.main.transform.position; if (positionSouris.x <= 2 && Camera.main.ScreenToWorldPoint(Vector3.zero).x >= -offsetLimitesCamera.x) { positionCamera.x -= vitesseCamera * Time.deltaTime; } if (positionSouris.x >= Screen.width - 2 && Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height)).x <= nombreTuilesX - offsetLimitesCamera.x) { positionCamera.x += vitesseCamera * Time.deltaTime; } if (positionSouris.y <= 2 && Camera.main.ScreenToWorldPoint(Vector3.zero).y >= -offsetLimitesCamera.y) { positionCamera.y -= vitesseCamera * Time.deltaTime; } if (positionSouris.y >= Screen.height - 2 && Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height)).y <= nombreTuilesY - offsetLimitesCamera.y) { positionCamera.y += vitesseCamera * Time.deltaTime; } Camera.main.transform.position = positionCamera; startZoomCameraPosition = positionCamera; } }