Example #1
0
        public static void ActivateKnockBack(UnitAbility ability, Unit unit, Unit vs, Battlefield battlefield, List <Unit> enemies)
        {
            //List<Unit> Targets = battlefield.Units.Where(x => Vector2.Distance(unit.RealPos, x.RealPos) < ability.Radius).ToList();
            List <Unit> Targets = enemies.Where(x => Vector2.Distance(unit.RealPos, x.RealPos) <= ability.Radius).ToList();

            foreach (Unit ent in Targets)
            {
                if (ent.Attributes.Contains(UnitAttributes.Massive))
                {
                    continue;
                }
                lock (ent)
                {
                    ent.Target = null;

                    Vector2 BlinkDirection = MoveService.RotatePoint(unit.RealPos, ent.RealPos, 180);
                    //float distance = Vector2.Distance(unit.RealPos, BlinkDirection);
                    //float t = 1 / distance;
                    float   t        = 1;
                    Vector2 BlinkPos = new Vector2();
                    BlinkPos.X  = (1 - t) * ent.RealPos.X + t * BlinkDirection.X;
                    BlinkPos.Y  = (1 - t) * ent.RealPos.Y + t * BlinkDirection.Y;
                    ent.RealPos = BlinkPos;
                    ent.RelPos  = MoveService.GetRelPos(ent.RealPos);
                    ent.Path.Remove(ent.Path.Last());
                    ent.Path.Add(new KeyValuePair <float, float>(ent.RelPos.Key, ent.RelPos.Value));
                }
            }
        }
Example #2
0
        public static void ActivateBlink(UnitAbility ability, Unit unit, Unit vs, Battlefield battlefield, List <Unit> enemies)
        {
            if (unit.Shieldbar + unit.Healthbar < (unit.Shieldpoints + unit.Healthpoints) / 3)
            {
                ability.isActive = true;
                unit.Target      = null;
                vs.Target        = null;

                Vector2 BlinkDirection = MoveService.RotatePoint(vs.RealPos, unit.RealPos, 180);

                float d = Vector2.Distance(unit.RealPos, vs.RealPos);
                if (d < 0)
                {
                    d *= -1;
                }
                float t = 1;
                if (d > 0)
                {
                    t = (8 / 2) / d;
                    //if (t > 1)
                    //    t = 1;
                }

                Vector2 BlinkPos = new Vector2();
                BlinkPos.X = (1 - t) * unit.RealPos.X + t * BlinkDirection.X;
                BlinkPos.Y = (1 - t) * unit.RealPos.Y + t * BlinkDirection.Y;

                unit.RealPos = BlinkPos;
                unit.RelPos  = MoveService.GetRelPos(unit.RealPos);
            }
        }
Example #3
0
 public static void DeactivatePsionicTransfer(UnitAbility ability, Unit unit)
 {
     if (ability.TargetPos != null && ability.TargetPos != Vector2.Zero)
     {
         unit.Target  = null;
         unit.RealPos = ability.TargetPos;
         unit.RelPos  = MoveService.GetRelPos(unit.RealPos);
     }
 }
Example #4
0
        public static async Task Act(Unit unit, Battlefield battlefield, List <Unit> enemies1, List <Unit> enemies2)
        {
            _logger.LogDebug(unit.ID + " act (" + unit.Healthbar + " " + unit.Speed + ") " + unit.Name);

            if (unit.Healthbar > 0)
            {
                List <Unit> enemies = new List <Unit>();
                List <Unit> allies  = new List <Unit>();
                if (unit.Owner <= 3)
                {
                    enemies = enemies1;
                    allies  = enemies2;
                }
                else
                {
                    enemies = enemies2;
                    allies  = enemies1;
                }

                await AbilityService.UseAbilities(unit, battlefield, enemies, allies);

                if (unit.Target != null && unit.Target.Healthbar > 0)
                {
                    await AbilityService.TriggerAbilities(unit, unit.Target, UnitAbilityTrigger.EnemyInVision, battlefield, enemies);

                    await FightService.Fight(unit, unit.Target, battlefield, enemies);
                }
                else
                {
                    KeyValuePair <Unit, Unit> myenemy = EnemyinRange(unit, enemies);

                    if (myenemy.Key.Name != null)
                    {
                        await AbilityService.TriggerAbilities(unit, myenemy.Key, UnitAbilityTrigger.EnemyInVision, battlefield, enemies);

                        unit.Target = myenemy.Key;
                        await FightService.Fight(unit, myenemy.Key, battlefield, enemies);
                    }
                    else
                    {
                        if (myenemy.Value.Name != null)
                        {
                            await AbilityService.TriggerAbilities(unit, myenemy.Value, UnitAbilityTrigger.EnemyInVision, battlefield, enemies);
                        }
                        await MoveService.Move(unit, myenemy.Value, battlefield);
                    }
                }
            }
            unit.Path.Add(new KeyValuePair <float, float>(unit.RelPos.Key, unit.RelPos.Value));
            Interlocked.Increment(ref battlefield.Done);
            _logger.LogDebug(unit.ID + " act done (" + unit.Healthbar + " " + unit.Speed + ") " + unit.Name);
        }
Example #5
0
        public static void NewUnitPos(Player _player, Unit myunit)
        {
            myunit.BuildPos = new Vector2(myunit.PlacePos.Y, 30 - myunit.PlacePos.X - 2.5f);
            if (_player.Pos > 3)
            {
                myunit.BuildPos = mirrorImage(myunit.BuildPos);
            }

            myunit.RealPos  = myunit.BuildPos;
            myunit.Pos      = myunit.BuildPos;
            myunit.SerPos   = new Vector2Ser();
            myunit.SerPos.x = myunit.BuildPos.X;
            myunit.SerPos.y = myunit.BuildPos.Y;
            myunit.RelPos   = MoveService.GetRelPos(myunit.RealPos);
        }
Example #6
0
        public static void ActivateKD8Charge(UnitAbility ability, Unit unit, Unit vs, Battlefield battlefield, List <Unit> enemies)
        {
            ability.isActive = true;
            Unit kd8 = UnitPool.Units.SingleOrDefault(x => x.Name == "KD8").DeepCopy();

            kd8.ID    = unit.Ownerplayer.Game.GetUnitID();
            kd8.Owner = unit.Owner;
            Vector2 pos    = new Vector2();
            Vector2 intpos = new Vector2();

            (pos, intpos) = MoveService.GetTargetPos(10, unit, vs.RealPos, 0);
            kd8.RealPos   = pos;
            kd8.Pos       = intpos;
            kd8.RelPos    = MoveService.GetRelPos(pos);
            battlefield.Units.Add(kd8);
        }
Example #7
0
        public static List <Vector2> ResetUnits(List <Unit> units)
        {
            List <Vector2> pos = new List <Vector2>();

            foreach (Unit u in units)
            {
                lock (u)
                {
                    u.Healthbar = u.Healthpoints;
                    u.Shieldbar = u.Shieldpoints;
                    if (u.Energypoints > 0)
                    {
                        u.Energybar = UnitPool.Units.SingleOrDefault(x => x.Name == u.Name).Energybar;
                    }
                    u.Target  = null;
                    u.Pos     = u.BuildPos;
                    u.RealPos = u.BuildPos;
                    u.RelPos  = MoveService.GetRelPos(u.RealPos);
                    u.Status  = UnitStatuses.Spawned;
                    pos.Add(u.Pos);
                    u.Path = new List <KeyValuePair <float, float> >();

                    foreach (var ability in u.Abilities.ToArray())
                    {
                        ability.TargetPos = Vector2.Zero;
                        bool deactivated = ability.Deactivated;
                        ability.isActive = false;
                        ability.Deactivate(u);

                        if (UnitPool.Units.SingleOrDefault(x => x.Name == u.Name) != null && UnitPool.Units.SingleOrDefault(x => x.Name == u.Name).Abilities.SingleOrDefault(x => x.Ability == ability.Ability) != null)
                        {
                            UnitAbility reset = new UnitAbility();
                            reset             = AbilityPool.Abilities.Where(x => x.Ability == ability.Ability).FirstOrDefault().DeepCopy();
                            reset.Deactivated = deactivated;
                            u.Abilities.Remove(ability);
                            u.Abilities.Add(reset);
                        }
                    }
                }
            }
            return(pos);
        }