virtual protected void bounceEffect(GameObject targ)
    {
        EndEffectData ed = new EndEffectData();

        ed.pos       = transform.position;
        ed.rot       = transform.rotation;
        ed.magnitude = pws.Stats.damage;
        gameObject.SendMessage("BounceEffect", ed);
    }
    private void endEffect(GameObject targ)
    {
        EndEffectData ed = new EndEffectData();

        ed.targ      = targ;
        ed.pos       = transform.position;
        ed.rot       = transform.rotation;
        ed.magnitude = pws.Stats.damage;
        gameObject.SendMessage("EndEffect", ed);
    }
コード例 #3
0
    void EndEffect(EndEffectData ed)
    {
        if (ed.targ == null)
        {
            return;
        }
        DamageInfo d = new DamageInfo();

        d.baseDamage = ed.magnitude;
        DamageableItem di = ed.targ.GetComponent <DamageableItem> ();

        if (di != null)
        {
            d.target = di;
            dmg.DealDamage(d);
        }
    }
コード例 #4
0
    void EndEffect(EndEffectData ed)
    {
        GameObject o = Instantiate <GameObject> (objectToSpawn);

        o.transform.position = transform.TransformPoint(spawnOffset);
    }
    protected override void Update()
    {
        if (pws == null)
        {
            Destroy(gameObject);
            return;
        }
        if (pws.gameObject.layer == LayerMask.NameToLayer("Item"))
        {
            Destroy(gameObject);
            return;
        }

        transform.position = (pws.transform.TransformPoint(pws.barrelPos));
        transform.rotation = (Quaternion.FromToRotation(new Vector3(0, 0, 1), pws.transform.TransformDirection(pws.barrelDir)) * relativeSpread);
        float range;
        bool  raycastHit;

        if (isPiercing)
        {
            raycastHit = Physics.Raycast(transform.position, transform.forward, out rc, beamRange, LayerMask.GetMask("Terrain"));
        }
        else
        {
            raycastHit = Physics.Raycast(transform.position, transform.forward, out rc, beamRange, hitLayer);
        }
        if (raycastHit)
        {
            range = rc.distance;

            for (int i = 0; i < beamRes; i++)
            {
                beamPositions[i] = Vector3.Lerp(transform.position, transform.position + transform.forward * rc.distance, (float)i / (float)beamRes);
            }

            lr.SetPositions(beamPositions);
        }
        else
        {
            range = beamRange;
            for (int i = 0; i < beamRes; i++)
            {
                beamPositions[i] = Vector3.Lerp(transform.position, transform.position + transform.forward * beamRange, (float)i / (float)beamRes);
            }
            lr.SetPositions(beamPositions);
        }

        float lrWidth;

        if (timeAlive < fadeInTime)
        {
            lrWidth = fadeInWidthCurve.Evaluate(timeAlive / fadeInTime) * beamWidth;
        }
        else if (timeAlive < lifetime + fadeInTime || (pws.isContinuous && !hasStoppedFiring))
        {
            lrWidth = lifeLoopWidthCurve.Evaluate((timeAlive - fadeInTime) / lifeLoopFrequency) * beamWidth;

            RaycastHit[]  rci = Physics.BoxCastAll(transform.position, new Vector3(lrWidth / 2, 0.5f, 1.0f), transform.forward, transform.rotation, range, hitLayer);
            EndEffectData ed;
            foreach (var item in rci)
            {
                ed      = new EndEffectData();
                ed.targ = item.collider.gameObject;
                ed.pos  = item.point;
                ed.rot  = transform.rotation;
                if (pws.isContinuous)
                {
                    ed.magnitude = pws.Stats.damage * Time.deltaTime;
                }
                else
                {
                    ed.magnitude = pws.Stats.damage * (Time.deltaTime / lifetime);
                }
                SendMessage("EndEffect", ed);
            }

            ed           = new EndEffectData();
            ed.targ      = null;
            ed.pos       = transform.position + transform.forward * range;
            ed.rot       = transform.rotation;
            ed.magnitude = pws.Stats.damage;
            SendMessage("EndEffect", ed);
        }
        else
        {
            lrWidth = fadeOutWidthCurve.Evaluate((timeAlive - (lifetime + fadeInTime)) / fadeOutTime) * beamWidth;
        }
        lr.widthMultiplier = lrWidth;



        timeAlive += Time.deltaTime;

        if (!pws.isFiring)
        {
            hasStoppedFiring = true;
        }
        if (pws.isContinuous)
        {
            if (!hasStoppedFiring)
            {
                lifetime = timeAlive - fadeInTime;
            }
        }



        if (timeAlive >= fadeInTime + lifetime + fadeOutTime)
        {
            Destroy(gameObject);
        }

        base.Update();
    }