Example #1
0
 public SwampBoss()
     : base(-1)
 {
     species       = "Swamp/boss";
     hitbox        = new Hitbox(200, 200);
     hitbox.active = true;
     maxHealth     = 2500;
     health        = maxHealth;
     target        = Game1.characterManager.getRandomLiveCharacter();
     currentState  = EnemyState.Attacking;
     currentAI     = EnemyAI.SwampBoss;
     oldAI         = EnemyAI.SwampBoss;
     if (!texturesLoaded)
     {
         for (int i = 1; i <= 20; i++)
         {
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss back " + i);
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss side " + i);
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss front " + i);
         }
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center 1");
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center 2");
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center bleed");
         texturesLoaded = true;
     }
     bleedingTexture  = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss center bleed");
     pulsatingTexture = new AnimatedTexture(Enemy.BASETEX + species + " center", 2, 250);
     setTexture(pulsatingTexture);
 }
Example #2
0
        public BalloonBomb(AOE p, bool thrown = true)
            : base()
        {
            parent = p;
            if (!thrown)
            {
                setTexture(new AnimatedTexture(AOE.BASETEX + "aoe storedballoon"));
                radius = 0f;
            }
            else
            {
                setTexture(new AnimatedTexture(AOE.BASETEX + "aoe balloonbomb"));
                radius = 0f;
                switch (parent.curDirection)
                {
                case Character.Direction.Left: position = parent.getLeft(); break;

                case Character.Direction.Right: position = parent.getRight(); break;

                case Character.Direction.Forward: position = parent.getBottom(); break;

                case Character.Direction.Back: position = parent.getTop(); break;
                }
                velocity     = AOE.BALLOON_BOMBS_SPEED * parent.fourWayDirection();
                acceleration = AOE.BALLOON_BOMBS_ACCELERATION * parent.fourWayDirection();
            }

            explosion = new AnimatedTexture(AOE.BASETEX + "aoe-balloon-explode", 4, 100);
        }
Example #3
0
        public BalloonBomb(AOE p, bool thrown=true)
            : base()
        {
            parent = p;
            if (!thrown)
            {
                setTexture(new AnimatedTexture(AOE.BASETEX + "aoe storedballoon"));
                radius = 0f;
            }
            else
            {
                setTexture(new AnimatedTexture(AOE.BASETEX + "aoe balloonbomb"));
                radius = 0f;
                switch (parent.curDirection)
                {
                    case Character.Direction.Left: position = parent.getLeft(); break;
                    case Character.Direction.Right: position = parent.getRight(); break;
                    case Character.Direction.Forward: position = parent.getBottom(); break;
                    case Character.Direction.Back: position = parent.getTop(); break;
                }
                velocity = AOE.BALLOON_BOMBS_SPEED * parent.fourWayDirection();
                acceleration = AOE.BALLOON_BOMBS_ACCELERATION * parent.fourWayDirection();
            }

            explosion = new AnimatedTexture(AOE.BASETEX + "aoe-balloon-explode", 4, 100);
        }
Example #4
0
 public SwampBoss()
     : base(-1)
 {
     species = "Swamp/boss";
     hitbox = new Hitbox(200, 200);
     hitbox.active = true;
     maxHealth = 2500;
     health = maxHealth;
     target = Game1.characterManager.getRandomLiveCharacter();
     currentState = EnemyState.Attacking;
     currentAI = EnemyAI.SwampBoss;
     oldAI = EnemyAI.SwampBoss;
     if (!texturesLoaded)
     {
         for (int i = 1; i <= 20; i++)
         {
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss back " + i);
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss side " + i);
             TextureManager.Add(Enemy.BASETEX + "Swamp/boss front " + i);
         }
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center 1");
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center 2");
         TextureManager.Add(Enemy.BASETEX + "Swamp/boss center bleed");
         texturesLoaded = true;
     }
     bleedingTexture = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss center bleed");
     pulsatingTexture = new AnimatedTexture(Enemy.BASETEX + species + " center", 2, 250);
     setTexture(pulsatingTexture);
 }
Example #5
0
 public Dynamite()
     : base(-1)
 {
     idleTexture      = new AnimatedTexture(Enemy.BASETEX + "Cave/dynamite");
     explodingTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion small", 3, 200);
     fuseTexture      = new AnimatedTexture(Enemy.BASETEX + "Cave/fuse", 3, 50);
     explodingTexture.setOnFrameHitbox(1, new Hitbox(20, 20));
     explodingTexture.setOnFrameHitbox(2, new Hitbox(30, 30));
     explodingTexture.setOnFrameHitbox(3, new Hitbox(40, 40));
     explodingTexture.onFinish = kill;
     hitbox        = new Hitbox(35, 24);
     hitbox.active = true;
     maxHealth     = 1;
     hitDamage     = 20;
     currentAI     = EnemyAI.NoMoveKnockback;
     setTexture(idleTexture);
 }
Example #6
0
        public void setDirection(Direction dir)
        {
            curDirection = dir;
            AnimatedTexture tex = null;

            switch (dir)
            {
            case Direction.Back: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss back", 20, 150); break;

            case Direction.Forward: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss front", 20, 150); break;

            case Direction.Left: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss side", 20, 150); flip = SpriteEffects.FlipHorizontally; break;

            case Direction.Right: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss side", 20, 150); break;
            }
            tex.onFinish = kill;
            tex.setOnFrameRangeHitbox(16, 18, new Hitbox(new Vector2(30, 0), 50, 40, true));
            setTexture(tex);
        }
Example #7
0
 public void setTexture(AnimatedTexture tex)
 {
     if (texture != null)
     {
         foreach (Hitbox hitbox in texture.onFrameHitboxes)
         {
             if (hitbox != null)
             {
                 hitbox.active = false;
             }
         }
     }
     texture = tex;
     texture.Update(null, this);
     if (texture.onStart != null)
     {
         texture.onStart();
     }
 }
Example #8
0
 public DynaBoss()
     : base(-1)
 {
     if (!texturesLoaded)
     {
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss hurt");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 4");
         TextureManager.Add(Enemy.BASETEX + "Cave/dynamite");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 3");
         texturesLoaded = true;
     }
     scale          = 2f;
     hitbox         = new Hitbox(360, 125);
     hitbox.active  = true;
     moveSpeed      = 100f;
     maxHealth      = 2500f;
     health         = maxHealth;
     movingTexture  = new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk", 4, 100);
     stunnedTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk 2");
     setTexture(movingTexture);
     position.X = Game1.levelManager.position.X + Game1.levelManager.screenWidth * 2;
     currentAI  = EnemyAI.DynamiteBoss;
     oldAI      = EnemyAI.DynamiteBoss;
 }
Example #9
0
 public DynaBoss()
     : base(-1)
 {
     if (!texturesLoaded)
     {
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss attack 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss hurt");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/cave boss walk 4");
         TextureManager.Add(Enemy.BASETEX + "Cave/dynamite");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion small 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/explosion big 3");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 1");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 2");
         TextureManager.Add(Enemy.BASETEX + "Cave/fuse 3");
         texturesLoaded = true;
     }
     scale = 2f;
     hitbox = new Hitbox(360, 125);
     hitbox.active = true;
     moveSpeed = 100f;
     maxHealth = 2500f;
     health = maxHealth;
     movingTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk", 4, 100);
     stunnedTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk 2");
     setTexture(movingTexture);
     position.X = Game1.levelManager.position.X + Game1.levelManager.screenWidth * 2;
     currentAI = EnemyAI.DynamiteBoss;
     oldAI = EnemyAI.DynamiteBoss;
 }
Example #10
0
        public override void Update(GameTime gameTime)
        {
            float seconds = (float)gameTime.ElapsedGameTime.TotalSeconds;

            //death exploding animation
            if (exploding)
            {
                setTexture(new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk 2"));
                explodingTime += seconds;
                if (explosions.Count == 0 && exploded == 0)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[0] = false; };
                    drawExplosion[0]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 4 && exploded == 1)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[1] = false; };
                    drawExplosion[1]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 3 && exploded == 2)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[2] = false; };
                    drawExplosion[2]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 2 && exploded == 3)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[3] = false; };
                    drawExplosion[3]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 1.5 && exploded == 4)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[4] = false; };
                    drawExplosion[4]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME && exploded == 5)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { Game1.levelManager.killEnemy(this); };
                    drawExplosion[5]      = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
            }
            //stunned animation
            else if (stunned)
            {
                //shake animation
                float newX = originalPosition.X;
                float newY = originalPosition.Y;
                switch (shakeAnimationStep)
                {
                case 0: newX += 5; newY += 5; break;

                case 2: newX += 0; newY -= 5; break;

                case 4: newX += 5; newY -= 5; break;

                case 6: newX -= 5; newY -= 5; break;

                case 8: newX -= 10; newY -= 5; break;

                case 10: newX += 3; newY -= 2; break;
                }
                shakeAnimationStep = (shakeAnimationStep + 1);
                position           = new Vector2(newX, newY);

                stunTime -= seconds;
                if (stunTime < 0f)
                {
                    setTexture(movingTexture);
                    stunned            = false;
                    shakeAnimationStep = 0;
                    position           = originalPosition;
                }
            }
            else
            {
                if (position.X < (Game1.levelManager.position.X + 150))
                {
                    dirMultiplier = 1;
                }
                else if ((position.X > (Game1.levelManager.position.X + Game1.levelManager.screenWidth - 150)))
                {
                    dirMultiplier = -1;
                }
                position = new Vector2(position.X + (moveSpeed * dirMultiplier * seconds), Game1.levelManager.position.Y - Game1.levelManager.screenHeight + 100);
                //spawn dynamite
                timeSinceLastThrow += seconds;
                if (timeSinceLastThrow >= DYNAMITE_THROW_INTERVAL)
                {
                    Action <Dynamite> dynamiteReset = delegate(Dynamite d)
                    {
                        d.hitbox        = new Hitbox(35, 24);
                        d.hitbox.active = true;
                        d.health        = d.maxHealth;
                        d.alreadyHit.Clear();
                        d.hitboxesHitBy.Clear();
                        d.fuse       = 0f;
                        d.exploding  = false;
                        d.position   = position;
                        d.velocity.X = (float)(Game1.rand.NextDouble() - 0.5) * Game1.levelManager.screenWidth;
                        d.velocity.Y = ((float)Game1.rand.NextDouble() + 2) / 3 * Game1.levelManager.screenHeight / 3;
                        d.setTexture(new AnimatedTexture(Enemy.BASETEX + "Cave/dynamite"));
                    };
                    Dynamite d1 = dynamitePool.obtain(dynamiteReset);
                    Dynamite d2 = dynamitePool.obtain(dynamiteReset);
                    Dynamite d3 = dynamitePool.obtain(dynamiteReset);
                    dynamite.Add(d1);
                    dynamite.Add(d2);
                    dynamite.Add(d3);
                    Game1.levelManager.enemiesToAddImmediate.Add(d1);
                    Game1.levelManager.enemiesToAddImmediate.Add(d2);
                    Game1.levelManager.enemiesToAddImmediate.Add(d3);
                    timeSinceLastThrow = 0f;
                }
            }
            List <Dynamite> deaddynamite = new List <Dynamite>();

            foreach (Dynamite d in dynamite)
            {
                if (d.alive)
                {
                    d.Update(gameTime);
                }
                else
                {
                    deaddynamite.Add(d);
                }
            }
            foreach (Dynamite d in deaddynamite)
            {
                dynamite.Remove(d);
                Game1.levelManager.killEnemy(d);
            }
            foreach (AnimatedTexture explosion in explosions)
            {
                explosion.Update(gameTime, this);
            }
            Console.WriteLine("x=" + exploded + "ex=" + explosions.Count + " fex=" + finishedExplosions.Count);
            foreach (AnimatedTexture explosion in finishedExplosions)
            {
                explosions.Remove(explosion);
            }
            finishedExplosions.Clear();
            base.Update(gameTime);
        }
Example #11
0
 public void setTexture(AnimatedTexture tex)
 {
     if (texture != null)
         foreach (Hitbox hitbox in texture.onFrameHitboxes)
             if (hitbox != null)
             {
                 hitbox.active = false;
             }
     texture = tex;
     texture.Update(null, this);
     if (texture.onStart != null)
         texture.onStart();
 }
Example #12
0
 public Dynamite()
     : base(-1)
 {
     idleTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/dynamite");
     explodingTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion small", 3, 200);
     fuseTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/fuse", 3, 50);
     explodingTexture.setOnFrameHitbox(1, new Hitbox(20, 20));
     explodingTexture.setOnFrameHitbox(2, new Hitbox(30, 30));
     explodingTexture.setOnFrameHitbox(3, new Hitbox(40, 40));
     explodingTexture.onFinish = kill;
     hitbox = new Hitbox(35, 24);
     hitbox.active = true;
     maxHealth = 1;
     hitDamage = 20;
     currentAI = EnemyAI.NoMoveKnockback;
     setTexture(idleTexture);
 }
Example #13
0
        public override void Update(GameTime gameTime)
        {
            float seconds = (float)gameTime.ElapsedGameTime.TotalSeconds;
            //death exploding animation
            if (exploding)
            {
                setTexture(new AnimatedTexture(Enemy.BASETEX + "Cave/cave boss walk 2"));
                explodingTime += seconds;
                if (explosions.Count == 0 && exploded == 0)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[0] = false;  };
                    drawExplosion[0] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 4 && exploded == 1)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[1] = false; };
                    drawExplosion[1] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 3 && exploded == 2)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[2] = false; };
                    drawExplosion[2] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 2 && exploded == 3)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[3] = false; };
                    drawExplosion[3] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME / 1.5 && exploded == 4)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { drawExplosion[4] = false; };
                    drawExplosion[4] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
                if (explodingTime >= EXPLODING_TIME && exploded == 5)
                {
                    AnimatedTexture deathTexture = new AnimatedTexture(Enemy.BASETEX + "Cave/explosion big", 3, 250 + (int)(Game1.rand.NextDouble() * 100));
                    deathTexture.onFinish = delegate() { Game1.levelManager.killEnemy(this); };
                    drawExplosion[5] = true;
                    explosions.Add(deathTexture);
                    exploded++;
                }
            }
            //stunned animation
            else if (stunned)
            {
                //shake animation
                float newX = originalPosition.X;
                float newY = originalPosition.Y;
                switch (shakeAnimationStep)
                {
                    case 0: newX += 5; newY += 5; break;
                    case 2: newX += 0; newY -= 5; break;
                    case 4: newX += 5; newY -= 5; break;
                    case 6: newX -= 5; newY -= 5; break;
                    case 8: newX -= 10; newY -= 5; break;
                    case 10: newX += 3; newY -= 2; break;
                }
                shakeAnimationStep = (shakeAnimationStep + 1);
                position = new Vector2(newX, newY);

                stunTime -= seconds;
                if (stunTime < 0f)
                {
                    setTexture(movingTexture);
                    stunned = false;
                    shakeAnimationStep = 0;
                    position = originalPosition;
                }
            }
            else
            {
                if (position.X < (Game1.levelManager.position.X + 150))
                    dirMultiplier = 1;
                else if ((position.X > (Game1.levelManager.position.X + Game1.levelManager.screenWidth - 150)))
                    dirMultiplier = -1;
                position = new Vector2(position.X + (moveSpeed * dirMultiplier * seconds), Game1.levelManager.position.Y - Game1.levelManager.screenHeight + 100);
                //spawn dynamite
                timeSinceLastThrow += seconds;
                if (timeSinceLastThrow >= DYNAMITE_THROW_INTERVAL)
                {
                    Action<Dynamite> dynamiteReset = delegate(Dynamite d)
                    {
                        d.hitbox = new Hitbox(35, 24);
                        d.hitbox.active = true;
                        d.health = d.maxHealth;
                        d.alreadyHit.Clear();
                        d.hitboxesHitBy.Clear();
                        d.fuse = 0f;
                        d.exploding = false;
                        d.position = position;
                        d.velocity.X = (float)(Game1.rand.NextDouble() - 0.5) * Game1.levelManager.screenWidth;
                        d.velocity.Y = ((float)Game1.rand.NextDouble() + 2) / 3 * Game1.levelManager.screenHeight / 3;
                        d.setTexture(new AnimatedTexture(Enemy.BASETEX + "Cave/dynamite"));
                    };
                    Dynamite d1 = dynamitePool.obtain(dynamiteReset);
                    Dynamite d2 = dynamitePool.obtain(dynamiteReset);
                    Dynamite d3 = dynamitePool.obtain(dynamiteReset);
                    dynamite.Add(d1);
                    dynamite.Add(d2);
                    dynamite.Add(d3);
                    Game1.levelManager.enemiesToAddImmediate.Add(d1);
                    Game1.levelManager.enemiesToAddImmediate.Add(d2);
                    Game1.levelManager.enemiesToAddImmediate.Add(d3);
                    timeSinceLastThrow = 0f;
                }
            }
            List<Dynamite> deaddynamite = new List<Dynamite>();
            foreach (Dynamite d in dynamite)
            {
                if (d.alive)
                    d.Update(gameTime);
                else
                    deaddynamite.Add(d);
            }
            foreach (Dynamite d in deaddynamite)
            {
                dynamite.Remove(d);
                Game1.levelManager.killEnemy(d);
            }
            foreach (AnimatedTexture explosion in explosions)
                explosion.Update(gameTime, this);
            Console.WriteLine("x=" + exploded + "ex=" + explosions.Count + " fex=" + finishedExplosions.Count);
            foreach (AnimatedTexture explosion in finishedExplosions)
                explosions.Remove(explosion);
            finishedExplosions.Clear();
            base.Update(gameTime);
        }
Example #14
0
 public void setDirection(Direction dir)
 {
     curDirection = dir;
     AnimatedTexture tex = null;
     switch (dir)
     {
         case Direction.Back: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss back", 20, 150); break;
         case Direction.Forward: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss front", 20, 150); break;
         case Direction.Left: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss side", 20, 150); flip = SpriteEffects.FlipHorizontally; break;
         case Direction.Right: tex = new AnimatedTexture(Enemy.BASETEX + "Swamp/boss side", 20, 150); break;
     }
     tex.onFinish = kill;
     tex.setOnFrameRangeHitbox(16, 18, new Hitbox(new Vector2(30, 0), 50, 40, true));
     setTexture(tex);
 }
Example #15
0
 public void setTexture(string tex)
 {
     texture = new AnimatedTexture(tex);
 }
Example #16
0
        public override void Update(GameTime gameTime)
        {
            if (thrown)
            {
                throwAngle += throwDirection * gameTime.ElapsedGameTime.Milliseconds * .01f;
                position    = throwCenter + new Vector2((float)Math.Cos(throwAngle) * throwRadius, -(float)Math.Sin(throwAngle) * throwRadius);
                if (throwDirection == 1 && throwAngle > Math.PI)
                {
                    thrown = false;
                }
                if (throwDirection == -1 && throwAngle < 0)
                {
                    thrown = false;
                }
                return;
            }

            float seconds = (float)gameTime.ElapsedGameTime.TotalSeconds;

            for (int i = hitboxesHitBy.Count - 1; i >= 0; i--)
            {
                if (!hitboxesHitBy[i].intersects(hitbox))
                {
                    hitboxesHitBy.RemoveAt(i);
                    continue;
                }
                Game1.levelManager.hitboxesToDeactivate.Add(hitboxesHitBy[i]);
            }
            if (knockbackTime > 0)
            {
                knockbackTime -= seconds;
                //currentAI = EnemyAI.NoMove;
                float nextX = position.X + (velocity.X * seconds);
                float nextY = position.Y + (velocity.Y * seconds);

                if (!canMove(new Vector2(velocity.X * seconds, 0)))
                {
                    nextX = position.X;
                }
                if (!canMove(new Vector2(0, velocity.Y * seconds)))
                {
                    nextY = position.Y;
                }
                position = new Vector2(nextX, nextY);
            }

            if (stunTimer > 0)
            {
                stunTimer -= gameTime.ElapsedGameTime.Milliseconds;
                return;
            }
            Vector2 distance;

            if (currentAI == EnemyAI.SwampBoss || currentAI == EnemyAI.DynamiteBoss)
            {
                base.Update(gameTime);
                return;
            }
            if (currentAI != EnemyAI.NoMove && currentAI != EnemyAI.NoMoveKnockback)
            {
                if (!target.alive)
                {
                    target = Game1.characterManager.getRandomLiveCharacter();
                }
            }
            else
            {
                target = Game1.characterManager.getClosestLiveCharacter(position);
            }

            if (currentAI == EnemyAI.Neutral)
            {
                currentState = EnemyState.Walking;
            }

            switch (currentState)
            {
            case EnemyState.Walking:
            {
                wanderDist += moveSpeed * seconds;
                if (wanderDist > 200 && wanderStage == 1)
                {
                    wanderDir = new Vector2((float)Game1.rand.NextDouble(), (float)Game1.rand.NextDouble());
                    wanderDir.Normalize();
                    wanderDist  = 0;
                    wanderStage = 0;
                }
                if (wanderDist > 200 && wanderStage == 0)
                {
                    wanderDir   = -wanderDir;
                    wanderDist  = 0;
                    wanderStage = 1;
                }
                position = position + moveSpeed * seconds * wanderDir;

                if (currentAI == EnemyAI.SpawnWords)
                {
                    attackCooldown += gameTime.ElapsedGameTime.Milliseconds;
                    if (attackCooldown > 1000 / attackSpeed)
                    {
                        attackCooldown = 0;
                        AnimatedTexture oldTexture = texture;
                        setTexture(new AnimatedTexture(Enemy.BASETEX + species + " attack", 3, 500));
                        texture.setOnFrameAction(3, delegate()
                            {
                                texture = oldTexture;
                            });
                        Game1.levelManager.delayAddEnemy(8, position);
                    }
                }
                break;
            }

            case EnemyState.AttackingAll: {
                attackCooldown += gameTime.ElapsedGameTime.Milliseconds;
                foreach (Character target in Game1.characterManager.liveCharacters)
                {
                    distance = target.position - position;
                    if (hitbox.intersects(target.hitbox))
                    {
                        if (attackCooldown > 1000 / attackSpeed)
                        {
                            target.hitBy(this);
                            timer = 0;
                            AnimatedTexture oldTexture = texture;
                            setTexture(new AnimatedTexture(Enemy.BASETEX + species + " attack", 1, 250));
                            texture.setOnFrameAction(1, delegate()
                                {
                                    texture = oldTexture;

                                    if (currentAI == EnemyAI.Flee)
                                    {
                                        currentState = EnemyState.Blocking;
                                        if (species == "word")
                                        {
                                            setTexture(new AnimatedTexture(Enemy.BASETEX + species + " flee", 2, 150));
                                        }
                                    }
                                });
                            attackCooldown = 0;
                        }
                    }
                }
                break;
            }

            case EnemyState.Attacking:
            {
                if (target != null)
                {
                    distance        = target.position - position;
                    attackCooldown += gameTime.ElapsedGameTime.Milliseconds;
                    if (hitbox.intersects(target.hitbox))
                    {
                        if (attackCooldown > 1000 / attackSpeed)
                        {
                            target.hitBy(this);
                            timer = 0;
                            AnimatedTexture oldTexture = texture;
                            setTexture(new AnimatedTexture(Enemy.BASETEX + species + " attack", 1, 250));
                            texture.setOnFrameAction(1, delegate()
                                {
                                    texture = oldTexture;

                                    if (currentAI == EnemyAI.Flee)
                                    {
                                        currentState = EnemyState.Blocking;
                                        if (species == "word")
                                        {
                                            setTexture(new AnimatedTexture(Enemy.BASETEX + species + " flee", 2, 150));
                                        }
                                    }
                                });
                            attackCooldown = 0;
                        }
                    }

                    if (hitbox.intersectPercent(target.hitbox) < .25f)
                    {
                        distance.Normalize();
                        if (disableMovementTime > 0f || disableMovementDistance > 0f && currentAI != EnemyAI.NoMove)
                        {
                            disableMovementTime     -= seconds;
                            velocity                -= velocity * 0.80f * seconds;
                            disableMovementDistance -= velocity.Length() * seconds;
                            position                += velocity * seconds;
                        }
                        else
                        {
                            if (currentAI != EnemyAI.NoMove)
                            {
                                position = position + moveSpeed * seconds * distance;                                      // close in on a target
                            }
                        }
                    }
                }
                break;
            }

            case EnemyState.Blocking:
            {
                timer   += gameTime.ElapsedGameTime.TotalSeconds;
                distance = position - target.position;
                distance.Normalize();
                if (disableMovementTime > 0f || disableMovementDistance > 0f)
                {
                    disableMovementTime     -= seconds;
                    velocity                -= velocity * 0.80f * seconds;
                    disableMovementDistance -= velocity.Length() * seconds;
                    position                += velocity * seconds;
                }
                else
                {
                    position = position + fleeSpeed * seconds * distance;
                }
                alpha -= alpharate * seconds;
                if (alpha < 0.5f || alpha > 1f)
                {
                    alpharate = -alpharate;
                }
                if (timer > fleeTime)
                {
                    hitboxesHitBy.Clear();
                    currentState = EnemyState.Attacking;

                    if (species == "word")
                    {
                        setTexture(new AnimatedTexture(Enemy.BASETEX + species, 2, 150));
                    }
                    alpha = 1f;
                    timer = 0f;
                }
                break;
            }

            default:
                break;
            }
            base.Update(gameTime);
        }
Example #17
0
 public void setTexture(string tex)
 {
     texture = new AnimatedTexture(tex);
 }