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(); }
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); }
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); }
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(); } }
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); }
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); }
public void add_shadow_card(EnemyCard shadow_card) { //?!?! if (shadow_card != null) { this.shadow_cards.Add(shadow_card); } }
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(); }
void Awake() { InstantiateCards(); m_hunter = Instantiate(m_hunter.gameObject).GetComponent <EnemyCard>(); GameLogic.Get().m_currentScenario = this; }
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); }
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)); } }
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); } }
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); }
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()!!!"); }
public void RemoveFromList(EnemyCard enemyCard) { enemyList.Remove(enemyCard); Destroy(enemyCard.gameObject); if (enemyList.Count == 0) { player.inCombat = false; } }
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(); }
public void enemy_attack_resolved(EnemyCard enemy) { foreach (EnemyCard e in engaged_enemies) { if (enemy == e) { e.resolve_attack(); } } }
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()!!!"); }
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; } }
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; }
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); }
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); }
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); }
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; } }
public EnemyCard DrawTopCard() { if (cards.Count <= 0) { enemyDiscard.ShuffleDiscardIntoDeck(); } EnemyCard cardToDraw = cards[0]; cards.RemoveAt(0); return(cardToDraw); }
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); }
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; } }
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); } }
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; } }