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)); } } }
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); } }
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); } }
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); }
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); }
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); }
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); }