// useable on a single target with no to-hit roll public override void OnActivate(Character caster, bool doStatus = true) { Prop target = GetTarget(caster); if (target) { float charge = caster.stats[RPGSettings.StatName.Charge.ToString()].currentValue * 0.01f; Character ctarget = target as Character; if (ctarget) { ctarget.MakeAwareOf(caster); } // draw the beam to the target DrawBeam(caster, target); // check for deflection shields on the target HitResponse.ReflectionType deflect = target.GetReflection(type); if (deflect != HitResponse.ReflectionType.None) { // get all targets except the primary one on the other team List <Character> targets = new List <Character>(); Character[] all = PowerArea.getAll(); for (int i = 0; i < all.Length; i++) { // TODO - chaining ally powers if (!all[i].dead && all[i].GetTeam() != ctarget.team) { targets.Add(all[i]); } } Arc(ctarget, targets, charge); return; } // no deflection, carry on... bool hit = Apply(target, charge, caster, doStatus); CheckChaining(ctarget, charge); } }
void OnTriggerEnter(Collider col) { HitResponse.ReflectionType deflect = HitResponse.ReflectionType.None; bool finished = true; Prop ch = col.gameObject.GetComponent <Prop>(); if (ch != caster) { if (ch) { // check to see if we deflect it first deflect = ch.GetReflection(parentPower.type); bool apply = (deflect == HitResponse.ReflectionType.None); bool bounce = !apply; bool chaining = false; if (chains < (parentPower as PowerProjectile).maxChains) { chains++; bounce = true; chaining = true; deflect = HitResponse.ReflectionType.Redirect; } if (apply) { // apply the power normally // bullshit correction because the coordinates are coming out weird here Vector3 pos = ch.transform.position; pos.y = 0; ch.transform.position = pos; // if we miss (based on accuracy), set the flag here so we dont destroy the projectile if (!parentPower.Apply(ch, charge, caster as Character, doStatus)) { finished = false; } } if (bounce) { finished = false; // reverse direction for now int team = -1; Character cha = (chaining ? caster : ch) as Character; if (cha) { team = cha.team; } float speed = velocity.magnitude; velocity = speed * HitResponse.Reflect(ch, caster.transform.position, deflect, team); startPos = transform.position; if (!chaining) { caster = ch as Character; } } } if (finished) { ObjectFactory.Recycle(gameObject); } } }