public void Init(Card _card, GameState.GameStateType _usableState, int _eventIdx, CardInfo.EffectInfo ei, Func <Game, Player, bool> _isClickable)
    {
        card        = _card;
        usableState = _usableState;
        eventIdx    = _eventIdx;

        this.GetComponentInChildren <Text>().text = ei.Text;

        Color color = Color.black;

        switch (ei.Type)
        {
        case CardInfo.EffectInfo.EffectType.Prosecution:
            color = ViewManager.Instance.ProsecutionColor;
            break;

        case CardInfo.EffectInfo.EffectType.Defense:
            color = ViewManager.Instance.DefenseColor;
            break;

        case CardInfo.EffectInfo.EffectType.Neutral:
            color = ViewManager.Instance.NeutralColor;
            break;

        case CardInfo.EffectInfo.EffectType.JurySelect:
            color = ViewManager.Instance.JurySelectColor;
            break;
        }

        this.GetComponent <Image>().color = color;

        isClickable = _isClickable;
        this.GetComponent <Graphic>().raycastTarget = isClickable(GameManager.Instance.Game, ChoiceHandlerDelegator.Instance.CurChoosingPlayer);
    }
示例#2
0
    void Update()
    {
        GameState.GameStateType curState = GameManager.Instance.Game.CurState.StateType;

        string str = string.Empty;

        switch (curState)
        {
        case GameState.GameStateType.JurySelection:
        case GameState.GameStateType.JuryDismissal:
            str = "Jury Selection";
            break;

        case GameState.GameStateType.TrialInChief:
            str = "Trial In Chief";
            break;

        case GameState.GameStateType.Summation:
            str = "Summation";
            break;

        case GameState.GameStateType.Deliberation:
            str = "Deliberation";
            break;
        }
        text.text = str;
    }
示例#3
0
 public void StateChangeRequest(GameState.GameStateType stateToSwitchTo)
 {
     if (shouldChangeState)
         UnityEngine.Debug.LogError("Already Requested to Switching States");
     StateToChangeTo = stateToSwitchTo;
     shouldChangeState = true;
 }
示例#4
0
        public Game(ChoiceHandler[] playerChoiceHandlers, string cardInfoJson, GameState.GameStateType startState = GameState.GameStateType.JurySelection)
        {
            StartState = startState;

            Board = new Board(this);

            CardTemplateGenerator tempGenerator = new CardTemplateGenerator(cardInfoJson);

            List <Card> cards = new List <Card>();

            tempGenerator.GetAllCardTemplates().ForEach(c => cards.Add(new Card(c)));
            Deck = new DeckHolder(cards);

            Discards = new DiscardHolder();

            int idx = 0;

            foreach (Player.PlayerSide side in new Player.PlayerSide[] { Player.PlayerSide.Prosecution, Player.PlayerSide.Defense })
            {
                players.Add(side, new Player(side, playerChoiceHandlers[idx], this));
                idx += 1;
            }

            NotifyStateStart += logStartOfState;
            NotifyGameEnd    += logEndOfGame;

            initStates();
        }
示例#5
0
    private void ChangeState(GameState.GameStateType stateToChangeTo)
    {
        //Make Sure the new state was set up
        if (stateToChangeTo == GameState.GameStateType.NOT_SET)
        {
            UnityEngine.Debug.LogError("You Can't change to a state without setting the new state");
        }

        //pop the old one off
        stateMachine.Pop();

        //Create the New State based on the request
        switch (stateToChangeTo)
        {
        case GameState.GameStateType.SETUP_PLAYER:
        {
            SetupPlayerState setupState = new SetupPlayerState();
            setupState.game = this;
            stateMachine.Push(setupState);
        }
        break;
        }

        shouldChangeState = false;
    }
示例#6
0
 public void StateChangeRequest(GameState.GameStateType stateToSwitchTo)
 {
     if (shouldChangeState)
     {
         UnityEngine.Debug.LogError("Already Requested to Switching States");
     }
     StateToChangeTo   = stateToSwitchTo;
     shouldChangeState = true;
 }
示例#7
0
    private void initCardDisplay(Card card)
    {
        resetDisplay();

        if (cardCanBeDisplayed())
        {
            var cardInfo = card.Template.CardInfo;

            cardName.text     = cardInfo.Name;
            actionPoints.text = card.Template.ActionPts.ToString();

            bool handled = true;
            GameState.GameStateType    stateType      = GameManager.Instance.Game.CurState.StateType;
            List <CardInfo.EffectInfo> cardEffectPair = null;

            switch (stateType)
            {
            case GameState.GameStateType.JurySelection:
                cardEffectPair = cardInfo.JurySelectionInfos;
                break;

            case GameState.GameStateType.TrialInChief:
                cardEffectPair = cardInfo.TrialInChiefInfos;
                break;

            case GameState.GameStateType.Summation:
                cardEffectPair = cardInfo.SummationInfos;
                break;

            default:
                handled = false;
                break;
            }

            if (handled)
            {
                int size = cardEffectPair.Count;
                for (int i = 0; i < size; ++i)
                {
                    CardEventUsageFieldElement eventObj = GameObject.Instantiate(cardEventFieldElementPrefab);
                    eventObj.gameObject.SetActive(true);

                    eventObj.Init(card, stateType, i, cardEffectPair[i], (Game game, Player choosingPlayer) => { return(false); });

                    RectTransform rect = eventObj.GetComponent <RectTransform>();
                    rect.anchorMin = new Vector2(0, 1.0f - (float)(i + 1) / size);
                    rect.anchorMax = new Vector2(1, 1.0f - (float)i / size);

                    eventObj.transform.SetParent(eventFieldParent.transform, false);
                }
            }
        }
    }
示例#8
0
    void Awake()
    {
        GameManager.instance = this;

        TextAsset cardInfoTxt = Resources.Load("HighTreasonCardTexts") as TextAsset;

        GameState.GameStateType startState = GameState.GameStateType.JurySelection;
        if (skipToTrialInChief)
        {
            startState = GameState.GameStateType.TrialInChief;
        }
        else if (skipToSummation)
        {
            startState = GameState.GameStateType.Summation;
        }

        Game = new Game(new ChoiceHandler[] { new UnityChoiceHandler(), new UnityChoiceHandler() }, cardInfoTxt.text, startState);
    }
示例#9
0
        public int GetNumberOfEventsInState(GameState.GameStateType type)
        {
            int num = 0;

            if (type == GameState.GameStateType.JurySelection)
            {
                num = SelectionEvents.Count;
            }
            else if (type == GameState.GameStateType.TrialInChief)
            {
                num = TrialEvents.Count;
            }
            else if (type == GameState.GameStateType.Summation)
            {
                num = SummationEvents.Count;
            }

            return(num);
        }
示例#10
0
    private void updateDisplay(Card card)
    {
        resetDisplay();

        var cardInfo = card.Template.CardInfo;

        typing.text   = cardInfo.Typing;
        cardName.text = cardInfo.Name;
        notes.text    = cardInfo.Notes;
        actionPoints.Init(card);

        GameState.GameStateType[]            stateTypes      = new GameState.GameStateType[] { GameState.GameStateType.JurySelection, GameState.GameStateType.TrialInChief, GameState.GameStateType.Summation };
        List <CardInfo.EffectInfo>[]         cardEffectInfos = new List <CardInfo.EffectInfo>[] { cardInfo.JurySelectionInfos, cardInfo.TrialInChiefInfos, cardInfo.SummationInfos };
        List <CardTemplate.CardEffectPair>[] cardEffectPairs = new List <CardTemplate.CardEffectPair>[] { card.Template.SelectionEvents, card.Template.TrialEvents, card.Template.SummationEvents };
        GameObject[] parentGOs = new GameObject[] { jurySelectionParent, trialInChiefParent, summationParent };

        for (int j = 0; j < stateTypes.Length; ++j)
        {
            List <CardInfo.EffectInfo>         infoList    = cardEffectInfos[j];
            List <CardTemplate.CardEffectPair> effectPairs = cardEffectPairs[j];
            GameObject parentGO = parentGOs[j];
            GameState.GameStateType stateType = stateTypes[j];

            int size = infoList.Count;
            for (int i = 0; i < size; ++i)
            {
                CardEventUsageFieldElement eventObj = GameObject.Instantiate(cardEventFieldElementPrefab);
                eventObj.gameObject.SetActive(true);

                eventObj.Init(card, stateType, i, infoList[i], effectPairs[i].Selectable);

                RectTransform rect = eventObj.GetComponent <RectTransform>();
                rect.anchorMin = new Vector2(0, 1.0f - (float)(i + 1) / size);
                rect.anchorMax = new Vector2(1, 1.0f - (float)i / size);

                eventObj.transform.SetParent(parentGO.transform, false);
            }
        }
    }
示例#11
0
    private void handleNotifyStateStart()
    {
        bool isJurySelect        = GameManager.Instance.Game.CurState.StateType == GameState.GameStateType.JurySelection;
        bool isFirstTrialInChief = (curStateShown == GameState.GameStateType.JurySelection && GameManager.Instance.Game.CurState.StateType == GameState.GameStateType.TrialInChief);
        bool skippedToSummation  = (!trialAndSummationMainBoardGO.activeInHierarchy && GameManager.Instance.Game.CurState.StateType == GameState.GameStateType.Summation);

        if (isJurySelect || isFirstTrialInChief)
        {
            SelectableElementManager.Instance.Reset();
            curStateShown = GameManager.Instance.Game.CurState.StateType;
        }

        if (isJurySelect)
        {
            jurySelectionMainBoardGO.SetActive(true);
        }
        else if (isFirstTrialInChief || skippedToSummation)
        {
            jurySelectionMainBoardGO.SetActive(false);
            trialAndSummationMainBoardGO.SetActive(true);
        }
    }
示例#12
0
            public string ToString(Player choosingPlayer, GameState.GameStateType curStateType)
            {
                string str = "";

                switch (usage)
                {
                case UsageType.Event:
                {
                    str += choosingPlayer.Side + " played " + card.Template.Name + " played as event\n";

                    int idx = (int)misc[0];
                    if (curStateType == GameState.GameStateType.JurySelection)
                    {
                        str += card.Template.CardInfo.JurySelectionInfos[idx].Text;
                    }
                    else if (curStateType == GameState.GameStateType.TrialInChief)
                    {
                        str += card.Template.CardInfo.TrialInChiefInfos[idx].Text;
                    }
                    else if (curStateType == GameState.GameStateType.Summation)
                    {
                        str += card.Template.CardInfo.SummationInfos[idx].Text;
                    }
                } break;

                case UsageType.Action:
                    str += choosingPlayer.Side + " played " + card.Template.Name + " played as action for " + card.Template.ActionPts + " points";
                    break;

                case UsageType.Mulligan:
                    str += choosingPlayer.Side + " mulliganed";
                    break;
                }

                return(str);
            }
示例#13
0
        public bool PlayAsEvent(Game game, Player choosingPlayer, int idx, ChoiceHandler choiceHandler)
        {
            GameState.GameStateType curStateType = game.CurState.StateType;

            CardTemplate.CardChoice cardChoice = null;
            CardTemplate.CardEffect cardEffect = null;

            if (curStateType == GameState.GameStateType.JurySelection)
            {
                cardChoice = Template.SelectionEvents[idx].CardChoice;
                cardEffect = Template.SelectionEvents[idx].CardEffect;
            }
            else if (curStateType == GameState.GameStateType.TrialInChief)
            {
                cardChoice = Template.TrialEvents[idx].CardChoice;
                cardEffect = Template.TrialEvents[idx].CardEffect;
            }
            else if (curStateType == GameState.GameStateType.Summation)
            {
                cardChoice = Template.SummationEvents[idx].CardChoice;
                cardEffect = Template.SummationEvents[idx].CardEffect;
            }

            System.Diagnostics.Debug.Assert(cardChoice != null && cardEffect != null, "Card choice or card effect is null. Should never happen");

            BoardChoices choices = cardChoice(game, choosingPlayer, choiceHandler);

            if (choices.NotCancelled)
            {
                FileLogger.Instance.Log(choices.ToStringForEvent());

                cardEffect(game, choosingPlayer, choices);
            }

            return(choices.NotCancelled);
        }
示例#14
0
 public void SetNextState(GameState.GameStateType stateType)
 {
     CurState = states[stateType];
 }
示例#15
0
 public override void GotoNextState()
 {
     GameState.GameStateType nextStateType = (numVisits < 2) ? GameState.GameStateType.TrialInChief : GameState.GameStateType.Summation;
     game.SetNextState(nextStateType);
 }