Example #1
0
        // 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);
        }
Example #2
0
 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;
     }
 }
Example #3
0
        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);
            }
        }