public void WithFightingDragonTowerHasExtendedRange() { var tower = new Tower(TowerType.Fire, Vector3D.Zero); var towerProperties = ContentLoader.Load<TowerPropertiesXml>(Xml.TowerProperties.ToString()); var defaultRange = towerProperties.Get(TowerType.Fire).Range; Assert.AreEqual(defaultRange * 1.25f, tower.GetStatValue("Range")); }
public void WithFlyingPenguinTowerHasFasterAttacks() { var tower = new Tower(TowerType.Fire, Vector3D.Zero); var towerProperties = ContentLoader.Load<TowerPropertiesXml>(Xml.TowerProperties.ToString()); var defaultAttackFrequency = towerProperties.Get(TowerType.Fire).AttackFrequency; Assert.AreEqual(defaultAttackFrequency * 1.3333f, tower.GetStatValue("AttackFrequency")); }
public void InitializingTowerCreatesTowerModel() { var tower = new Tower(TowerType.Water, Vector3D.Zero); tower.RenderModel(); Assert.AreEqual(1, EntitiesRunner.Current.GetEntitiesOfType<Model>().Count); Assert.AreEqual(1, EntitiesRunner.Current.GetEntitiesOfType<Tower>().Count); }
private static void DoRadiusAttack(Tower tower, List<Creep> creepsWithinRange) { var type = tower.Type; var power = tower.GetStatValue("Power"); foreach (var creep in creepsWithinRange) creep.ReceiveAttack(type, power, RadiusAttackModifier); }
public void SetUp() { new Player(); tower = new Tower(TowerType.Fire, Vector3D.Zero); creep = new Creep(CreepType.Cloth, Vector3D.Zero); adjustment = new StatAdjustment("TestAdjustment"); }
public void TowerDoesNotAttackInactiveCreep() { var tower = new Tower(TowerType.Water, Vector2D.Zero); var creep = CreateCreepOfType(CreepType.Cloth, Vector3D.UnitY); creep.IsActive = false; AdvanceTimeTillTowerAttacks(tower); Assert.AreEqual(1, creep.GetStatPercentage("Hp")); }
public void TowerDoesNotAttackIfTooFarFromCreep() { var tower = new Tower(TowerType.Water, Vector2D.Zero); var creep = CreateCreepOfType(CreepType.Cloth, 2.0f * Vector3D.UnitY); creep.Position = new Vector3D(100, 100, 0); AdvanceTimeTillTowerAttacks(tower); Assert.IsFalse(tower.IsOnCooldown); Assert.AreEqual(1, creep.GetStatPercentage("Hp")); }
public void TowerDoesNotAttackIfStillInCooldown() { var tower = new Tower(TowerType.Water, Vector2D.Zero); var creep = CreateCreepOfType(CreepType.Cloth, 2.0f * Vector3D.UnitY); tower.RenderModel(); AdvanceToJustBeforeTowerAttack(tower); Assert.IsTrue(tower.IsOnCooldown); Assert.AreEqual(1, creep.GetStatPercentage("Hp")); }
public void WithoutFlyingPenguinTowerHasDefaultAttackFrequency() { player.UnlockAvatar(CreepyTowers.Content.Avatars.Dragon); player.ChangeAvatar(CreepyTowers.Content.Avatars.Dragon); var tower = new Tower(TowerType.Fire, Vector3D.Zero); var towerProperties = ContentLoader.Load<TowerPropertiesXml>(Xml.TowerProperties.ToString()); var defaultAttackFrequency = towerProperties.Get(TowerType.Fire).AttackFrequency; Assert.AreEqual(defaultAttackFrequency, tower.GetStatValue("AttackFrequency")); }
public void WithoutFightingDragonTowerHasDefaultRange() { player.UnlockAvatar(CreepyTowers.Content.Avatars.PiggyBank); player.ChangeAvatar(CreepyTowers.Content.Avatars.PiggyBank); var tower = new Tower(TowerType.Fire, Vector3D.Zero); var towerProperties = ContentLoader.Load<TowerPropertiesXml>(Xml.TowerProperties.ToString()); var defaultRange = towerProperties.Get(TowerType.Fire).Range; Assert.AreEqual(defaultRange, tower.GetStatValue("Range")); }
private static void DamageCreepAndSurroundingCreeps(Tower tower, Creep target, List<Creep> creepsWithinRange) { if (tower.AttackType == AttackType.Circle) DoRadiusAttack(tower, creepsWithinRange); else if (tower.AttackType == AttackType.Cone) DoConeAttack(tower, target, creepsWithinRange); //else if (tower.AttackType == AttackType.DirectShot) // target.ReceiveAttack(tower.Type, tower.Power); }
private static List<Creep> FindAllCreepsWithinRangeOfTower(Tower tower, List<Creep> creeps) { float range = tower.GetStatValue("Range"); float rangeSquared = range * range; var targets = new List<Creep>(); foreach (Creep creep in creeps) { var distance = (creep.Position - tower.Position).LengthSquared; if (distance <= rangeSquared) targets.Add(creep); } return targets; }
private static void DoConeAttack(Tower tower, Creep target, List<Creep> creepsWithinRange) { Vector2D towerPosition = tower.Position.GetVector2D(); Vector2D creepPosition = target.Position.GetVector2D(); Vector2D aim = Vector2D.Normalize(creepPosition - towerPosition); float edgeDotProduct = GetEdgeDotProduct(creepPosition, towerPosition, aim); var power = tower.GetStatValue("Power"); foreach (Creep creep in creepsWithinRange) { var position = creep.Position.GetVector2D(); if (aim.DotProduct(Vector2D.Normalize(position - towerPosition)) >= edgeDotProduct) creep.ReceiveAttack(tower.Type, power, ConeAttackModifier); } }
public static void SpawnTowerInGame(this GameLevel level, TowerType type, Vector2D gridPosition, float rotation = 0.0f) { var properties = ContentLoader.Load<TowerPropertiesXml>(Xml.TowerProperties.ToString()); if (IsCreepInTile(gridPosition) || Player.Current.Gold < properties.Get(type).Cost) return; var index = level.GetIndexForMapData(gridPosition); if (level.MapData[index] != LevelTileType.Placeable) return; level.SetUnreacheableTile(gridPosition, type); if (!level.IsPossibleAddTower(gridPosition)) return; var towerPosInWorldSpace = level.GetWorldCoordinates(gridPosition); var tower = new Tower(type, towerPosInWorldSpace, rotation); tower.RenderModel(); level.EarnGold(-properties.Get(type).Cost); }
public void DisplayAndDisposeTower() { var tower = new Tower(TowerType.Water, Vector3D.Zero, 170.0f); tower.RenderModel(); tower.Dispose(); Assert.AreEqual(0, EntitiesRunner.Current.GetEntitiesOfType<Tower>().Count); }
public void DisplaySliceTower() { var tower = new Tower(TowerType.Slice, Vector3D.Zero, 120.0f); tower.RenderModel(); }
public void DisplayImpactTower() { var tower = new Tower(TowerType.Impact, Vector3D.Zero, 120.0f); tower.RenderModel(); }
public void DisposingTowerRemovesTowerEntity() { var tower = new Tower(TowerType.Water, Vector3D.Zero); tower.Dispose(); Assert.IsFalse(tower.IsActive); }
public void DisplayWaterTower() { var tower = new Tower(TowerType.Water, Vector3D.Zero, 170.0f); tower.RenderModel(); }
private void AdvanceTimeTillTowerAttacks(Tower tower) { var towerCooldown = 1 / tower.GetStatValue("AttackFrequency"); AdvanceTimeAndUpdateEntities(towerCooldown + 0.1f); }
public void ShowWaterTowerWithSunlightEnabled() { new Player(); var camera = Camera.Use<LookAtCamera>(); camera.Position = new Vector3D(0.0f, -4.0f, 2.0f); var tower = new Tower(TowerType.Water, Vector3D.Zero); tower.RenderModel(); }
private void AdvanceToJustBeforeTowerAttack(Tower tower) { var towerCooldown = 1 / tower.GetStatValue("AttackFrequency"); AdvanceTimeAndUpdateEntities(towerCooldown - 0.1f); }
public void ShowTowerFiringAtAMovingCreep() { camera.ZoomLevel = 1 / 20.0f; var tower = new Tower(TowerType.Water, new Vector2D(0, 0)); var creep = new Creep(CreepType.Cloth, new Vector2D(1, 3)); creep.Path = new List<Vector2D> { (new Vector2D(1, -10)) }; tower.RenderModel(); creep.RenderModel(); new TowerTargetFinder(); }
public void CheckForCreepUnderAttack() { var tower = new Tower(TowerType.Slice, new Vector2D(0, 0)); tower.RenderModel(); var creep = new Creep(CreepType.Cloth, new Vector2D(1, 0)); new TowerTargetFinder(); AdvanceTimeAndUpdateEntities(2.1f); Assert.Less(creep.GetStatPercentage("Hp"), 1); }
public void ShowTowerFiringAtCreepAtRegularIntervals() { camera.ZoomLevel = 1 / 20.0f; var tower = new Tower(TowerType.Water, new Vector2D(0, 0)); var creep = new Creep(CreepType.Cloth, new Vector2D(2, 0)); tower.RenderModel(); creep.RenderModel(); new TowerTargetFinder(); }
public void DisplayAcidTower() { var tower = new Tower(TowerType.Acid, Vector3D.Zero, 120.0f); tower.RenderModel(); }
public void InAbsenceOfCreepsTheTowerDoesNotFire() { var tower = new Tower(TowerType.Fire, Vector2D.Zero); AdvanceTimeTillTowerAttacks(tower); Assert.IsFalse(tower.IsOnCooldown); }
public void DisplayFireTower() { var tower = new Tower(TowerType.Fire, Vector3D.Zero, 150.0f); tower.RenderModel(); }
public void ShowAllTowerTypesAndEffects() { var tower = new Tower(TowerType.Acid, Vector3D.Zero); tower.RenderModel(); var creep = new Creep(CreepType.Cloth, new Vector2D(2, 8)); new Command(() => { tower.FireAtCreep(creep); }).Add(new KeyTrigger(Key.Space)); new Command(() => { tower.RotationZ += 2; }).Add(new KeyTrigger(Key.A, State.Pressed)); new Command(() => { tower.RotationZ -= 2; }).Add(new KeyTrigger(Key.D, State.Pressed)); new Command(() => { //ncrunch: no coverage start tower.Dispose(); tower = new Tower(CycleTypeUpwards(tower.Type), Vector3D.Zero); tower.RenderModel(); //ncrunch: no coverage end }).Add(new KeyTrigger(Key.W)); new Command(() => { //ncrunch: no coverage start tower.Dispose(); tower = new Tower(CycleTypeDownwards(tower.Type), Vector3D.Zero); tower.RenderModel(); //ncrunch: no coverage end }).Add(new KeyTrigger(Key.S)); }
public void DirectShotTowerFiresAtNearestCreep() { var tower = new Tower(TowerType.Water, Vector2D.Zero); var creep = CreateCreepOfType(CreepType.Cloth, Vector3D.UnitY); tower.RenderModel(); var furtherCreep = CreateCreepOfType(CreepType.Cloth, new Vector2D(2.75f, 2.75f)); AdvanceTimeTillTowerAttacks(tower); AdvanceTimeAndUpdateEntities(1.0f); Assert.IsTrue(tower.IsOnCooldown); Assert.LessOrEqual(0, EntitiesRunner.Current.GetEntitiesOfType<ParticleEmitter>().Count); Assert.Less(creep.GetStatPercentage("Hp"), 1); Assert.AreEqual(1, furtherCreep.GetStatPercentage("Hp")); }