예제 #1
0
        public void performAction(GameTime gameTime)
        {
            switch (type)
            {
                case BattleActionType.ATTACK:
                    foreach(Player t in target)
                    {
                        bool isenemy = (t.playerBase.playerType == PlayerType.ENEMY) ? false : true ;
                        Console.WriteLine("Melee Attack, isenemy=" + isenemy);
                        Texture2D cur;
                        Console.WriteLine("Target " + t.name + " has " + t.GetCurrentHealth() + " health." );
                        if (user.GetCurrentHealth() > 0 && battleSequence.state != BattleStageType.FLEE)
                        {
                            int previoushealth = t.GetCurrentHealth();
                            cur = user.UseSpell(t, spell);
                            int newHealth = t.GetCurrentHealth();
                            battleSequence.combatLog.Add(user.name + " has dealt " + (previoushealth - newHealth) + " to "  + t.name + ". ");

                        }
                        else
                            return;

                        Projectile proj = new Projectile();
                        if(isenemy)
                            proj.Initialize(cur, spell, new Vector2(battleSequence.enemyrec[0].rec.X, battleSequence.enemyrec[0].rec.Y), false, battleSequence.playerec[0].rec.X, battleSequence.playerec[0]);
                        else
                            proj.Initialize(cur, spell, new Vector2(battleSequence.playerec[0].rec.X, battleSequence.playerec[0].rec.Y), true, battleSequence.enemyrec[0].rec.X, battleSequence.enemyrec[0]);
                        battleSequence.projectiles.Enqueue(proj);

                    }

                    break;
                case BattleActionType.ITEM:
                    foreach (Player t in target)
                    {
                        Console.WriteLine("Item");
                        int previoushealth = t.GetCurrentHealth();
                        t.UseHealingItem(item);
                        int newHealth = t.GetCurrentHealth();
                        int diff = (newHealth - previoushealth);
                        if (diff == 0)
                        {
                            battleSequence.combatLog.Add(user.name +  " does not have a healing item.");
                        }
                        else
                        {
                            battleSequence.combatLog.Add(user.name + " has healed " + (newHealth - previoushealth) + ". ");
                        }
                    }
                    break;
                case BattleActionType.SPELL:
                    foreach (Player t in target)
                    {
                        bool isenemy = (t.playerBase.playerType == PlayerType.ENEMY)? false : true ;

                        Texture2D cur;
                        if (user.GetCurrentHealth() > 0 && battleSequence.state != BattleStageType.FLEE)
                        {
                            int previoushealth = t.GetCurrentHealth();
                            cur = user.UseSpell(t, spell);

                            int newHealth = t.GetCurrentHealth();
                            int difference = previoushealth - newHealth;
                            if (difference == 0)
                            {
                                battleSequence.combatLog.Add(user.name + "'s fire failed.");
                            }
                            else
                            {
                                battleSequence.combatLog.Add(user.name + "'s fire dealt " + (previoushealth - newHealth) + " to " + t.name + ". ");
                            }

                        }
                        else
                            return;
                        Projectile proj = new Projectile();
                        if (isenemy)
                            proj.Initialize(cur, spell, new Vector2(battleSequence.enemyrec[0].rec.X, battleSequence.enemyrec[0].rec.Y), false, battleSequence.playerec[0].rec.X, battleSequence.playerec[0]);
                        else
                            proj.Initialize(cur, spell, new Vector2(battleSequence.playerec[0].rec.X, battleSequence.playerec[0].rec.Y), true, battleSequence.enemyrec[0].rec.X, battleSequence.enemyrec[0]);
                        battleSequence.projectiles.Enqueue(proj);
                        //battleSequence.drawprojectile = true;
                    }
                    break;
                case BattleActionType.FLEE:
                    Console.Write("Fleeeing...");
                    if (battleSequence.AttemptToFlee())
                    {
                        Console.WriteLine("Success!");
                        //continueCombat = false;
                        battleSequence.combatLog.Add("You sucessfully flee.");
                        battleSequence.state = BattleStageType.FLEE;
                    }
                    else
                    {
                        battleSequence.combatLog.Add("You failed to flee.");
                        battleSequence.state = BattleStageType.ACTION;
                    }
                    break;
                default:
                    break;
            }

            if (battleSequence.state != BattleStageType.FLEE)
                battleSequence.state = BattleStageType.ACTION;
        }
예제 #2
0
        public void Update(GameTime gameTime)
        {
            for (int i = 0; i < playerec.Length; i++)
                playerec[i].Update(gameTime);

            for (int i = 0; i < enemyrec.Length; i++)
                enemyrec[i].Update(gameTime);

            if (!drawprojectile && projectiles.Count > 0)
            {
                currentprojectile = projectiles.Dequeue();
                shotprojectileat = (int)gameTime.TotalGameTime.TotalMilliseconds;
                drawprojectile = true;
                drawplayerhpattime = shotprojectileat + 2 * PROJECTILE_TIME;
            }
            if (drawplayerhpattime < gameTime.TotalGameTime.TotalMilliseconds)
            {
                drawplayerhp = true;
            }
            if (drawplayerhp && drawplayerhpattime + 1000 < gameTime.TotalGameTime.TotalMilliseconds)
            {
                drawplayerhp = false;
                drawplayerhpattime = Int32.MaxValue;
            }
            if (drawprojectile)
            {
                currentprojectile.Update(gameTime);
                int curtime = (int)gameTime.TotalGameTime.TotalMilliseconds;
                if (curtime - shotprojectileat > PROJECTILE_TIME)
                {
                    drawprojectile = false;
                }
            }

            if (!drawprojectile)
            {
                switch (state)
                {
                    case BattleStageType.ACTION:
                        if (enemies[0].player.GetCurrentHealth() <= 0)
                        {
                            state = BattleStageType.WIN;
                        }
                        if (party.partyMembers[0].GetCurrentHealth() <= 0)
                        {
                           state =  BattleStageType.LOSE;

                        }

                        if (state == BattleStageType.ACTION)
                        {
                            aButton.Update();
                            itemButton.Update();
                            fleeButton.Update();
                            spellButton.Update();
                        }
                        break;
                    case BattleStageType.FIGHT:
                        while (this.currentActions.Count > 0)
                        {
                            BattleAction a = this.currentActions.Dequeue();
                            a.performAction(gameTime);
                        }
                        //this.state = BattleStageType.ACTION;
                        break;
                    case BattleStageType.FLEE:
                        Console.WriteLine("FLEE STAGE?");
                        Event e = new Event();
                        e.setEventType(EventType.MAP_TRANSITION);
                        e.addProperty("x", xRet);
                        e.addProperty("y", yRet);
                        e.addProperty("mapfile", retMap);
                        Game1.addToEventQueue(e);
                        this.continueCombat = false;
                        break;
                    case BattleStageType.LOSE:
                        Event e1 = new Event();
                        e1.setEventType(EventType.MAP_TRANSITION);
                        e1.addProperty("x", xRet);
                        e1.addProperty("y", yRet);
                        e1.addProperty("mapfile", retMap);
                        Game1.addToEventQueue(e1);
                        Event e2 = new Event();
                        e2.setEventType(EventType.LOSE_GAME);
                        Game1.addToEventQueue(e2);
                        break;
                    case BattleStageType.WIN:
                        party.partyMembers[0].inventory.AddItem(enemies[0].prize);
                        Event e3 = new Event();
                        e3.setEventType(EventType.MAP_TRANSITION);
                        e3.addProperty("x", xRet);
                        e3.addProperty("y", yRet);
                        e3.addProperty("mapfile", retMap);
                        Game1.addToEventQueue(e3);
                        Event e4 = new Event();
                        e4.setEventType(EventType.MESSAGE);
                        e4.addProperty("text", "You looted " + enemies[0].prize.name);
                        Game1.addToEventQueue(e4);

                        break;
                }
            }
        }