Ejemplo n.º 1
0
    bool EstAligneAvecLaLigne()
    {
        RaycastHit RaycastEnDessous = LanceRayon(transform.position, -Vector3.up, Color.green, false);

        if (RaycastEnDessous.collider == null)
        {
            return(false);
        }
        if (RaycastEnDessous.collider.tag == "Segment")
        {
            SensDeParcours AlignementDeParcours = RaycastEnDessous.collider.gameObject.GetComponent <SensDeParcours>();
            if (AlignementDeParcours.Direction == transform.forward)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        else
        {
            return(false);
        }
    }
Ejemplo n.º 2
0
    bool aligneAvecLigneDevant()
    {
        bool res = false;
        // RaycastHit hitDroite;
        // if (Physics.Raycast(transform.position, transform.TransformDirection(- Vector3.up + Vector3.right), out hitDroite, Mathf.Infinity)) {
        //     Debug.DrawRay(transform.position, transform.TransformDirection(- Vector3.up + Vector3.right) * hitDroite.distance, Color.yellow);
        // }
        // RaycastHit hitGauche;
        // if (Physics.Raycast(transform.position, transform.TransformDirection(- Vector3.up - Vector3.right), out hitGauche, Mathf.Infinity)) {
        //     Debug.DrawRay(transform.position, transform.TransformDirection(- Vector3.up - Vector3.right) * hitGauche.distance, Color.yellow);
        // }
        // RaycastHit hitDevant;
        // if (Physics.Raycast(transform.position, transform.TransformDirection(- Vector3.up + Vector3.forward), out hitDevant, Mathf.Infinity)) {
        //     Debug.DrawRay(transform.position, transform.TransformDirection(- Vector3.up + Vector3.forward) * hitDevant.distance, Color.yellow);
        // }
        // RaycastHit hitDerriere;
        // if (Physics.Raycast(transform.position, transform.TransformDirection(- Vector3.up - Vector3.forward), out hitDerriere, Mathf.Infinity)) {
        //     Debug.DrawRay(transform.position, transform.TransformDirection(- Vector3.up - Vector3.forward) * hitDerriere.distance, Color.yellow);
        // }
        RaycastHit hitDessous;

        if (Physics.Raycast(transform.position, transform.TransformDirection(-Vector3.up), out hitDessous, Mathf.Infinity))
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(-Vector3.up) * hitDessous.distance, Color.yellow);
        }

        Vector3 fwd = transform.forward;

        if (hitDessous.collider != null)
        {
            if (hitDessous.collider.gameObject != null)
            {
                if (hitDessous.collider.gameObject.tag == "Segment")
                {
                    SensDeParcours sdp = hitDessous.collider.gameObject.GetComponent <SensDeParcours>();
                    if (sdp != null)
                    {
                        Vector3 sensReel = sdp.Direction;
                        if (Vector3.Angle(fwd, sensReel) < 1.0f)
                        {
                            res = true;
                        }
                    }
                }
            }
        }

        return(res);
    }
Ejemplo n.º 3
0
    void suivreLigne()
    {
        bool       aligneAvecLigne = false;
        bool       bonneDirection  = false;
        bool       croisement      = false;
        bool       murEnFace       = false;
        RaycastHit hitFront;

        Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hitFront, 1.0f);
        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1.0f, Color.green);
        RaycastHit hitDevant;

        Physics.Raycast(transform.position, transform.TransformDirection(1.0f / 2.0f * Vector3.forward - Vector3.up), out hitDevant, Mathf.Infinity);
        Debug.DrawRay(transform.position, transform.TransformDirection(1.0f / 2.0f * Vector3.forward - Vector3.up) * hitDevant.distance, Color.yellow);
        RaycastHit hitDerriere;

        Physics.Raycast(transform.position, transform.TransformDirection(-1.0f / 2.0f * Vector3.forward - Vector3.up), out hitDerriere, Mathf.Infinity);
        Debug.DrawRay(transform.position, transform.TransformDirection(-1.0f / 2.0f * Vector3.forward - Vector3.up) * hitDerriere.distance, Color.yellow);
        RaycastHit hitGauche;

        Physics.Raycast(transform.position, transform.TransformDirection(-Vector3.up + 1.0f / 2.0f * Vector3.right), out hitGauche, Mathf.Infinity);
        Debug.DrawRay(transform.position, transform.TransformDirection(-Vector3.up + 1.0f / 2.0f * Vector3.right) * hitDerriere.distance, Color.yellow);
        RaycastHit hitDroite;

        Physics.Raycast(transform.position, transform.TransformDirection(-Vector3.up - 1.0f / 2.0f * Vector3.right), out hitDroite, Mathf.Infinity);
        Debug.DrawRay(transform.position, transform.TransformDirection(-Vector3.up - 1.0f / 2.0f * Vector3.right) * hitDroite.distance, Color.yellow);

        if (hitDevant.collider.gameObject.tag == "Segment" || hitDerriere.collider.gameObject.tag == "Segment" ||
            hitDroite.collider.gameObject.tag == "Segment" || hitGauche.collider.gameObject.tag == "Segment")
        {
            aligneAvecLigne = true;
        }

        if (hitDevant.collider.gameObject.tag == "Segment" && hitDroite.collider.gameObject.tag == "Segment" ||
            hitDevant.collider.gameObject.tag == "Segment" && hitGauche.collider.gameObject.tag == "Segment" ||
            hitDerriere.collider.gameObject.tag == "Segment" && hitDroite.collider.gameObject.tag == "Segment" ||
            hitDerriere.collider.gameObject.tag == "Segment" && hitGauche.collider.gameObject.tag == "Segment")
        {
            croisement = true;
        }

        if (aligneAvecLigne)
        {
            RaycastHit hitDessous;
            Physics.Raycast(transform.position, transform.TransformDirection(-Vector3.up), out hitDessous, Mathf.Infinity);
            SensDeParcours sdp = hitDessous.collider.gameObject.GetComponent <SensDeParcours>();
            if (sdp != null)
            {
                Vector3 sensReel = sdp.Direction;
                bonneDirection = Vector3.Dot(sensReel.normalized, transform.forward.normalized) == 1.0;
            }
        }

        if (hitFront.collider != null)
        {
            if (hitFront.collider.gameObject != null)
            {
                if (hitFront.collider.gameObject.tag == "Mur")
                {
                    murEnFace = true;
                }
            }
        }

        Text[] texts = GameObject.FindGameObjectWithTag("Canvas").GetComponentsInChildren <Text>();
        foreach (Text text in texts)
        {
            if (text.name == "Aligne")
            {
                if (aligneAvecLigne)
                {
                    text.color = Color.green;
                }
                else
                {
                    text.color = Color.red;
                }
            }
            if (text.name == "Croisement")
            {
                if (croisement)
                {
                    text.color = Color.green;
                }
                else
                {
                    text.color = Color.red;
                }
            }
            if (text.name == "BonneDirection")
            {
                if (bonneDirection)
                {
                    text.color = Color.green;
                }
                else
                {
                    text.color = Color.red;
                }
            }

            /*if (murEnFace && hitDerriere.collider.gameObject.tag == "Segment" && !bonneDirection) {
             *  transform.Rotate(0.0f,90.0f,0.0f,Space.Self);
             * } else if(croisement && !bonneDirection) {
             *  transform.Rotate(0.0f,90.0f,0.0f,Space.Self);
             * } else if (!croisement && !bonneDirection && aligneAvecLigne) {
             *  transform.Rotate(0.0f,180.0f,0.0f,Space.Self);
             *  // transform.position = transform.position + (transform.forward * movementSpeed * Time.fixedDeltaTime);
             * } else if(aligneAvecLigne && bonneDirection) {
             *  transform.position = transform.position + (transform.forward * movementSpeed * Time.fixedDeltaTime);
             * }*/

            if (hitDevant.collider.gameObject.tag == "Segment" && bonneDirection)
            {
                transform.position = transform.position + (transform.forward * movementSpeed * Time.fixedDeltaTime);
            }
            else
            {
                if (hitDroite.collider.gameObject.tag == "Segment")
                {
                    transform.Rotate(0.0f, 90.0f, 0.0f, Space.Self);
                }
                else if (hitGauche.collider.gameObject.tag == "Segment")
                {
                    transform.Rotate(0.0f, -90.0f, 0.0f, Space.Self);
                }
                else if (hitDerriere.collider.gameObject.tag == "Segment")
                {
                    transform.Rotate(0.0f, 180.0f, 0.0f, Space.Self);
                }
            }

            //print(CalculateurDePosition.GetComponent<CalculDifference>().calculDistance());
        }
    }
Ejemplo n.º 4
0
    void createChemin(GameObject map, GameObject contour)
    {
        Ligne                  = new GameObject();
        Ligne.name             = "Ligne";
        Ligne.transform.parent = map.transform.parent;

        Mur                  = new GameObject();
        Mur.name             = "Mur";
        Mur.transform.parent = map.transform.parent;

        // Nombre de composantes de la ligne
        int NombreDeComposantes = RandObj.Next((int)PlageBlocLigne.x, (int)PlageBlocLigne.y);

        // Instancie le premier segment
        GameObject DerniereInstanceDeSegment = InstancieSegment(PositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);

        // Descipteur de construction précédente
        TypeDeplacementConstructionLigne DescripteurDerniereConstruction = TypeDeplacementConstructionLigne.AVANCE;
        // Conteneur du prochain lieu de création
        Vector3 ProchainePositionDeCreation = PositionDeCreation;

        // Direction
        // SensDeParcours AlignementDeParcours = DerniereInstanceDeSegment.GetComponent<SensDeParcours>();
        // AlignementDeParcours.Direction = DerniereInstanceDeSegment.transform.right;

        // MAJ de la direction du précédent segment
        // Construction bloc de murs du départ
        if (DescripteurDerniereConstruction == TypeDeplacementConstructionLigne.AVANCE)
        {
            InstancieWall(ProchainePositionDeCreation - 2 * transform.forward + 2 * transform.right + new Vector3(0.0f, 1.5f, 0.0f), new Vector3(0.1f, 3.0f, 1.0f), Mur);
            InstancieWall(ProchainePositionDeCreation - 2 * transform.forward - 2 * transform.right + new Vector3(0.0f, 1.5f, 0.0f), new Vector3(0.1f, 3.0f, 1.0f), Mur);
            GameObject wallDerriere = InstancieWall(ProchainePositionDeCreation - 2 * transform.forward + new Vector3(0.0f, 1.5f, -0.5f), new Vector3(4.0f, 3.0f, 0.1f), Mur);

            InstancieWall(ProchainePositionDeCreation - transform.forward + 2 * transform.right + new Vector3(0.0f, 1.5f, 0.0f), new Vector3(0.1f, 3.0f, 1.0f), Mur);
            InstancieWall(ProchainePositionDeCreation - transform.forward - 2 * transform.right + new Vector3(0.0f, 1.5f, 0.0f), new Vector3(0.1f, 3.0f, 1.0f), Mur);
        }
        SensDeParcours AlignementDeParcoursPremier = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();

        AlignementDeParcoursPremier.Direction = DerniereInstanceDeSegment.transform.forward;
        DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = bckw;
        ProchainePositionDeCreation += 1.0f * DerniereInstanceDeSegment.transform.forward;
        DerniereInstanceDeSegment    = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);

        // MAJ de la direction du précédent segment
        AlignementDeParcoursPremier           = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
        AlignementDeParcoursPremier.Direction = DerniereInstanceDeSegment.transform.forward;
        DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = bckw;
        ProchainePositionDeCreation    += 1.0f * DerniereInstanceDeSegment.transform.forward;
        DerniereInstanceDeSegment       = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);
        DescripteurDerniereConstruction = TypeDeplacementConstructionLigne.AVANCE;



        // On construit le reste de la ligne
        for (int i = 0; i < NombreDeComposantes - 2; ++i)
        {
            TypeDeplacementConstructionLigne ProchaineConstruction = getNextTypeDeplacementConstructionLigne();
            if (ProchaineConstruction == TypeDeplacementConstructionLigne.AVANCE)
            {
                // MAJ de la direction du précédent segment
                SensDeParcours AlignementDeParcours = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = DerniereInstanceDeSegment.transform.forward;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = bckw;
                ProchainePositionDeCreation += 1.0f * DerniereInstanceDeSegment.transform.forward;
                DerniereInstanceDeSegment    = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);

                // MAJ de la direction du précédent segment
                AlignementDeParcours           = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = DerniereInstanceDeSegment.transform.forward;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = bckw;
                ProchainePositionDeCreation    += 1.0f * DerniereInstanceDeSegment.transform.forward;
                DerniereInstanceDeSegment       = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);
                DescripteurDerniereConstruction = TypeDeplacementConstructionLigne.AVANCE;
            }
            if (ProchaineConstruction == TypeDeplacementConstructionLigne.TOURNEDROITE && DescripteurDerniereConstruction != TypeDeplacementConstructionLigne.TOURNEGAUCHE)
            {
                // MAJ de la direction du précédent segment
                SensDeParcours AlignementDeParcours = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = lft;
                ProchainePositionDeCreation += 1.0f * DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment    = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);

                // MAJ de la direction du précédent segment
                AlignementDeParcours           = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = lft;
                ProchainePositionDeCreation    += 1.0f * DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment       = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);
                DescripteurDerniereConstruction = TypeDeplacementConstructionLigne.TOURNEDROITE;
            }
            if (ProchaineConstruction == TypeDeplacementConstructionLigne.TOURNEGAUCHE && DescripteurDerniereConstruction != TypeDeplacementConstructionLigne.TOURNEDROITE)
            {
                // MAJ de la direction du précédent segment
                SensDeParcours AlignementDeParcours = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = -DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = rght;
                ProchainePositionDeCreation -= 1.0f * DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment    = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);

                // MAJ de la direction du précédent segment
                AlignementDeParcours           = DerniereInstanceDeSegment.GetComponent <SensDeParcours>();
                AlignementDeParcours.Direction = -DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment.GetComponents <MeshRenderer>()[0].material.mainTexture = rght;
                ProchainePositionDeCreation    -= 1.0f * DerniereInstanceDeSegment.transform.right;
                DerniereInstanceDeSegment       = InstancieSegment(ProchainePositionDeCreation, new Vector3(1.0f, 0.0001f, 1.0f), Ligne);
                DescripteurDerniereConstruction = TypeDeplacementConstructionLigne.TOURNEGAUCHE;
            }
        }

        // On ajoute l'objectif en fin de parcours
        ProchainePositionDeCreation += new Vector3(0.0f, 1.0f, 0.0f);
        GameObject InstanceDObjectif = Instantiate(PrefabObjectif, Ligne.transform, true);

        InstanceDObjectif.transform.position   = ProchainePositionDeCreation;
        InstanceDObjectif.transform.localScale = new Vector3(2.0f, 2.0f, 2.0f);

        PosisitonObjectif = ProchainePositionDeCreation;
    }