Exemplo n.º 1
0
        /// <summary>
        ///  This would be used to check if a current state change will have to be cancelled.
        /// For example, suppose the character is attacking and the next state is attack.
        /// We just want him him to attack every 0.25seconds, we return true to cancel this change of states.
        /// </summary>
        /// <param name="playerState"></param>
        /// <returns></returns>
        private bool CheckIfAbortState(PlayerStateController.PlayerState newPlayerState)
        {
            //todo: doublecheck other states if they need to do something as well
            bool returner = false;

            /*    switch (newPlayerState)
             *  {
             *      case PlayerStateController.PlayerState.idle:
             *
             *          break;
             *      case PlayerStateController.PlayerState.walk:
             *
             *          break;
             *      case PlayerStateController.PlayerState.run:
             *
             *          break;
             *      case PlayerStateController.PlayerState.crawling:
             *
             *          break;
             *
             *      case PlayerStateController.PlayerState.jump:
             *          float nextAllowedJump =
             *              PlayerStateController.stateDelayTimer[(int)PlayerStateController.PlayerState.jump];
             *
             *          if (nextAllowedJump < 0.1f || nextAllowedJump > Time.time)
             *              returner = true;
             *          else
             *              returner = false;
             *          break;
             *
             *      case PlayerStateController.PlayerState.throwItem:
             *          float nextAllowedThrowItem =
             *              PlayerStateController.stateDelayTimer[(int)PlayerStateController.PlayerState.throwItem];
             *          if (nextAllowedThrowItem > Time.time)
             *              returner = true;
             *          else
             *              returner = false;
             *          break;
             *
             *  }*/
            return(returner);
        }
Exemplo n.º 2
0
        /// <summary>
        /// compare the current state against the new desired playerstate
        /// </summary>
        /// <param name="playerState"></param>
        /// <returns></returns>
        private bool CheckValidStatePairing(PlayerStateController.PlayerState newPlayerState)
        {
            bool returner = false;

            /*   switch (currentState)
             * {
             *     //any state can talk over from idle
             *     case PlayerStateController.PlayerState.idle:
             *         returner = true;
             *         break;
             *     //any state can take over from walking, crawling and running
             *     case PlayerStateController.PlayerState.run:
             *         returner = true;
             *         break;
             *     case PlayerStateController.PlayerState.walk:
             *         returner = true;
             *         break;
             *     case PlayerStateController.PlayerState.crawling:
             *         returner = true;
             *         break;
             *
             *     //only state that can take over from a jump is a landing or killing
             *
             *     case PlayerStateController.PlayerState.jump:
             *         if (newPlayerState == PlayerStateController.PlayerState.landing ||
             *             newPlayerState == PlayerStateController.PlayerState.throwItem ||
             *             newPlayerState == PlayerStateController.PlayerState.usePotion)
             *             returner = true;
             *         else
             *             returner = false;
             *         break;
             *     //only state that can take over from a fall  is a landing or killing
             *
             *     case PlayerStateController.PlayerState.fall:
             *         if (newPlayerState == PlayerStateController.PlayerState.landing ||
             *             newPlayerState == PlayerStateController.PlayerState.throwItem ||
             *             newPlayerState == PlayerStateController.PlayerState.usePotion)
             *             returner = true;
             *         else
             *             returner = false;
             *         break;
             *     //only state that can take over from landing is movement or idleness
             *     case PlayerStateController.PlayerState.landing:
             *         if (newPlayerState == PlayerStateController.PlayerState.walk ||
             *             newPlayerState == PlayerStateController.PlayerState.run ||
             *             newPlayerState == PlayerStateController.PlayerState.crawling ||
             *             newPlayerState == PlayerStateController.PlayerState.idle)
             *             returner = true;
             *         else
             *             returner = false;
             *         break;
             *
             *     //only state that can take over from resurecction is idle
             *     case PlayerStateController.PlayerState.resurrect:
             *         if (newPlayerState == PlayerStateController.PlayerState.idle)
             *             returner = true;
             *         else
             *             returner = false;
             *         break;
             *     case PlayerStateController.PlayerState.throwItem:
             *         returner = true;
             *         break;
             *     case PlayerStateController.PlayerState.usePotion:
             *         returner = true;
             *         break;
             *
             *
             * }*/
            return(returner);
        }
Exemplo n.º 3
0
        /// <summary>
        /// OnStateChange is called whenever we make a change tot he player's state from
        /// anywhere in the game's code
        /// </summary>
        /// <param name="playerState"></param>
        private void OnStateChange(PlayerStateController.PlayerState newPlayerState)
        {
            //if the current state are the same, abort. No need to change the state we're in

            /*     if (newPlayerState == currentState)
             *   {
             *       return;
             *   }
             *
             *   //check if any special conditions that would cause this new state to abort
             *   if (CheckIfAbortState(newPlayerState))
             *   {
             *       return;
             *   }*/
            /*
             * //check if the current is allowed to transition into this new state. if not, abort.
             * if (!CheckValidStatePairing(newPlayerState))
             * {
             *   return;
             * }
             *
             * //if we're here, then state change is allowed
             */
            switch (newPlayerState) //for all cases, you must activate the text speech bubble
            {
            case PlayerStateController.PlayerState.chasing:
                TextBubbleGameObject.SetActive(true);

                switch (TargetAgent.tag)
                {
                case "RunToOrangeHome":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.goHome, "");
                    break;

                case "RunToBananaHome":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.goHome, "");
                    break;

                case "TeamOrangeFlagArea":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.goHome, "");
                    break;

                case "TeamBananaFlagArea":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.goHome, "");
                    break;

                case "TeamOrange":
                    if (tag == "TeamOrange")
                    {
                        textBubble.ApplyNewImage(ShowTextBubble.imagetype.untag, "");
                    }
                    else
                    {
                        textBubble.ApplyNewImage(ShowTextBubble.imagetype.stop, "");
                    }
                    break;

                case "TeamBanana":
                    if (tag == "TeamBanana")
                    {
                        textBubble.ApplyNewImage(ShowTextBubble.imagetype.untag, "");
                    }
                    else
                    {
                        textBubble.ApplyNewImage(ShowTextBubble.imagetype.stop, "");
                    }
                    break;

                case "Orange":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.chaseFlag, "orange");
                    break;

                case "Banana":
                    textBubble.ApplyNewImage(ShowTextBubble.imagetype.chaseFlag, "");
                    break;
                }

                break;

            case PlayerStateController.PlayerState.idle:
                TextBubbleGameObject.SetActive(true);
                textBubble.ApplyNewImage(ShowTextBubble.imagetype.wandering, "");
                break;

            case PlayerStateController.PlayerState.holdingFlag:
                TextBubbleGameObject.SetActive(true);
                textBubble.ApplyNewImage(ShowTextBubble.imagetype.goHome, "");

                // textBubble.ApplyNewText("I'm holding the flag!");
                break;

            case PlayerStateController.PlayerState.IsTaggedRunningHome:
                TextBubbleGameObject.SetActive(true);
                textBubble.ApplyNewImage(ShowTextBubble.imagetype.taggedRunningHome, "");
                break;

            case PlayerStateController.PlayerState.IsTagged:
                TextBubbleGameObject.SetActive(true);
                textBubble.ApplyNewImage(ShowTextBubble.imagetype.tagged, "");
                break;

            case PlayerStateController.PlayerState.untagger:
                TextBubbleGameObject.SetActive(true);
                textBubble.ApplyNewImage(ShowTextBubble.imagetype.untag, "");
                break;
            }

            //store the current state as the previous state
            previousState = currentState;

            //store new state as the current state
            currentState = newPlayerState;
        }