Beispiel #1
0
        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>();
        }
Beispiel #2
0
        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;
        }