Example #1
0
        private void DoLearn(PlayerWitch p, TomeSpell spell)
        {
            int index = _tome.IndexOf(spell);

            if (p.Inventory.Delta[0] < index * READ_AHEAD_COST)
            {
                throw new GameException("Not enough ingredients to learn " + spell.Id);
            }
            for (int i = 0; i < index; ++i)
            {
                _tomeStockGain[i]    += READ_AHEAD_COST;
                p.Inventory.Delta[0] -= READ_AHEAD_COST;
            }
            PlayerSpell learnt = new PlayerSpell(spell, p);

            p.Spells.Add(learnt);

            int maxToGet       = MAX_SPACE - p.Inventory.GetTotal();
            int ingredientsGot = Math.Min(maxToGet, spell.GetStock());

            p.Inventory.Delta[0] += ingredientsGot;

            _learntSpells.Add(spell);

            EventData e = new EventData();

            e.Type      = EventData.LEARN;
            e.PlayerIdx = p.Index;
            e.SpellId   = spell.Id;
            e.ResultId  = learnt.Id;
            e.TomeIdx   = index;
            e.Acquired  = ingredientsGot;
            e.Lost      = spell.GetStock() - ingredientsGot;
            _viewerEvents.Add(e);
        }
Example #2
0
        private void DoReset(PlayerWitch p)
        {
            if (p.Spells.All(spell => spell.IsActive()))
            {
                throw new GameException("All spells are already castable");
            }
            p.Spells.ForEach(x => x.Activate());

            EventData e = new EventData();

            e.Type      = EventData.RESET;
            e.PlayerIdx = p.Index;
            _viewerEvents.Add(e);
        }
Example #3
0
        private void DoPlayerSpell(PlayerWitch p, PlayerSpell spell)
        {
            int repeats = p.Action.GetRepeats();

            if (repeats < 1)
            {
                throw new GameException("Repeat can't be zero (on " + spell.Id + ")");
            }
            if (repeats > 1 && !spell.IsRepeatable())
            {
                throw new GameException("Spell " + spell.Id + " is not repeatable");
            }
            if (!spell.IsActive())
            {
                throw new GameException("Spell " + spell.Id + " is exhausted");
            }
            if (!p.CanAfford(spell.Recipe, repeats))
            {
                throw new GameException("Not enough ingredients for spell " + spell.Id);
            }
            if (!p.EnoughSpace(spell.Recipe, repeats))
            {
                throw new GameException("Not enough space in inventory for spell " + spell.Id);
            }

            //do spell
            for (int k = 0; k < repeats; ++k)
            {
                for (int i = 0; i < INGREDIENT_TYPE_COUNT; ++i)
                {
                    p.Inventory.Add(i, spell.GetDelta()[i]);
                }
            }
            spell.Deactivate();

            EventData e = new EventData();

            e.Type      = EventData.PLAYER_SPELL;
            e.PlayerIdx = p.Index;
            e.SpellId   = spell.Id;
            e.Repeats   = repeats;
            _viewerEvents.Add(e);
        }
Example #4
0
 private SpellType GetSpellType(Spell spell, PlayerWitch player)
 {
     if (spell.GetType() == typeof(TomeSpell))
     {
         return(SpellType.LEARN);
     }
     else if (spell.GetType() == typeof(DeliverySpell))
     {
         return(SpellType.BREW);
     }
     else
     {
         if (spell.IsOwner(player))
         {
             return(SpellType.CAST);
         }
         else
         {
             return(SpellType.OPPONENT_CAST);
         }
     }
 }
Example #5
0
        private DeliveryCompletion DoDelivery(PlayerWitch p, DeliverySpell del)
        {
            if (!p.CanDeliver(del.Recipe))
            {
                throw new GameException("Not enough ingredients for order " + del.Id);
            }
            for (int i = 0; i < INGREDIENT_TYPE_COUNT; ++i)
            {
                p.Inventory.Add(i, del.Recipe.Delta[i]);
            }
            DeliveryCompletion delCompletion = new DeliveryCompletion(del, _deliveries.IndexOf(del), GetScoreOf(del));

            _delivered.Add(delCompletion);
            p.AddDelivery();
            p.AddScore(GetScoreOf(del));

            EventData e = new EventData();

            e.Type      = EventData.DELIVERY;
            e.PlayerIdx = p.Index;
            e.SpellId   = del.Id;
            _viewerEvents.Add(e);
            return(delCompletion);
        }
Example #6
0
 public List <String> GetGlobalInfoFor(PlayerWitch player)
 {
     return(new List <String>());
 }