Ejemplo n.º 1
0
 public override Action <ProceduralSpell, Player, Vector2, Vector2, Entity> GetCastAction()
 {
     return(delegate(ProceduralSpell spell, Player player, Vector2 origin, Vector2 target, Entity caster)
     {
         if (caster is Player)
         {
             PlayerCharacter character = ((Player)caster).GetModPlayer <PlayerCharacter>();
             foreach (ProceduralSpellProj proj in character.circlingProtection)
             {
                 if (proj.projectile.modProjectile is ProceduralSpellProj)
                 {
                     proj.projectile.Kill();
                 }
             }
             character.circlingProtection.Clear();
         }
         else if (caster is Projectile)
         {
             ProceduralMinion minion = (ProceduralMinion)((Projectile)caster).modProjectile;
             foreach (ProceduralSpellProj proj in minion.circlingProtection)
             {
                 if (proj.projectile.modProjectile is ProceduralSpellProj)
                 {
                     proj.projectile.Kill();
                 }
             }
             minion.circlingProtection.Clear();
         }
         float spread = GetSpread(spell.projCount);
         Vector2 velocity = new Vector2(0f, -1.5f);
         for (int i = 0; i < spell.projCount; i += 1)
         {
             ProceduralSpellProj proj = spell.CreateProjectile(player, Vector2.Zero, spread * i, origin, caster);
             proj.projectile.timeLeft = RotTimeLeft;
             proj.displacementVelocity = velocity.RotatedBy(i * spread * API.Tau);
             proj.displacementAngle = i * spread * (float)API.Tau;
             if (caster is Player)
             {
                 player.GetModPlayer <PlayerCharacter>().circlingProtection.Add(proj);
             }
             else if (caster is Projectile)
             {
                 ((ProceduralMinion)((Projectile)caster).modProjectile).circlingProtection.Add(proj);
             }
         }
     });
 }