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); }
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); } }
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(); }