Exemple #1
0
    public void CreateLightningStrike()
    {
        RaycastHit hit;

        int Roll = Random.Range(1, 101);

        if (Roll <= GroundStrikeOdds)
        {
            RaycastDistance = 150;
        }
        else
        {
            RaycastDistance = 1;
        }

        if (!ObjectDetected)
        {
            HitPosition = transform.position;
        }

        if (Physics.Raycast(new Vector3(HitPosition.x, HitPosition.y + 40, HitPosition.z), -transform.up, out hit, RaycastDistance, DetectionLayerMask))
        {
            Vector3 pos = hit.point;
            LightningGenerated = true;

            if (hit.collider.GetComponent <Terrain>() != null && !ObjectDetected)
            {
                HitPosition = new Vector3(pos.x, hit.collider.GetComponent <Terrain>().SampleHeight(hit.point) + 0.5f, pos.z);
            }
            else
            {
                HitPosition = new Vector3(HitPosition.x, pos.y + 0.5f, HitPosition.z);
            }

            if (!PlayerDetected)
            {
                //If our hit object contains a LightningFireTag, start a fire.
                if (LightningFireTags.Contains(hit.collider.tag))
                {
                    GameObject HitEffect = UniStormPool.Spawn(LightningStrikeFire, HitPosition, Quaternion.identity);
                    HitEffect.transform.SetParent(hit.collider.transform);
                }

                UniStormPool.Spawn(LightningStrikeEffect, HitPosition, Quaternion.identity);
            }
            else if (PlayerDetected)
            {
                if (LightningFireTags.Contains(hit.collider.tag))
                {
                    UniStormPool.Spawn(LightningStrikeFire, HitPosition, Quaternion.identity);
                }

                UniStormPool.Spawn(LightningStrikeEffect, HitPosition, Quaternion.identity);
            }

            LightningGenerated = false;
            ObjectDetected     = false;
            PlayerDetected     = false;
            HitObject          = null;
        }
    }
Exemple #2
0
    IEnumerator Despawn()
    {
        yield return(new WaitForSeconds(Seconds));

        UniStormPool.Despawn(this.gameObject);
    }