Esempio n. 1
0
    // 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;
    }
Esempio n. 2
0
    // 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;
        }
    }