Пример #1
0
    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);
    }
Пример #2
0
    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;
    }
Пример #3
0
	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;
	
	}
Пример #4
0
    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();
        }
    }
Пример #5
0
    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);
    }