Пример #1
0
        void StartTurn(PhaseEnum p)
        {
            switch (p)
            {
            case PhaseEnum.PlottingPhase:
                PlottingPhaseInit();
                break;

            case PhaseEnum.MovePhase:
                process = MovePhaseProcess;
                directionUI.SetActive(true);
                board.GetSquare(currentSquare).PlayerExit();
                break;

            case PhaseEnum.RangePhase:
            case PhaseEnum.MeleePhase:
                SetUsedCard(currentSegment);
                directionUI.SetActive(true);
                startSquare  = currentSquare;
                targetSquare = startSquare;
                process      = RangePhaseProcess;
                break;
            }
            uiManager.SwitchUI(p, true);
        }
Пример #2
0
        /// <summary>
        /// PlottingPhaseの実装セット
        /// </summary>
        #region PlottingPhase

        /// <summary>
        /// OnReceiveDataに加える。サーバから手札を受け取るときに使う。
        /// データ形式...data0~Imagination番目:手札のカードID
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        void ReceiveHandsEvent(object sender, byte[] data)
        {
            ThrowAwayHands();
            int currentIndex = 0;

            for (int i = 0; i < character.Imagination; i++)
            {
                if (data[i] == 255)
                {
                    break;
                }

                hands |= (1 << data[i]);
                handObjects[i].SetCardInfo(character.GetCard(data[i]));
            }
            currentIndex = character.Imagination;
            if (BitCalculation.BitCount(deck) < character.Imagination)
            {
                deck     = ((1 << character.Hp) - 1);
                discards = 0;
            }

            deck        &= ~hands;
            currentPhase = PhaseEnum.PlottingPhase;
            process      = PlottingPhaseProcess;
            signal       = true;
        }
Пример #3
0
        /// <summary>
        /// プレイヤーがアクションを起こすプロセス
        /// </summary>
        void ActionPlayerProcess()
        {
            players[currentPlayerID].Act();

            //if (!players[currentPlayerID].Signal)
            //return;

            if (turn == maxPlayer - 1)
            {
                turn = 0;
                if (currentSegment == 0)
                {
                    currentSegment++;
                    ConvertCardIDIntoCardInfomation(currentSegment);
                    DecideActionOrder();
                    AllocateTurnToPlayer();
                    return;
                }
                currentSegment = 0;
                process        = WaitPhaseNoticeProcess;
                currentPhase   = PhaseEnum.PlottingPhase;
                phaseNotice.DisplayPhaseNotice(currentPhase);
                //for (int i = 0; i < maxPlayer; i++)
                //players[i].StartTurn(currentPhase);

                return;
            }
            turn++;
            AllocateTurnToPlayer();
        }
Пример #4
0
		public PhaseChangedEventArgs(Player player, PhaseEnum oldPhase)
		{
			CurrentPlayer = player;
			OldPhase = oldPhase;
			if (player != null)
				NewPhase = player.Phase;
		}
Пример #5
0
		public PhaseChangingEventArgs(Player player, PhaseEnum newPhase)
		{
			CurrentPlayer = player;
			if (player != null)
				CurrentPhase = player.Phase;
			NewPhase = newPhase;
		}
Пример #6
0
        public void ForceAdvancePhase(bool EndFirst)
        {
            Debug.Log("Force advance phase from [" + name + "]\n");
            if (Starting != null)
            {
                StopCoroutine(Starting);
            }

            //We want to mark to begin next phase on end completion.
            //Unintended consequence to consider later - We're setting that value to true and we might want it false later.
            //Should it always get set when called?

            if (EndFirst)
            {
                if (Ending == null)
                {
                    //Set us to a reasonable phase.
                    PhaseState   = PhaseEnum.Running;
                    CurrentPhase = this;
                    //Start the end
                    StartCoroutine(EndPhase());
                }
                //Otherwise do nothing
            }
            else
            {
                if (Ending != null)
                {
                    StopCoroutine(Starting);
                }
            }
        }
Пример #7
0
        public void DisplayPhaseNotice(PhaseEnum p)
        {
            switch (p)
            {
            case PhaseEnum.PlottingPhase:
                text.text   = StringNameSegmentPhase;
                image.color = Color.yellow;
                break;

            case PhaseEnum.MovePhase:
                text.text   = StringNameMovePhase;
                image.color = Color.green;
                break;

            case PhaseEnum.RangePhase:
                text.text   = StringNameRangePhase;
                image.color = Color.blue;
                break;

            case PhaseEnum.MeleePhase:
                text.text   = StringNameMovePhase;
                image.color = Color.red;
                break;
            }
            vector3Tmp.Set(0, 1f, 1f);
            transform.localScale = vector3Tmp;
            vector3Tmp.Set(Screen.width / 2, Screen.height / 2, 0);
            transform.position = vector3Tmp;
            IsActing           = true;
        }
        private void DisplayStage(PhaseEnum phase, PlayerMode playerMode)
        {
            StringBuilder sbStage = new StringBuilder();

            switch (phase)
            {
            case PhaseEnum.ActionTreasure:
                sbStage.Append("Action (Treasure)");
                break;

            case PhaseEnum.BuyTreasure:
                sbStage.Append("Buy (Treasure)");
                break;

            default:
                sbStage.Append(phase);
                break;
            }
            switch (playerMode)
            {
            case PlayerMode.Playing:
            case PlayerMode.Buying:
            case PlayerMode.Choosing:
                sbStage.AppendFormat(" - {0}", playerMode);
                break;
            }

            lStage.Content = sbStage.ToString();
        }
Пример #9
0
 public bool Equals(PhaseEnum obj)
 {
     if ((object)obj == null)
     {
         return(false);
     }
     return(StringComparer.OrdinalIgnoreCase.Equals(this.Value, obj.Value));
 }
Пример #10
0
 public PhaseChangedEventArgs(Player player, PhaseEnum oldPhase)
 {
     CurrentPlayer = player;
     OldPhase      = oldPhase;
     if (player != null)
     {
         NewPhase = player.Phase;
     }
 }
Пример #11
0
 public PhaseChangingEventArgs(Player player, PhaseEnum newPhase)
 {
     CurrentPlayer = player;
     if (player != null)
     {
         CurrentPhase = player.Phase;
     }
     NewPhase = newPhase;
 }
Пример #12
0
 /// <summary>
 /// actionOrderに従って、プレイヤーにターンを割り振る
 /// </summary>
 void AllocateTurnToPlayer()
 {
     currentPlayerID = actionOrder[turn];
     if (currentPhase != ChangeCardTypeToPhase(cards[currentPlayerID].Type))
     {
         currentPhase = ChangeCardTypeToPhase(cards[currentPlayerID].Type);
         phaseNotice.DisplayPhaseNotice(currentPhase);
         process = WaitPhaseNoticeProcess;
     }
     //players[currentPlayerID].StartTurn(currentPhase, currentSegment);
     signal = true;
 }
Пример #13
0
    public static int AttackGuageAmount(PhaseEnum phase)
    {
        switch (phase)
        {
        case PhaseEnum.Start: return(20);

        case PhaseEnum.Main: return(15);

        case PhaseEnum.Finale: return(10);

        default: return(0);
        }
    }
Пример #14
0
 public void RegressPhase()
 {
     PhaseState = PhaseEnum.Unstarted;
     if (Starting != null)
     {
         StopCoroutine(Starting);
     }
     if (Ending != null)
     {
         StopCoroutine(Ending);
     }
     PreviousPhase.ResetPhase(true);
 }
Пример #15
0
    public static float WordSpawnDelay(PhaseEnum phase)
    {
        switch (phase)
        {
        case PhaseEnum.Start: return(2);

        case PhaseEnum.Main: return(2.5f - WordSpace.inst.playerTypingRate);

        case PhaseEnum.Finale: return(1);

        default: return(0);
        }
    }
Пример #16
0
    public static float NameSpawnDelay(PhaseEnum phase)
    {
        switch (phase)
        {
        case PhaseEnum.Start: return(15);

        case PhaseEnum.Main: return(12);

        case PhaseEnum.Finale: return(8);

        default: return(0);
        }
    }
Пример #17
0
    public static int RateArrangePoint(PhaseEnum phase)
    {
        switch (phase)
        {
        case PhaseEnum.Start: return(300);

        case PhaseEnum.Main: return(150);

        case PhaseEnum.Finale: return(50);

        default: return(0);
        }
    }
Пример #18
0
    public static float NameSpawnReduce(PhaseEnum phase)
    {
        switch (phase)
        {
        case PhaseEnum.Start: return(1);

        case PhaseEnum.Main: return(1);

        case PhaseEnum.Finale: return(0.4f);

        default: return(0);
        }
    }
Пример #19
0
        IEnumerator StartPhase()
        {
            StartingCorout = true;
            if (PhaseState == PhaseEnum.Unstarted)
            {
                PhaseState = PhaseEnum.Starting;
                yield return(OnPhaseStart());

                yield return(new WaitForSeconds(StartDuration));

                PhaseState   = PhaseEnum.Running;
                CurrentPhase = this;
            }
            StartingCorout = false;
        }
Пример #20
0
 void Awake()
 {
     words            = new List <WordObject>();
     nameWords        = new List <NameWord>();
     wordBackgrounds  = new Sprite[4, 5];
     hopaeBackgrounds = new Sprite[6];
     stringWords      = new List <string> [4];
     for (int i = 0; i < 4; i++)
     {
         stringWords[i] = new List <string>();
     }
     currentPhase = PhaseEnum.Start;
     ResourcesLoader.ParseCSVFile();
     ResourcesLoader.LoadImages();
 }
Пример #21
0
 /// <summary>
 /// actionOrderに従って、プレイヤーにターンを割り振る
 /// </summary>
 void AllocateTurnToPlayer()
 {
     byte[] data = new byte[2];
     currentPlayerID = actionOrder[turn];
     data[0]         = (byte)currentPlayerID;
     if (currentPhase != ChangeCardTypeToPhase(cards[currentPlayerID].Type))
     {
         currentPhase = ChangeCardTypeToPhase(cards[currentPlayerID].Type);
     }
     data[1] = (byte)currentPhase;
     for (int i = 0; i < maxPlayer; i++)
     {
         server.StartSend(clients[i], data);
     }
     server.StartReceive(clients[currentPlayerID], 1024);//データサイズ変更
 }
Пример #22
0
 void Start()
 {
     board.Initialize();
     board.ChangeRedBitFlag(board.GetSquare(3).GetAdjacentSquares(BoardDirection.Right).Number, true);
     board.ApplayRedBitFlag();
     actionOrder = new int[6] {
         0, 1, 2, 3, 4, 5
     };
     players[0].Initialize(new PlayerInformation(new TestCharacter()));
     DrawCards();
     currentPhaseEnum = PhaseEnum.PlottingPhase;
     currentPhase     = phaseManager.GetPhase(currentPhaseEnum);
     phaseManager.Initialize(this, players[0]);
     currentPhase.Initialize();
     phaseNotice.DisplayPhaseNotice(currentPhaseEnum);
     //players[0].StartTurn(phases[(int)currentPhase]);
 }
Пример #23
0
 void Start()
 {
     board.Initialize();
     board.ChangeRedBitFlag(board.GetSquare(3).GetAdjacentSquares(BoardDirection.Right).Number, true);
     board.ApplayRedBitFlag();
     playerSegments = new System.Tuple <int, int> [6];
     actionOrder    = new int[6] {
         0, 1, 2, 3, 4, 5
     };
     cards         = new CardInfomation[6];
     characters    = new Character[6];
     characters[0] = new TestCharacter();
     //players[0].Initialize(characters[0]);
     currentPhase = PhaseEnum.PlottingPhase;
     phaseNotice.DisplayPhaseNotice(currentPhase);
     process = WaitPhaseNoticeProcess;
 }
Пример #24
0
        public void ResetPhase(bool Begin = true)
        {
            PhaseState = PhaseEnum.Unstarted;
            if (Starting != null)
            {
                StopCoroutine(Starting);
            }
            if (Ending != null)
            {
                StopCoroutine(Ending);
            }
            if (Begin)
            {
                Starting = StartCoroutine(StartPhase());
            }

            TimeElapsedThisPhase = 0;
        }
Пример #25
0
        IEnumerator EndPhase()
        {
            EndingCorout = true;
            if (PhaseState == PhaseEnum.Running || PhaseState == PhaseEnum.Starting)
            {
                PhaseState = PhaseEnum.Ending;
                yield return(OnPhaseEnd());

                yield return(new WaitForSeconds(EndDuration));

                PhaseState = PhaseEnum.Ended;

                if (NextPhase != null)
                {
                    NextPhase.ResetPhase();
                }
            }
            EndingCorout = false;
        }
Пример #26
0
        public void SwitchUI(PhaseEnum p, bool on)
        {
            switch (p)
            {
            case PhaseEnum.PlottingPhase:
                selectSegmentsPhaseUI.SetActive(on);
                break;

            case PhaseEnum.MovePhase:
                movePhaseUI.SetActive(on);
                directoinButtons.SetActive(on);
                break;

            case PhaseEnum.RangePhase:
            case PhaseEnum.MeleePhase:
                rangeMeleePhaseUI.SetActive(on);
                directoinButtons.SetActive(on);
                break;
            }
        }
Пример #27
0
    public static float GradeProb(PhaseEnum phase, int gradeProbIndex)
    {
        float gradeProb = 0;

        switch (phase)
        {
        case PhaseEnum.Start:
            switch (gradeProbIndex)
            {
            case 0: gradeProb = 0.4f; break;

            case 1: gradeProb = 0.8f; break;

            case 2: gradeProb = 1; break;
            }
            break;

        case PhaseEnum.Main:
            switch (gradeProbIndex)
            {
            case 0: gradeProb = 0.5f - 0.5f * WordSpace.inst.playerTypingRate; break;

            case 1: gradeProb = 1 - 0.5f * WordSpace.inst.playerTypingRate; break;

            case 2: gradeProb = 1 - 0.15f * WordSpace.inst.playerTypingRate; break;
            }
            break;

        case PhaseEnum.Finale:
            switch (gradeProbIndex)
            {
            case 0: gradeProb = 0.2f - 0.2f * WordSpace.inst.playerTypingRate; break;

            case 1: gradeProb = 0.8f - 0.45f * WordSpace.inst.playerTypingRate; break;

            case 2: gradeProb = 0.9f - 0.15f * WordSpace.inst.playerTypingRate; break;
            }
            break;
        }
        return(gradeProb);
    }
Пример #28
0
        /// <summary>
        /// actionOrderに従って、プレイヤーにターンを割り振る
        /// </summary>
        void AllocateTurnToPlayer()
        {
            currentPlayerID = actionOrder[turn];
            PhaseEnum p = ChangeCardTypeToPhase(players[currentPlayerID].Information.GetPlot(CurrentSegment).Type);

            if (currentPhaseEnum != p)
            {
                currentPhaseEnum = p;
                phaseNotice.DisplayPhaseNotice(currentPhaseEnum);
            }

            if (currentPlayerID == 0)
            {
                //players[0].StartTurn(phases[(int)currentPhase]);
                currentPhase = phaseManager.GetPhase(currentPhaseEnum);
                currentPhase.Initialize();
            }
            else
            {
                //autoPlayers[currentPlayerID]の行動
            }
        }
Пример #29
0
        void TransitionToTheNextTurn()
        {
            if (turn == maxPlayer - 1)
            {
                CurrentSegment++;
                turn = 0;
                if (CurrentSegment == 2)
                {
                    CurrentSegment = 0;
                    ThrowAwayHands();
                    DrawCards();
                    currentPhaseEnum = PhaseEnum.PlottingPhase;
                    currentPhase     = phaseManager.GetPhase(currentPhaseEnum);
                    currentPhase.Initialize();
                    phaseNotice.DisplayPhaseNotice(currentPhaseEnum);
                    return;
                }
                DecideActionOrder();
            }

            AllocateTurnToPlayer();
        }
Пример #30
0
		internal void UndoPhaseChange(PhaseEnum newPhase)
		{
			if (this.Phase == PhaseEnum.Buy && newPhase == PhaseEnum.BuyTreasure && this.CurrentTurn.CardsBought.Count == 0)
			{
				this.Phase = PhaseEnum.BuyTreasure;
				return;
			}
			//if (this.Phase == PhaseEnum.Treasure && newPhase == PhaseEnum.Action && this.CurrentTurn.CardsPlayed.Count(c => (c.Category & Category.Treasure) == Category.Treasure) == 0)
			//{
			//    this.Phase = PhaseEnum.Action;
			//    this.Actions = 0;
			//    return;
			//}
		}
		private void DisplayStage(PhaseEnum phase, PlayerMode playerMode)
		{
			StringBuilder sbStage = new StringBuilder();
			switch (phase)
			{
				case PhaseEnum.ActionTreasure:
					sbStage.Append("Action (Treasure)");
					break;
				case PhaseEnum.BuyTreasure:
					sbStage.Append("Buy (Treasure)");
					break;
				default:
					sbStage.Append(phase);
					break;
			}
			switch (playerMode)
			{
				case PlayerMode.Playing:
				case PlayerMode.Buying:
				case PlayerMode.Choosing:
					sbStage.AppendFormat(" - {0}", playerMode);
					break;
			}

			lStage.Content = sbStage.ToString();
		}
Пример #32
0
		public BenefitReceivingEventArgs(Player player, CardBenefit cardBenefit)
		{
			this.Player = new Visual.VisualPlayer(player);
			this.Benefit = cardBenefit;
			this.Phase = player.Phase;
		}
Пример #33
0
 public EnumBlock(HaxeEmitterContext context, PhaseEnum type)
     : base(context)
 {
     _type = type;
 }
Пример #34
0
		public GameUndoPlayMessage(Player player, PhaseEnum phase)
			: this(null, player, phase)
		{
			this.Player = player;
			this.Phase = phase;
		}
Пример #35
0
		public GameUndoPlayMessage(WaitCallback waitCallback, Player player, PhaseEnum phase)
			: base(waitCallback)
		{
			this.Player = player;
			this.Phase = phase;
		}
Пример #36
0
        /// <summary>
        /// byteの配列
        /// rData[0]:DataType
        /// Notification...rData[1]:プレイヤーID,rData[2]:カードID
        /// Action
        /// </summary>
        void CompileReceivedData()
        {
            byte[] rData;

            if (receivedData.Count == 0)
            {
                return;
            }

            lock (receiveEventLock)
            {
                rData = receivedData.Dequeue();
            }

            switch (DataType.Notification + rData[0])
            {
            case DataType.Notification:
                ReceiveNotification();
                break;

            case DataType.Action:
                ReceiveAction();
                break;

            case DataType.React:
                ReceiveReact();
                break;
            }

            //以下、ローカル関数

            void ReceiveNotification()
            {
                currentPlayerID = rData[1];
                PhaseEnum p = ChangeCardTypeToPhase(players[currentPlayerID].Information.Chara.GetCard(rData[2]).Type);

                if (currentPhaseEnum != p)
                {
                    currentPhaseEnum = p;
                    phaseNotice.DisplayPhaseNotice(currentPhaseEnum);
                }

                if (currentPlayerID == selfPlayerID)
                {
                    //players[selfPlayerID].StartTurn(phases[(int)currentPhase]);
                    currentPhase = phaseManager.GetPhase(currentPhaseEnum);
                    currentPhase.Initialize();
                }
                else
                {
                    players[selfPlayerID].Information.SetPlot(CurrentSegment, rData[2]);
                    //データ受け取り開始
                }
            }

            void ReceiveAction()
            {
                Player tmp = players[currentPlayerID];

                currentAnimation = tmp.CharaAnim;
                switch (PhaseEnum.PlottingPhase + rData[2])
                {
                case PhaseEnum.MovePhase:
                    tmp.CalculateCurrentSquare(rData[3], 4, rData, tmp.Information.Team != players[selfPlayerID].Information.Team);
                    break;

                case PhaseEnum.RangePhase:
                    break;
                }
            }

            void ReceiveReact()
            {
            }
        }
Пример #37
0
 public Phase GetPhase(PhaseEnum phaseEnum)
 {
     return(phases[(int)phaseEnum]);
 }