Пример #1
0
 public void initialize_game()
 {
     this.game_event_handler     = new LOTRGameEventHandler(this);
     response_is_yes_no          = false;
     waiting_for_player_response = false;
     EnemyCardResponses.set_game(this);
     PlayerCardResponses.set_game(this);
     CardEnablers.set_game(this);
     cur_player             = null;
     cur_location           = null;
     players                = new List <LOTRPlayer>();
     staged_cards           = new List <EnemyCard>();
     encounter_discard_pile = new List <EnemyCard>();
     enemy_deck             = EnemyCard.PASSAGE_THROUGH_MIRWOOD_ENEMIES();
     //Utils.Shuffle(enemy_deck);
     for (var i = 0; i < num_players; i++)
     {
         players.Add(new LOTRPlayer());
     }
     players[0].add_hero(LOTRHero.ARAGORN());
     players[0].add_hero(LOTRHero.GLOIN());
     players[0].add_hero(LOTRHero.THEODRED());
     player_done_engaging         = new Dictionary <LOTRPlayer, bool>();
     allowing_actions             = false;
     forced_response_after_action = false;
     times_to_respond             = 1;
     card_to_respond_to           = null;
     times_responded        = 0;
     num_options_to_display = -1;
     begin_game();
 }
Пример #2
0
 void deal_shadow_card_to_players_engaged_enemies(LOTRPlayer player)
 {
     disallow_actions();
     foreach (var engaged_enemy in player.get_engaged_enemies())
     {
         if (!engaged_enemy.has_shadow_cards())
         {
             if (enemy_deck.Count > 0)
             {
                 EnemyCard shadow_card = enemy_deck[0];
                 enemy_deck.RemoveAt(0);
                 shadow_card.set_face_down();
                 engaged_enemy.add_shadow_card(shadow_card); //todo: highest engagement first
                 //TODO: maybe throw an event for this guy but for now just do this here....
                 if (engaged_enemy.get_name() == EnemyCard.DOL_GULDUR_BEASTMASTER().get_name())
                 {
                     EnemyCard shadow_card2 = enemy_deck[0];
                     enemy_deck.RemoveAt(0);
                     shadow_card2.set_face_down();
                     engaged_enemy.add_shadow_card(shadow_card2); //todo: highest engagement first
                 }
             }
         }
     }
     allow_actions_to_be_played(resolve_enemy_attacks);
 }
Пример #3
0
    public static EnemyCard UNGOLIANTS_SPAWN()
    {
        EnemyCard result = new EnemyCard("Ungoliant's Spawn",
                                         32, 3, 5, 2, -1, 9, "SPIDER",
                                         new List <LOTRGame.TRAITS>()
        {
            LOTRGame.TRAITS.CREATURE, LOTRGame.TRAITS.SPIDER
        },
                                         "When Revealed: Each character currently committed to a quest gets -1 Willpower until the end of the phase."
                                         , "Shadow: Raise defending player's threat by 4. (Raise defending player's threat by 8 instead if this attack is undefended.)", "ENEMY", "??", "??");
        List <Func <EventArgs, Card, bool> > card_played_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me, CardEnablers.has_at_least_one_character_committed
        };

        result.respond_to_event(GameEvent.CARD_REVEALED,
                                PlayerCardResponses.action_maker(card_played_criteria, EnemyCardResponses.ungoliants_spawn, result));

        List <Func <EventArgs, Card, bool> > shadow_card_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me
        };

        result.respond_to_event(GameEvent.SHADOW_CARD_REVEALED,
                                PlayerCardResponses.action_maker(shadow_card_criteria, EnemyCardResponses.ungoliants_spawn_shadow, result));
        return(result);
    }
Пример #4
0
 void resolve_shadow_effect(EnemyCard enemy)
 {
     //TODO: ?!?!
     disallow_actions();
     cur_state = GAMESTATE.RESOLVING_SHADOW_EFFECT;
     if (enemy.has_shadow_cards())
     {
         foreach (EnemyCard shadow_card in enemy.get_shadow_cards())
         {
             //DOES THIS WORK?!?!?!?!
             //EnemyCard shadow_card = enemy.get_shadow_card();
             shadow_card.set_face_up();
             shadow_card.enters_the_game();
             game_event_handler.fire_game_event(GameEvent.SHADOW_CARD_REVEALED, new GameArgs(
                                                    c: shadow_card,
                                                    a: () =>
             {
                 shadow_card.set_shadow_effect_resolved();
                 if (enemy.all_shadow_cards_resolved())
                 {
                     Debug.Log("DONE RESOLVING SHADOW EFFECT");
                     allow_actions_to_be_played();
                     determine_combat_damage_enemy_attack_player_defend();
                 }
             },
                                                    attack_undefended: attack_is_undefended(),
                                                    secondary_card: enemy));
         }
     }
     else
     {
         allow_actions_to_be_played();
         determine_combat_damage_enemy_attack_player_defend();
     }
 }
Пример #5
0
    public static EnemyCard KING_SPIDER()
    {
        EnemyCard result = new EnemyCard("King Spider",
                                         20, 2, 3, 1, -1, 3, "SPIDER",
                                         new List <LOTRGame.TRAITS>()
        {
            LOTRGame.TRAITS.CREATURE, LOTRGame.TRAITS.SPIDER
        }, "When Revealed: Each player must choose and exhaust 1 character he controls."
                                         , "Shadow: Defending player must choose and exhaust 1 character he controls. (2 characters instead if this attack is undefended.)", "ENEMY", "??", "??");
        List <Func <EventArgs, Card, bool> > card_played_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me, CardEnablers.has_at_least_one_ready_character
        };

        result.respond_to_event(GameEvent.CARD_REVEALED,
                                PlayerCardResponses.action_maker(card_played_criteria,
                                                                 EnemyCardResponses.king_spider,
                                                                 result, valid_targets: CardEnablers.valid_targets_player_characters_ready));

        List <Func <EventArgs, Card, bool> > shadow_card_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me
        };

        result.respond_to_event(GameEvent.SHADOW_CARD_REVEALED,
                                PlayerCardResponses.action_maker(shadow_card_criteria, EnemyCardResponses.king_spider_shadow, result));
        return(result);
    }
Пример #6
0
    public static EnemyCard DOL_GULDUR_ORCS()
    {
        EnemyCard result = new EnemyCard("Dol Guldur Orcs",
                                         10, 2, 2, 0, -1, 3, "ORC",
                                         new List <LOTRGame.TRAITS>()
        {
            LOTRGame.TRAITS.DOL_GULDUR, LOTRGame.TRAITS.ORC
        }, "When Revealed: The first player chooses 1 character currently committed to a quest. Deal 2 damage to that character."
                                         , "Shadow: attacking enemy gets 1 Attack. (3 Attack instead if this attack is undefended.)", "ENEMY", "??", "??");
        List <Func <EventArgs, Card, bool> > card_played_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me, CardEnablers.has_at_least_one_character_committed
        };

        result.respond_to_event(GameEvent.CARD_REVEALED,
                                PlayerCardResponses.action_maker(card_played_criteria,
                                                                 EnemyCardResponses.dol_guldur_orcs,
                                                                 result, valid_targets: CardEnablers.valid_targets_player_characters_committed));

        List <Func <EventArgs, Card, bool> > shadow_card_criteria = new List <Func <EventArgs, Card, bool> >()
        {
            CardEnablers.card_is_me
        };

        result.respond_to_event(GameEvent.SHADOW_CARD_REVEALED,
                                PlayerCardResponses.action_maker(shadow_card_criteria, EnemyCardResponses.dol_guldur_orcs_shadow, result));
        return(result);
    }
Пример #7
0
 public void add_shadow_card(EnemyCard shadow_card)
 {
     //?!?!
     if (shadow_card != null)
     {
         this.shadow_cards.Add(shadow_card);
     }
 }
Пример #8
0
 public void player_chose_enemy_to_resolve(LOTRPlayer player, EnemyCard enemy)
 {
     disallow_actions();
     //todo: check that enemy is engaging player
     attacking_enemy = enemy;
     cur_state       = GAMESTATE.DECLARING_DEFENDER;
     allow_actions_to_be_played();
 }
Пример #9
0
    void Awake()
    {
        InstantiateCards();

        m_hunter = Instantiate(m_hunter.gameObject).GetComponent <EnemyCard>();

        GameLogic.Get().m_currentScenario = this;
    }
Пример #10
0
    private void SetPlayPosition(EnemyCard card, int count, int row, int column)
    {
        card.SetState("playing");
        float xOffset = cardWidth / 2 * column;
        float yOffset = cardWidth / 8 * count;

        card.SetPos(playPosition.transform.position.x + xOffset, playPosition.transform.position.y - yOffset);
    }
Пример #11
0
 private void BeforeEnemyMove(EnemyCard enemy, LocationCard dest)
 {
     if (dest.m_cardName == m_attached.m_cardName && !enemy.IsKeywordContain(Card.Keyword.Elite))
     {
         enemy.m_canMove = false;
         GameLogic.Get().OutputGameLog(string.Format("{0}被<障碍物>阻挡,无法进入{1}\n", enemy.m_cardName, dest.m_cardName));
     }
 }
Пример #12
0
 public void deal_damage_to_enemy(EnemyCard enemy, int combat_damage)
 {
     enemy.take_damage(combat_damage);
     if (enemy.is_dead())
     {
         encounter_discard_pile.Add(enemy);
         cur_player.enemy_defeated(enemy);
     }
 }
Пример #13
0
    public void OnPlayerEvadeEnemy(EnemyCard enemy)
    {
        GameLogic.Get().OutputGameLog(string.Format("{0}试图闪避{1}\n", Player.Get().m_investigatorCard.m_cardName, enemy.m_cardName));

        m_confirmChoiceBtn.gameObject.SetActive(true);
        m_tempHighlightCard = enemy.gameObject;
        m_choiceMode        = MainGame.ConfirmButtonMode.SkillTest;
        BeginSelectCardToSpend(SkillType.Agility);
    }
Пример #14
0
    private void AfterEnemyDamaged(EnemyCard target)
    {
        GameLogic.Get().m_afterEnemyDamagedEvent.RemoveListener(m_afterEnemyDamaged);
        Player.Get().m_investigatorCard.m_combat -= 1;
        Player.Get().m_attackDamage -= 1;
        m_bullet -= 1;

        UnityEngine.Assertions.Assert.IsTrue(m_bullet >= 0, "Assert failed in core_dot45_automatic.AfterEnemyDamaged()!!!");
    }
Пример #15
0
    public void RemoveFromList(EnemyCard enemyCard)
    {
        enemyList.Remove(enemyCard);
        Destroy(enemyCard.gameObject);

        if (enemyList.Count == 0)
        {
            player.inCombat = false;
        }
    }
Пример #16
0
    private void AfterEnemyDamaged2(EnemyCard target)
    {
        GameLogic.Get().m_afterEnemyDamagedEvent.RemoveListener(m_afterEnemyDamaged2);
        Player.Get().m_investigatorCard.m_combat -= 2;
        Player.Get().m_attackDamage -= 1;

        GameLogic.Get().OutputGameLog("<小刀>被丢弃\n");

        GetComponent <PlayerCard>().Discard();
    }
Пример #17
0
 public void enemy_attack_resolved(EnemyCard enemy)
 {
     foreach (EnemyCard e in engaged_enemies)
     {
         if (enemy == e)
         {
             e.resolve_attack();
         }
     }
 }
Пример #18
0
    private void AfterEnemyDamaged(EnemyCard target)
    {
        GameLogic.Get().m_afterEnemyDamagedEvent.RemoveListener(m_afterEnemyDamaged);
        Player.Get().m_investigatorCard.m_combat -= m_bonusCombat;
        Player.Get().m_attackDamage -= 1;
        m_bullet     -= 1;
        m_bonusCombat = 0;

        UnityEngine.Assertions.Assert.IsTrue(m_bullet >= 0, "Assert failed in core_roland_dot38_special.AfterEnemyDamaged()!!!");
    }
Пример #19
0
    private void OnCollisionEnter(Collision collision)
    {
        // move this to inside scriptable obj
        if (itembase is Weapon && collision.gameObject.tag == "Enemy")
        {
            //get enemy component
            EnemyCard enemy = collision.gameObject.GetComponent <EnemyCard>();
            //cast to weapon type
            Weapon weapon = (Weapon)itembase;
            //use weapon
            weapon.Attack(enemy);
            DecreaseDurability();
        }
        else if (collision.gameObject.tag == "Obstacle")
        {
            BiomeScript biome = collision.gameObject.GetComponent <BiomeScript>();
            List <Item> drops = biome.Interact(itembase);
            foreach (Item drop in drops)
            {
                theInv.AddToInventory(drop);
            }
            DecreaseDurability();
        }
        else if (itembase is Material && collision.gameObject.tag == "Pickable")
        {
            if (collision.gameObject.GetComponent <ItemScript>().GetInstanceID() > this.GetInstanceID() || !canCraft || !collision.gameObject.GetComponent <ItemScript>().canCraft)
            {
            }
            else
            {
                Item result;
                //get other component
                Item other = collision.gameObject.GetComponent <ItemScript>().itembase;
                //cast to material type
                Material material = (Material)itembase;
                if (material.Craft(other, out result))
                {
                    canCraft = false;
                    collision.gameObject.GetComponent <ItemScript>().canCraft = false;
                    //create from result
                    theInv.RemoveFromInventory(collision.gameObject.GetComponent <ItemScript>().inventoryIndex);
                    theInv.RemoveFromInventory(inventoryIndex);
                    theInv.AddToInventory(result);
                }
            }
        }

        //Return to hand
        if (reset)
        {
            GetComponent <Rigidbody>().isKinematic = true;
            transform.localPosition = inventoryPos;
            reset = false;
        }
    }
Пример #20
0
    void Awake()
    {
        InstantiateCards();

        m_lita = Instantiate(m_lita.gameObject).GetComponent <AllyCard>();
        m_lita.m_isPlayerDeck = false;

        m_ghoulPriest = Instantiate(m_ghoulPriest.gameObject).GetComponent <EnemyCard>();

        GameLogic.Get().m_currentScenario = this;
    }
Пример #21
0
    public static void chieftan_ufthak_forced(EventArgs args)
    {
        GameArgs  game_args  = (GameArgs)args;
        EnemyCard me         = (EnemyCard)game_args.relevant_card;
        Action    the_action = () =>
        {
            me.add_resource_tokens();
        };

        game.execute_action(the_action);
    }
Пример #22
0
    public static void forest_spider_forced(EventArgs args)
    {
        GameArgs  game_args  = (GameArgs)args;
        EnemyCard me         = (EnemyCard)game_args.relevant_card;
        Action    the_action = () =>
        {
            me.add_flag(LOTRAbility.ABILITY_FLAGS.FOREST_SPIDER);
        };

        game.execute_action(the_action);
    }
Пример #23
0
 public void enemy_defeated(EnemyCard enemy)
 {
     for (var i = 0; i < engaged_enemies.Count; i++)
     {
         EnemyCard e = engaged_enemies[i];
         if (e == enemy)
         {
             engaged_enemies.RemoveAt(i);
         }
     }
 }
 public void DiscardCard()
 {
     // USE THE PREFAB INSTEAD OF INSTANCE
     if (!destroyOnPlay)
     {
         EnemyCard    cardPrefab   = FindObjectOfType <AllEnemyCards>().GetEnemyCardById(cardId);
         EnemyDiscard enemyDiscard = FindObjectOfType <EnemyDiscard>();
         enemyDiscard.AddCardToDiscard(cardPrefab);
     }
     Destroy(gameObject);
 }
Пример #25
0
    private void AfterEnemyDamaged(EnemyCard target)
    {
        GameLogic.Get().m_afterEnemyDamagedEvent.RemoveListener(m_afterEnemyDamaged);

        Player.Get().m_investigatorCard.m_combat -= 1;
        if (m_bBonus)
        {
            Player.Get().m_attackDamage -= 1;
            m_bBonus = false;
        }
    }
Пример #26
0
    public EnemyCard DrawTopCard()
    {
        if (cards.Count <= 0)
        {
            enemyDiscard.ShuffleDiscardIntoDeck();
        }
        EnemyCard cardToDraw = cards[0];

        cards.RemoveAt(0);
        return(cardToDraw);
    }
Пример #27
0
    public static EnemyCard DOL_GULDUR_BEASTMASTER()
    {
        EnemyCard result = new EnemyCard("Dol Guldur Beastmaster",
                                         35, 2, 3, 1, -1, 5, "ORC",
                                         new List <LOTRGame.TRAITS>()
        {
            LOTRGame.TRAITS.DOL_GULDUR, LOTRGame.TRAITS.ORC
        }, "Forced: When Dol Guldur Beastmaster attacks, deal it 1 additional shadow card."
                                         , "", "ENEMY", "??", "??");

        return(result);
    }
Пример #28
0
    private void AfterEnemyDamaged(EnemyCard target)
    {
        if (!m_isAbilityUsed && target.m_health <= 0 && Player.Get().m_currentLocation.m_clues > 0)
        {
            GameLogic.Get().OutputGameLog(string.Format("{0}通过自身能力,获得了1线索\n", GetComponent <InvestigatorCard>().m_cardName));

            Player.Get().GainClues(1);
            Player.Get().m_currentLocation.m_clues -= 1;

            m_isAbilityUsed = true;
        }
    }
Пример #29
0
    private void AfterAssignDamage(EnemyCard attacker, int investigatorDamage, int allyDamage)
    {
        GameLogic.Get().m_afterAssignDamageEvent.RemoveListener(m_afterAssignDamage);

        UnityEngine.Assertions.Assert.IsNotNull(attacker, "Assert failed in core_guard_dog.AfterAssignDamage()!!!");

        if (allyDamage != 0)
        {
            GameLogic.Get().OutputGameLog(string.Format("<看门狗>对<{0}>发动反击\n", attacker.m_cardName));

            attacker.DecreaseHealth(1);
        }
    }
Пример #30
0
    private void BeforeEnemyDamaged(EnemyCard enemy)
    {
        GameLogic.Get().m_beforeEnemyDamagedEvent.RemoveListener(m_beforeEnemyDamaged);
        GameLogic.Get().m_afterEnemyDamagedEvent.AddListener(m_afterEnemyDamaged);

        Player.Get().m_investigatorCard.m_combat += 1;

        if (enemy.m_engaged && Player.Get().GetEnemyCards().Count == 1)
        {
            UnityEngine.Assertions.Assert.IsTrue(Player.Get().GetEnemyCards()[0].m_cardName == enemy.m_cardName, "Assert failed in core_machete.BeforeEnemyDamaged()!!!");

            Player.Get().m_attackDamage += 1;
            m_bBonus = true;
        }
    }