public IEnumerator BreakShields(GameObject attackingCard, Player shieldOwner) { CardBase cardInfo = attackingCard.GetComponent <CardBase>(); for (int i = 0; i < cardInfo.numberOfShieldsToBreak; i++) { if (shieldOwner.Sheilds.Count > 0) { int randomIndex = Random.Range(0, shieldOwner.Sheilds.Count); GameObject shield = shieldOwner.Sheilds[randomIndex]; shieldOwner.Hand.Add(shield); shieldOwner.Sheilds.Remove(shield); CardBase shieldInfo = shield.GetComponent <CardBase>(); shieldInfo.currentLocation = DuelManager.CardLocations.Hand; duelManager.attackingCard = null; duelManager.activeCard = null; duelManager.activeBlocker = null; battleInfo.SetActive(false); if (shieldInfo.keyWord.Contains(CardBase.KeyWordEffects.SheildTrigger)) { duelManager.activeCard = shieldInfo.gameObject; if (shieldInfo.owner == duelManager.player2) { AITargeting targeting = new AITargeting(); if (targeting.FindTarget(shieldInfo)) { StartCoroutine(Cast(shieldInfo.owner, shieldInfo.gameObject)); } else { StartCoroutine(Cast(shieldInfo.owner, shieldInfo.gameObject)); } } else { StartCoroutine(Cast(shieldInfo.owner, shieldInfo.gameObject)); } while (duelManager.duelState != DuelManager.DuelState.None) { yield return(new WaitForEndOfFrame()); } } else { duelManager.duelState = DuelManager.DuelState.None; } cardInfo.isTapped = true; } } yield return(null); }
public void Initialize(Character character) { _parentCharacter = character; WorkingMemory = new WorkingMemory(); WorkingMemory.Initialize(_parentCharacter); BlackBoard = new BlackBoard(); Sensor = new AISensor(); Sensor.Initialize(_parentCharacter); TargetingSystem = new AITargeting(); TargetingSystem.Initialize(_parentCharacter); WeaponSystem = new AIWeapon(); WeaponSystem.Initialize(_parentCharacter); Planner = new GoapPlanner(this); _goals = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterGoalSet(_parentCharacter.GoapID); _actions = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterActionSet(_parentCharacter.GoapID); _currentWorldStates = new List <GoapWorldState>(); _parentCharacter.MyEventHandler.OnCurrentActionComplete -= OnCurrentActionComplete; _parentCharacter.MyEventHandler.OnCurrentActionComplete += OnCurrentActionComplete; _parentCharacter.MyEventHandler.OnPerFrameTimer -= PerFrameUpdate; _parentCharacter.MyEventHandler.OnPerFrameTimer += PerFrameUpdate; //update parent character for each action foreach (GoapAction action in _actions) { action.ParentCharacter = _parentCharacter; } //BlackBoard.PatrolLoc = new Vector3(63.9f, 0.3f, -13.3f); //BlackBoard.PatrolRange = new Vector3(30, 10, 15); if (ControlType != AIControlType.Player) { BlackBoard.GuardLevel = 1; _parentCharacter.SendCommand(CharacterCommands.SetAlert); } _currentGoal = null; _currentAction = null; _parentCharacter.MyEventHandler.OnOneSecondTimer += OnOneSecondTimer; }
public void Initialize(Character character) { _parentCharacter = character; WorkingMemory = new WorkingMemory(); WorkingMemory.Initialize(_parentCharacter); BlackBoard = new BlackBoard(); Sensor = new AISensor(); Sensor.Initialize(_parentCharacter); TargetingSystem = new AITargeting(); TargetingSystem.Initialize(_parentCharacter); WeaponSystem = new AIWeapon(); WeaponSystem.Initialize(_parentCharacter); Planner = new GoapPlanner(this); _goals = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterGoalSet(_parentCharacter.GoapID); _actions = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterActionSet(_parentCharacter.GoapID); _currentWorldStates = new List<GoapWorldState>(); _parentCharacter.MyEventHandler.OnCurrentActionComplete += OnCurrentActionComplete; _parentCharacter.MyEventHandler.OnPerFrameTimer += PerFrameUpdate; //update parent character for each action foreach(GoapAction action in _actions) { action.ParentCharacter = _parentCharacter; } //BlackBoard.PatrolLoc = new Vector3(63.9f, 0.3f, -13.3f); //BlackBoard.PatrolRange = new Vector3(30, 10, 15); if(ControlType != AIControlType.Player) { BlackBoard.GuardLevel = 1; _parentCharacter.SendCommand(CharacterCommands.SetAlert); } _currentGoal = null; _currentAction = null; _parentCharacter.MyEventHandler.OnOneSecondTimer += OnOneSecondTimer; }
public void Initialize(Character character) { _parentCharacter = character; WorkingMemory = new WorkingMemory(); WorkingMemory.Initialize(_parentCharacter); BlackBoard = new BlackBoard(); Sensor = new AISensor(); Sensor.Initialize(_parentCharacter); TargetingSystem = new AITargeting(); TargetingSystem.Initialize(_parentCharacter); WeaponSystem = new AIWeapon(); WeaponSystem.Initialize(_parentCharacter); Planner = new GoapPlanner(this); _goals = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterGoalSet(_parentCharacter.ID); _actions = GameManager.Inst.DBManager.DBHandlerAI.GetCharacterActionSet(_parentCharacter.ID); _currentWorldStates = new List<GoapWorldState>(); _parentCharacter.MyEventHandler.OnNewEnemyTargetFound += OnImportantEvent; _parentCharacter.MyEventHandler.OnCurrentActionComplete += OnCurrentActionComplete; //update parent character for each action foreach(GoapAction action in _actions) { action.ParentCharacter = _parentCharacter; } BlackBoard.PatrolLoc = new Vector3(-15, 0, -15); BlackBoard.PatrolRange = new Vector3(20, 10, 20); BlackBoard.HasPatrolInfo = true; if(ControlType != AIControlType.Player) { _currentGoal = null; _currentAction = null; FindAndExecuteAction(); } }
public IEnumerator TriggerCast() { yield return(new WaitForSeconds(1)); AITargeting targeting = new AITargeting(); if (player.Hand.Count > 0) { for (int i = 0; i < player.Hand.Count; i++) { CardBase cardInfo = player.Hand[i].GetComponent <CardBase>(); if (gameActions.CostIsMet(cardInfo.owner, cardInfo.gameObject)) { if (cardInfo.cardType == CardBase.CardType.Spell) { if (cardInfo.needsTarget) { for (int j = 0; j < cardInfo.numberOfTargets; j++) { if (targeting.FindTarget(cardInfo)) { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); yield return(new WaitForSeconds(.5f)); } yield return(new WaitForSeconds(2)); } } else { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); } } else { //summon creature if (cardInfo.effectType.Contains(Effects.EffectType.OnSummon)) { if (cardInfo.needsTarget) { for (int j = 0; j < cardInfo.numberOfTargets; j++) { if (targeting.FindTarget(cardInfo)) { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); } else if (!cardInfo.keyWord.Contains(CardBase.KeyWordEffects.MustResolveEffect)) { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); } } } else { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); } } else { gameActions.StartCoroutine(gameActions.Cast(player, cardInfo.gameObject)); } } yield return(new WaitForSeconds(1f)); } while (duelManager.duelState != DuelManager.DuelState.None) { yield return(new WaitForEndOfFrame()); } } } duelManager.turnPhase = DuelManager.TurnPhase.Battle; //the AI will finish on its own yield return(null); }