Esempio n. 1
0
    public void ComputeNeighbors()
    {
        Vector3 f1        = transform.position;
        Vector3 direction = new Vector3(Mathf.Cos(GlobalVariables.windDirection), 0, Mathf.Sin(GlobalVariables.windDirection));
        float   focalDist = GlobalVariables.windPower * GlobalVariables.minRadiusFire / 25;
        Vector3 f2        = f1 + (direction * focalDist);

        maxDistance = focalDist + GlobalVariables.minRadiusFire; // modification de la distance max
                                                                 //Tableau contenant les colliders proches
        Collider[] closeColliders = Physics.OverlapSphere(transform.position, maxDistance);
        //Pour chacun d'entre eux
        foreach (Collider closeCollider in closeColliders)
        {
            //Recuperer le composant inflammable
            Inflammable closeInflammable = closeCollider.GetComponentInParent <Inflammable>();
            if (closeInflammable != null && closeInflammable != this)       //si non nul et non this

            {
                if (((f1 - closeInflammable.transform.position).magnitude +
                     (f2 - closeInflammable.transform.position).magnitude) <= maxDistance)  // s'il se trouve dans l'ellipse
                {
                    AddCloseTree(closeInflammable);
                }

                Vector3 of1 = closeInflammable.transform.position;
                Vector3 of2 = of1 + (direction * focalDist);
                if (((of1 - transform.position).magnitude +
                     (of2 - transform.position).magnitude) <= maxDistance)
                {
                    closeInflammable.AddCloseTree(this);
                }
            }
        }
    }
Esempio n. 2
0
 public void AddCloseTree(Inflammable closeTree)
 {
     if (!closeTrees.Contains(closeTree))
     {
         closeTrees.Add(closeTree);
     }
 }
Esempio n. 3
0
    void FightFire(Inflammable burningTree)
    {
        WaterStreamFX.transform.localEulerAngles = new Vector3(0, 0, -90);
        myTree = burningTree;
        Vector3 treePosition = burningTree.transform.position;

        isFighting = true;
        isMoving   = false;
        WaterStreamFX.SetActive(true);
        WaterStreamFX.GetComponentInChildren <EllipsoidParticleEmitter>().emit = true;

        //orienter le jet d'eau vers l'arbre le plus proche
        float myAngle = Vector3.Angle(transform.right, treePosition - transform.position);

        if (Vector3.Cross(transform.right, treePosition - transform.position).y < 0)
        {
            myAngle = -myAngle;
        }
        WaterStreamFX.transform.Rotate(new Vector3(0, 0, myAngle));

        //Vector3 myCenter = transform.TransformPoint(WaterStreamFX.GetComponent<SphereCollider>().center);
        Vector3 myCenter = WaterStreamFX.GetComponentInChildren <SphereCollider>().transform.position;

        foreach (Collider collider in Physics.OverlapSphere(myCenter, 7f))
        {
            if (collider.transform.parent != null)
            {
                if (collider.transform.parent.tag == "Tree")
                {
                    collider.GetComponentInParent <Inflammable>().Watered();
                }
            }
        }
    }
Esempio n. 4
0
    public void StartFire()
    {
        bool fireStarted = false;

        Collider[] closeColliders = Physics.OverlapSphere(transform.position, Radius);
        foreach (Collider closeCollider in closeColliders)
        {
            Inflammable closeInflammable = closeCollider.GetComponentInParent <Inflammable>();
            //Si il n'est pas inflammable, passe
            if (closeInflammable == null)
            {
                continue;
            }

            closeInflammable.Ignite();
            fireStarted = true;
            GlobalVariables.SetFirePoint(transform.position);
        }

        if (fireStarted)
        {
            //this.transform.position = Vector3.zero;
            //gameObject.SetActive(false);
            GetComponent <Renderer>().materials[0].color = new Color(0, 0, 1, 0.267f);
            Radius = 2;
            Resize();
            GlobalVariables.NextState();

            if (grapher != null)
            {
                grapher.launch();
            }
        }
    }
Esempio n. 5
0
    //Reçoit le feu de son voisin
    public void PassFire(Inflammable foreignTree)
    {
        if (isBurnt)
        {
            return;
        }
        bool  b           = IsBurning();
        float foreignFire = foreignTree.GetComponent <Inflammable>().fireValue;
        float distance    = Vector3.Distance(gameObject.transform.position, foreignTree.transform.position);

        fireValue += (foreignFire * 0.00005f) * GlobalVariables.Speed * (maxDistance - distance) / maxDistance;
        fireValue  = Mathf.Clamp(fireValue, 0f, 100f);
        if (IsBurning() && !b)
        {
            StartFire();
        }
    }
Esempio n. 6
0
 void StopFighting()
 {
     isFighting = false;
     myTree     = null;
     WaterStreamFX.GetComponentInChildren <EllipsoidParticleEmitter>().emit = false;
 }