// 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; }
// 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(); } } }
public void setCible(Unite nCible) { cible = nCible; objectif = null; enCombat = true; }
public void recalculeTrajectoireVitesse() { objectif = null; }