// does the animation, FX on caster, sound and uses activation energy protected void StartPower(Character caster) { if (sounds) { sounds.PlayStart(caster.audioSource); } caster.PlayAnim(animation.ToString()); caster.energy -= energyCost; if (userFX) { bool continuous = (mode == Mode.Charge || mode == Mode.Maintain); GameObject fx = userFX.Begin(caster.GetBodyPart(userBodyPart), tint, !continuous, true); // scale up area powers to match the radius PowerArea area = this as PowerArea; if (area) { userFX.ScaleToRadius(fx, area.GetRadius(caster)); } if (continuous) { userFXInstance = fx; } } FaceTarget(caster); }
public override void Apply(Prop ch, Character caster = null) { if (!delays.ContainsKey(ch) || delays[ch] < Time.time) { if (!explosion) { Debug.Log("Explosion " + name + "has no PowerArea"); return; } if (explosion.userFX) { GameObject go = explosion.userFX.Begin(ch.GetBodyPart(explosion.userBodyPart), explosion.tint); explosion.userFX.ScaleToRadius(go, explosion.GetRadius(caster)); } explosion.Explode(ch.transform, caster); delays[ch] = Time.time + 0.4f; } }
void Update() { targets.Clear(); if (previewPower) { Transform t = (previewOnTarget && character.target) ? character.target.transform : character.transform; GetPreviewObject().SetActive(true); GetPreviewObject().transform.position = t.position + Vector3.up; GetPreviewObject().transform.forward = character.target ? character.target.transform.position - character.transform.position : character.transform.forward; previewMeshRenderer.material.SetColor("_TintColor", previewPower.CanUse(character) ? previewColorCan : previewColorCant); if (previewPower.angle >= 360) { previewMeshFilter.mesh = previewSphere; GetPreviewObject().transform.localScale = 2 * previewPower.GetRadius(character) * Vector3.one; } else { previewMeshFilter.mesh = previewCone; float x0 = Mathf.Tan(previewPower.angle * 0.5f * Mathf.Deg2Rad); GetPreviewObject().transform.localScale = new Vector3(x0, x0, 1) * previewPower.GetRadius(character); } targets = previewPower.GetTargets(character, GetPreviewObject().transform.position, GetPreviewObject().transform.forward); } // update multi-reticles foreach (Character ch in previewTargets) { if (targets.Contains(ch) == false) { ch.GetReticle().SetActive(false); } } previewTargets.Clear(); foreach (Character ch in targets) { ch.GetReticle().transform.localScale = 0.8f * Vector3.one; ch.ShowReticle(targetColor); previewTargets.Add(ch); } }