public override void Init(TileCoord _coord) { size = new TowerSize(TowerWidth.narrow, TowerHeight.tall); idleAnimation = contentManager.LoadAnimation("MageTower", "Idle", (int)size.Width, (int)size.Height, 350f); attackAnimation = contentManager.LoadAnimation("MageTower", "Attack", (int)size.Width, (int)size.Height, 350f); //attack animation coord = _coord; animState = TowerAnimationState.Idle; //nearestEntity = entityManager.Dummy; attackRadius = TowerAttackRadius.medium; attackRadiusSquared = (float)System.Math.Pow((double)attackRadius, 2); dmgPotential = (int)TowerDmgPotential.Medium; attackCooldown = TowerAttackCooldown.medium; sightedEntities = new List <Entity>(); }
public override void Update(GameTime gameTime) { if (!IsPreviewTower) { sightedEntities.Clear(); for (int i = 0; i < entityManager.Entities.Count; i++) { if ((entityManager.Entities[i].Position - this.coord.ToVector2()).LengthSquared() < attackRadiusSquared) { sightedEntities.Add(entityManager.Entities[i]); //if ((entityManager.Entities[i].Position - this.coord.ToVector2()).LengthSquared() < (nearestEntity.Position - this.coord.ToVector2()).LengthSquared()) { // nearestEntity = entityManager.Entities[i]; // animState = TowerAnimationState.Attack; // targetEntity = entityManager.Entities[i]; //} } } } if (sightedEntities.Count != 0) { int min = 1000; int index = 0; for (int i = 0; i < sightedEntities.Count; i++) { if (sightedEntities[i].CurrentHealth > min) { min = sightedEntities[i].CurrentHealth; index = i; } } targetEntity = sightedEntities[index]; } else { targetEntity = null; } if (targetEntity != null) { animState = TowerAnimationState.Attack; } else if (targetEntity == null && sightedEntities.Count != 0) { } else { animState = TowerAnimationState.Idle; } switch (animState) { case TowerAnimationState.Attack: attackAnimation.updateAnimation(gameTime); if (timeSinceLastAttack > (int)attackCooldown / 2) { targetEntity.TakeDamage(dmgPotential); timeSinceLastAttack = 0; } break; case TowerAnimationState.Idle: idleAnimation.updateAnimation(gameTime); break; default: break; } timeSinceLastAttack += (float)gameTime.ElapsedGameTime.TotalSeconds; }