Ejemplo n.º 1
0
    // Use this for initialization
    override protected void Start()
    {
        base.Start();

        objectif                  = null;
        cible                     = null;
        hitPoints                 = maxHitPoints;
        spriteRenderer            = GetComponent <SpriteRenderer>();
        colorSpriteRenderer       = transform.GetChild(0).gameObject.GetComponent <SpriteRenderer>();
        colorSpriteRenderer.color = element.couleur;
        cooldown                  = 0;
        enCombat                  = false;
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    override protected void FixedUpdate()
    {
        base.FixedUpdate();
        if (!Pause.isPaused)
        {
            if (!paralise)     // Vérifie que le soldat n'est pas en pause
            {
                if (!enCombat) // Si le soldat n'est pas en combat
                {
                    Soldat[] listeSoldats = FindObjectsOfType <Soldat>();
                    float    minDist      = detect + 1; // on initialise la distance minimale quand étant supérieur à sa portée de détection
                    float    dist;
                    Soldat   pCible = null;
                    foreach (Soldat sol in listeSoldats)
                    {
                        dist = calcDistance(sol.gameObject);
                        if (sol.camp != camp && dist < minDist)
                        {
                            minDist = dist;
                            pCible  = sol;
                        }
                    }

                    if (pCible != null)
                    {
                        cible    = pCible;
                        objectif = null;
                        enCombat = true;
                    }

                    if (objectif == null)// s'il n'a pas d'objectif en cours
                    {
                        PointPassage[] points      = UnityEngine.Object.FindObjectsOfType <PointPassage>();
                        bool           found       = false;
                        int            indexPoints = 0;
                        while (indexPoints < points.Length && !found)
                        {
                            if (points[indexPoints].numeroChemin == chemin && points[indexPoints].ordre == etape)
                            {
                                objectif    = points[indexPoints];
                                distanceX   = objectif.transform.position.x - transform.position.x;
                                distanceY   = objectif.transform.position.y - transform.position.y;
                                distance    = Mathf.Sqrt(distanceX * distanceX + distanceY * distanceY);
                                oldDistance = distance;
                                vitesseX    = (distanceX / distance) * effectiveSpeed;
                                vitesseY    = (distanceY / distance) * effectiveSpeed;
                                found       = true;
                            }
                            indexPoints++;
                        }
                        if (!found)
                        {
                            gagne();
                        }
                    }
                    if (transform != null && objectif != null)
                    {
                        distanceX = objectif.transform.position.x - transform.position.x;
                        distanceY = objectif.transform.position.y - transform.position.y;
                        distance  = Mathf.Sqrt(distanceX * distanceX + distanceY * distanceY);
                        if (distance < marge || distance > oldDistance)
                        {
                            if (camp == 1)
                            {
                                etape++;
                            }
                            else
                            {
                                etape--;
                            }
                            objectif = null;
                        }
                        else
                        {
                            transform.Translate(vitesseX, vitesseY, 0);
                        }
                        oldDistance = distance;
                    }
                }

                else // Si le soldat est actuellement en combat
                {
                    if (cible != null)
                    {
                        distanceX = cible.transform.position.x - transform.position.x;
                        distanceY = cible.transform.position.y - transform.position.y;
                        distance  = Mathf.Sqrt(distanceX * distanceX + distanceY * distanceY);
                        if (distance < portee)
                        {
                            if (cooldown <= 0)
                            {
                                attaque(cible);
                            }
                        }
                        else
                        {
                            vitesseX = (distanceX / distance) * effectiveSpeed;
                            vitesseY = (distanceY / distance) * effectiveSpeed;
                            transform.Translate(vitesseX, vitesseY, 0);
                        }
                    }
                    else
                    {
                        enCombat = false;
                    }
                }

                if (Mathf.Abs(vitesseX) > Mathf.Abs(vitesseY)) // Les lignes qui suivent changent l'image en fonction de la direction du soldat
                {
                    if (vitesseX > 0)
                    {
                        spriteRenderer.sprite      = imageDroite;
                        colorSpriteRenderer.sprite = imageDroiteCouleur;
                    }
                    else
                    {
                        spriteRenderer.sprite      = imageGauche;
                        colorSpriteRenderer.sprite = imageGaucheCouleur;
                    }
                }
                else
                {
                    if (vitesseY > 0)
                    {
                        spriteRenderer.sprite      = imageDos;
                        colorSpriteRenderer.sprite = imageDosCouleur;
                    }
                    else
                    {
                        spriteRenderer.sprite      = imageFace;
                        colorSpriteRenderer.sprite = imageFaceCouleur;
                    }
                }
                if (cooldown > 0)
                {
                    cooldown--;
                }
            }
            if (hitPoints <= 0)
            {
                meurt();
            }
        }
    }
Ejemplo n.º 3
0
 public void setCible(Unite nCible)
 {
     cible    = nCible;
     objectif = null;
     enCombat = true;
 }
Ejemplo n.º 4
0
 public void recalculeTrajectoireVitesse()
 {
     objectif = null;
 }