public void Build(bool autoKill, UpdateType updateType, bool updateTimeIndependent)
        {
            if (sequence != null)
            {
                sequence.Kill();
            }

            //don't create sequence if there are no tracks
            if (take.trackValues == null || take.trackValues.Count == 0)
            {
                return;
            }

            //create sequence
            sequence = DOTween.Sequence();
            sequence.SetUpdate(updateType, updateTimeIndependent);
            sequence.SetAutoKill(mIsAutoKill = autoKill);
            sequence.Pause(); //don't allow play when dotween default autoplay is on

            int LoopCount;
            int loopBackFrame;
            var loopType = take.loopMode;

            if (isForcedLoop && take.numLoop > 0)
            {
                LoopCount     = -1;
                loopBackFrame = 0;
            }
            else
            {
                LoopCount     = take.numLoop;
                loopBackFrame = take.loopBackToFrame;
            }

            if (LoopCount < 0 && loopBackFrame > 0)
            {
                if (loopType == LoopType.Yoyo)
                {
                    sequence.SetLoops(2, loopType);
                }
                else
                {
                    sequence.SetLoops(1, loopType); //allow sequence to end so we can loop back to specific frame
                }
            }
            else
            {
                sequence.SetLoops(LoopCount, loopType);
            }

            sequence.OnComplete(OnSequenceComplete);
            sequence.OnStepComplete(OnStepComplete);

            //take.maintainCaches(target);

            foreach (Track track in take.trackValues)
            {
                Object tgt = null;
                if ((tgt = track.GetTarget(target)) != null)
                {
                    if (!track.isVersionUpdated) //ensure track data has proper cache
                    {
                        track.updateCache(target);
                    }

                    track.buildSequenceStart(this);

                    for (int keyInd = 0; keyInd < track.keys.Count;)
                    {
                        Key key = track.keys[keyInd];
                        key.build(this, track, keyInd, tgt);

                        //skip some keys (e.g. paths)
                        var c = key.keyCount;
                        keyInd += c > 1 ? c - 1 : 1;
                    }
                }
            }

            //append delay at the end
            if ((LoopCount >= 0 || loopBackFrame <= 0) && take.endFramePadding > 0)
            {
                sequence.AppendInterval(take.endFramePadding / (float)take.frameRate);
            }
        }
Exemple #2
0
    public void ShowVictoryText(int winPlayer, Vector3 p1Offset, Vector3 p2Offset, bool showP2)
    {
        if (gameEnd)
        {
            return;
        }
        pausing = true; gameEnd = true;

        Sprite[] particleSprites = Resources.LoadAll <Sprite>(SpritePaths.Launch_Particles);
        int      d = Random.Range(0, 3), d2 = d + (winPlayer == 1 ? 1 : -1);

        if (d2 == 3)
        {
            d2 = 0;
        }
        else if (d2 < 0)
        {
            d2 = 2;
        }
        Color full = new Color(1.0f, 1.0f, 1.0f, 1.0f), empty = new Color(1.0f, 1.0f, 1.0f, 0.0f);

        for (int i = 0; i < 50; i++)
        {
            float y = -0.1f + Random.Range(0.0f, 0.2f), y2 = -0.1f + Random.Range(0.0f, 0.2f);

            GameObject     particle    = GetGameObject_Tile(new Vector3(-4.0f + 8.0f * i / 100, y), "particle", particleSprites[d], "Cover HUD Dialog Box");
            SpriteRenderer particle_sr = particle.GetComponent <SpriteRenderer>();
            particle_sr.color = empty;
            Sequence s = DOTween.Sequence();
            s.Append(particle_sr.DOColor(full, 0.2f).SetDelay(i / 100.0f));
            s.Join(particle.transform.DOMoveY(y * 1.5f, 0.2f));
            s.Append(particle_sr.DOColor(empty, 0.5f));
            s.Join(particle.transform.DOMoveY(y * 2.5f, 0.5f));

            GameObject     particle2    = GetGameObject_Tile(new Vector3(4.0f - 8.0f * i / 100, y), "particle2", particleSprites[d2], "Cover HUD Dialog Box");
            SpriteRenderer particle2_sr = particle2.GetComponent <SpriteRenderer>();
            particle2_sr.color = empty;
            Sequence s2 = DOTween.Sequence();
            s2.Append(particle2_sr.DOColor(full, 0.2f).SetDelay(i / 100.0f));
            s2.Join(particle2.transform.DOMoveY(y2 * 1.5f, 0.2f));
            s2.Append(particle2_sr.DOColor(empty, 0.5f));
            s2.Join(particle2.transform.DOMoveY(y2 * 2.5f, 0.5f));
        }
        for (int i = 50; i < 100; i++)
        {
            float          y           = -0.1f + Random.Range(0.0f, 0.2f);
            GameObject     particle    = GetGameObject_Tile(new Vector3(winPlayer == 1 ? (-4.0f + 8.0f * i / 100) : (4.0f - 8.0f * i / 100), y), "particle", particleSprites[winPlayer == 1?d:d2], "Cover HUD Dialog Box");
            SpriteRenderer particle_sr = particle.GetComponent <SpriteRenderer>();
            particle_sr.color = empty;
            Sequence s = DOTween.Sequence();
            s.Append(particle_sr.DOColor(full, 0.2f).SetDelay(i / 100.0f));
            s.Join(particle.transform.DOMoveY(y * 1.5f, 0.2f));
            s.Append(particle_sr.DOColor(empty, 0.5f));
            s.Join(particle.transform.DOMoveY(y * 2.5f, 0.5f));
        }
        Sprite[]       textSprites = Resources.LoadAll <Sprite>(SpritePaths.Texts);
        GameObject     text1       = GetGameObject(p1Offset, "P1 End Condition", (winPlayer == 1 ? textSprites[0]:textSprites[1]), false, "Cover HUD Dialog Text");
        SpriteRenderer text1_sr    = text1.GetComponent <SpriteRenderer>();

        text1_sr.color = empty;
        text1_sr.DOColor(full, 0.6f).SetDelay(showP2 ? 0.2f : 0.4f);
        if (showP2)
        {
            GameObject     text2    = GetGameObject(p2Offset, "P2 End Condition", (winPlayer == 2 ? textSprites[0]:textSprites[1]), false, "Cover HUD Dialog Text");
            SpriteRenderer text2_sr = text2.GetComponent <SpriteRenderer>();
            text2_sr.color = empty;
            text2_sr.DOColor(full, 0.6f).SetDelay(0.2f);
            if (tutorialAssist == null)
            {
                PD.sounds.SetVoiceAndPlay(SoundPaths.NarratorPath + (Random.value > 0.5f?"045":"046"), 0);
            }
        }
        else
        {
            if (tutorialAssist == null)
            {
                PD.sounds.SetVoiceAndPlay(SoundPaths.NarratorPath + (winPlayer == 1 ? "037" : "038"), 0);
            }
        }
    }
    public void Handle(WorldContext worldContext)
    {
        for (int i = 0; i < antagonistComponents.Count; i++)
        {
            var antagonistComponent = (AntagonistComponent)antagonistComponents[i];

            if (antagonistComponent.IsMonologuing)
            {
                continue;
            }

            if (antagonistComponent.CurrentStage >= antagonistComponent.Settings.StageSettings.Length)
            {
                worldContext.Get <GameStateComponent>(0).GameState = GameState.VICTORY;

                return;
            }

            var currentStage = antagonistComponent.Settings.StageSettings[antagonistComponent.CurrentStage];

            int scoreCap = currentStage.ScoreCap;

            if (antagonistComponent.Score >= scoreCap)
            {
                gameStateComponent.GameState = GameState.PAUSED;

                var vfxInstance = vfxPoolComponent.VFXPool.Pop("Message (long)", currentStage.TextTypingDuration + 0.41f);

                var typer = vfxInstance.GameObject.GetComponent <Typer>();

                typer.Text = currentStage.TextVariants[UnityEngine.Random.Range(0, currentStage.TextVariants.Length)];

                typer.TextColor = currentStage.TextColor;

                vfxInstance.GameObject.transform.SetParent(canvasComponent.Canvas.transform, true);

                Transform messageTransform = antagonistComponent.MessageTransform;

                vfxInstance.GameObject.transform.position = messageTransform.position;

                vfxInstance.GameObject.GetComponent <AnimatedPopup>().StayDuration = currentStage.TextTypingDuration;

                Sequence sequence = DOTween.Sequence();

                sequence.Append(cameraComponent.Camera.transform.DOShakePosition(
                                    currentStage.TextTypingDuration + 0.41f,
                                    new Vector3(1f, 1f, 0f).normalized *currentStage.CameraShakeStrength, 15));

                sequence.InsertCallback(
                    currentStage.TextTypingDuration + 0.41f,
                    () =>
                {
                    gameStateComponent.GameState = GameState.RUNNING;

                    antagonistComponent.IsMonologuing = false;
                });

                vfxInstance.GameObject.SetActive(true);

                antagonistComponent.CurrentStage++;

                antagonistComponent.IsMonologuing = true;
            }
        }
    }
Exemple #4
0
    public void NotifyBeginGame(CardColumn[] tableu, Stack <Card> stockPileCards)
    {
        this.foundationPilesPositions = new Vector3[4];
        this.cardData_to_cardView     = new Dictionary <string, CardView>();
        if (this.cardsContainer != null)
        {
            GameObject.Destroy(cardsContainer.gameObject);
        }

        int columns_count = tableu.Length;

        //Create cards container empty gameobject - Stored as class variable for easy access in insantiation methods
        this.cardsContainer = new GameObject("Cards Container").transform;

        Vector2  suggestedCardSize = ComputeCardSize_WorldSpace(columns_count, x_padding, y_padding);
        Sequence animSequence      = DOTween.Sequence();

        var y_padding_worldSpace = ScreenSpace_To_WorldSpace(y_padding);
        //Compute TopBarOffset
        Vector3 topBarOffset = ComputeTopBarOffset();

        //Compute tableu positions
        this.tableuPositions = ComputeTableuPositions_Portrait(columns_count, x_padding, y_padding, topBarOffset.y);

        //Init stock pile object
        InstantiateStockPile(stockPileCards, suggestedCardSize, y_padding_worldSpace);

        //Place cards on tableu with animations
        float anim_delay = 0f;

        // Loop tableu columns 1 by 1
        for (int i = 0; i < tableu.Length; i++)
        {
            var tableuColumn_pos = tableuPositions[i];

            //Foundation Pile
            if (i < 4)
            {
                Suit[]     suits            = new Suit[] { Suit.Hearts, Suit.Diamonds, Suit.Clubs, Suit.Spades };
                GameObject foundationPileGO = InstantiateFoundationPile(suggestedCardSize, y_padding_worldSpace, suits[i], tableuColumn_pos);
                foundationPilesPositions[i] = foundationPileGO.transform.position;
            }

            CardView[] cardPile = new CardView[i];
            //FaceDown Card Pile
            List <Card> faceDownCards_data = new List <Card>(tableu[i].faceDownCards.Reverse());
            for (int ii = 0; ii < i; ii++)
            {
                GameObject faceDownCardGO = InstantiateFaceDownCard(suggestedCardSize, cardPile, faceDownCards_data, ii);

                //Prepare Animation
                if (ii > 0)
                {
                    tableuColumn_pos.y = tableuColumn_pos.y - faceDown_padding_y;
                }
                //If a card is above another, the Z has to reflect that, or the colliders will overlap and steal each others' calls
                tableuColumn_pos.z = faceDownCardGO.transform.position.z;

                //Build Animation
                faceDownCardGO.transform.DOMove(tableuColumn_pos, cardToTableu_animDuration).SetDelay(anim_delay);

                anim_delay += 0.15f;
            }
            //FaceUp Cards
            GameObject cardGO   = InstantiateFaceUpCard(tableu, suggestedCardSize, i, cardPile);
            CardView   cardView = cardGO.GetComponent <CardView>();

            //Prepare Animation
            if (i > 0)
            {
                tableuColumn_pos.y = tableuColumn_pos.y - faceDown_padding_y;
            }
            //If a card is above another, the Z has to reflect that, or the colliders will overlap and steal each others' calls
            tableuColumn_pos.z = cardGO.transform.position.z;

            //Build Animation Sequence - Move and Flip. It starts automatically
            Sequence moveAndFlipSequence = DOTween.Sequence();
            moveAndFlipSequence
            .PrependInterval(anim_delay)
            .Append(cardGO.transform.DOMove(tableuColumn_pos, cardToTableu_animDuration))
            .OnComplete(() => { cardView.TurnFaceUp(flipSpeed); });

            anim_delay += 0.15f;
        }
    }
Exemple #5
0
    private void _RoomSceneInit ( )
    {
        if (m_matchUI != null)
            Destroy(m_matchUI);

        if (m_roomUI != null)
            return;

        m_roomUI = Instantiate(Resources.Load("ui/room ui")) as GameObject;

        m_waitingPanel = m_roomUI.transform.GetChild(3).gameObject;
        m_waitingTipsText = m_waitingPanel.GetComponentInChildren<Text>();
        RectTransform menuTF = m_roomUI.transform.GetChild(4) as RectTransform;
        float width = ((RectTransform)menuTF).sizeDelta.x / 5;
        Button[] buttons = menuTF.GetComponentsInChildren<Button>();
        //箭头
        buttons[0].onClick.AddListener(delegate
        {
            RectTransform buttonTf = buttons[0].rectTransform();
            Sequence seq = DOTween.Sequence();
            if (buttonTf.localRotation.eulerAngles.z > 90)
            {
                seq.Append(menuTF.DOAnchorPos(menuTF.anchoredPosition - new Vector2(width * 4, 0), 0.5f))
                   .Join(buttonTf.DORotate(new Vector3(0, 0, 0), 0.2f));
            }
            else
            {
                seq.Append(menuTF.DOAnchorPos(menuTF.anchoredPosition + new Vector2(width * 4, 0), 0.5f))
                   .Join(buttonTf.DORotate(new Vector3(0, 0, 180), 0.2f));
            }
        });
        //角色、背包、设定
        for (int i = 1; i < 4; i++)
        {
            string name = buttons[i].name;
            GameObject canvas;
            CommonCanvasManager.GetInstance().OpenCommonCanvas(name, out canvas, true);
            RectTransform panelTF = canvas.transform.GetChild(0).rectTransform();
            switch (i)
            {
                //背包面板
                case 2:
                    BagManager bm = BagManager.GetInstance();
                    bm.equipmentBag.Init(GameObject.FindGameObjectWithTag("equipment bag").transform.rectTransform(), canvas);
                    bm.potionBag.Init(GameObject.FindGameObjectWithTag("potion bag").transform.rectTransform(), canvas);
                    bm.sundryBag.Init(GameObject.FindGameObjectWithTag("sundry bag").transform.rectTransform(), canvas);
                    break;
                default:
                    break;
            }
            buttons[i].onClick.AddListener(delegate
            {
                Sequence seq = DOTween.Sequence();
                if (!canvas.activeSelf)
                {
                    canvas.SetActive(true);
                    CanvasGroup canvasGroup = panelTF.GetComponent<CanvasGroup>();
                    seq.Append(canvasGroup.DOFade(1, 0.2f))
                       .Join(panelTF.DOScale(1, 0.2f))
                       .AppendCallback(delegate
                       {
                           canvasGroup.interactable = true;
                       });
                }
            });
            canvas.SetActive(false);
        }
        m_waitingPanel.SetActive(false);
    }
Exemple #6
0
    void Start()
    {
        //アニメーター
        m_anime = GetComponent <Animator>();

        // スライムAの座標記録
        m_slimeAPos = transform.position;

        Animation ani = GetComponent <Animation>();

        /*--[アニメーションの制御]--*/

        // 10秒後アニメーション

        // ジャンプ(1秒間)
        Observable.Timer(TimeSpan.FromSeconds(15.5f))
        .Subscribe(_ =>
        {
            Sequence Seq = DOTween.Sequence()

                           // ジャンプ1      終了座標   高さ  回数  時間
                           .Append(transform.DOLocalJump
                                       (new Vector3(14.0f, 0.0f, 0), 2.0f, 1, 0.5f))

                           // ジャンプ2
                           .Append(transform.DOLocalJump
                                       (new Vector3(6.0f, 0.0f, -3.5f), 2.0f, 1, 0.5f))

                           // ジャンプ3
                           .Append(transform.DOLocalJump
                                       (_yangasuPos, 1.0f, 1, 0.4f))

                           // その場ジャンプ          終了座標                    高さ  回数  時間
                           .Append(transform.DOLocalJump
                                       (new Vector3(9.3f, 1.0f, -8.5f), 1.5f, 1, 0.2f))

                           // 攻撃
                           .Append(transform.DOLocalMove
                                       (new Vector3(9.3f, 0.0f, -7), 0.3f))

                           // 元の場所にジャンプ
                           .Append(transform.DOLocalJump
                                       (new Vector3(13.4f, 0, 6.7f), 3.5f, 1, 0.5f))
                           .SetAutoKill(false);
        });

        // アタック(1秒間)
        Observable.Timer(TimeSpan.FromSeconds(21.0f))
        .Subscribe(_ =>
        {
            Sequence Seq = DOTween.Sequence()

                           // ヒーローのところへジャンプ    終了座標                    高さ  回数  時間
                           .Append(transform.DOLocalJump
                                       (new Vector3(-2.0f, 0, -7), 1.5f, 1, 0.7f))

                           // その場ジャンプ
                           .Append(transform.DOLocalJump
                                       (new Vector3(-2.3f, 0, -7.7f), 1.5f, 1, 0.3f))

                           // 元の場所にジャンプ
                           .Append(transform.DOLocalJump
                                       (new Vector3(13.4f, 0, 6.7f), 3.5f, 1, 0.5f))

                           .SetAutoKill(false);
        });



        // ダメージ(1秒間)
        Observable.Timer(TimeSpan.FromSeconds(26.0f))
        .Subscribe(_ =>
        {
            // ジャンプ
            transform.DOLocalJump(_NockBack, 2, 2, 1);

            // 1.5秒かけて後ろへ回転
            transform.DORotate(new Vector3(-270, -180), 0.8f);

            // アニメーションを止める
            m_anime.speed = 0;
        });

        Observable.Timer(TimeSpan.FromSeconds(28.5f))
        .Subscribe(_ =>
        {
            Destroy(gameObject);
        });
    }
    private void Update()
    {
        if (m_PlayerState == State.Intro ||
            m_PlayerState == State.ControllingEnemy)
        {
            return;
        }

        State nextState = State.None;

        Vector2 moveVecThisFrame = Vector2.zero;
        bool    bgInputDown      = m_BackgroundTap.GetHasInput();
        bool    bgInputUp        = m_BackgroundTap.GetHasInputUp();

        if (nextState == State.Flight)
        {
            if (Input.GetKey(KeyCode.UpArrow))
            {
                moveVecThisFrame = new Vector2(0f, 6f * Time.deltaTime);
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                moveVecThisFrame = new Vector2(0f, -6f * Time.deltaTime);
            }
        }

        //Detect to go into jump boost state
        if (bgInputDown &&
            m_PlayerState != State.Damaged &&
            m_PlayerState != State.OnHatch &&
            m_PlayerState != State.AttachedToObject)
        {
            if (m_StartedBoostPath && m_PlayerSpear.CanClamp)
            {
                HandleClampedToObjectByRope();
            }
            else
            {
                float currentTime = Time.realtimeSinceStartup;
                if (!m_PressedForBoost)
                {
                    m_PressedForBoost          = true;
                    m_PressedForBoostStartTime = currentTime;
                }
                if (currentTime - m_PressedForBoostStartTime > .3f)
                {
                    nextState = State.JumpBoost;
                    ResetStateVars(nextState);

                    if (m_PlayerState != nextState)
                    {
                        InitJumpBoostState();
                    }

                    Vector2 playerScreenPos = Camera.main.WorldToScreenPoint(transform.position);
                    Vector2 arrowDirPos     = Input.mousePosition;
                    Vector2 lookAt          = (arrowDirPos - playerScreenPos).normalized;

                    float jumpBoostAngle = Mathf.Atan2(lookAt.y, lookAt.x) * Mathf.Rad2Deg;

                    m_JumpBoostRightArrow.rotation      = Quaternion.Euler(new Vector3(0f, 0f, jumpBoostAngle));
                    m_JumpBoostRightArrow.localPosition = m_JumpBoostRightArrow.transform.right * .3f;

                    float timeToMaxBoost             = 1f;
                    float timeInJumpBoost            = Mathf.Min(Time.realtimeSinceStartup - m_JumpBoostStartTime, timeToMaxBoost);
                    float maxBoostAdditiveArrowScale = 7f;

                    m_JumpBoostRightArrow.localScale = new Vector3(maxBoostAdditiveArrowScale, 4f, 1f);

                    m_DisplayRoot.localScale = new Vector3(Mathf.Abs(m_DisplayRoot.localScale.x) * (lookAt.x < 0f ? -1f : 1f),
                                                           m_DisplayRoot.localScale.y,
                                                           m_DisplayRoot.localScale.z);
                }
            }
        }

        //On mouse up, see if we've been jump boost state, if not, see if there was no other state set, that
        //would mean we can do our go-to.
        if (bgInputUp &&
            m_PlayerState != State.Damaged &&
            m_PlayerState != State.OnHatch &&
            m_PlayerState != State.AttachedToObject)
        {
            m_PressedForBoost = false;

            if (m_PlayerState == State.JumpBoost)
            {
                if (!m_StartedBoostPath)
                {
                    m_StartedBoostPath = true;
                    m_JumpBoostRightArrow.gameObject.SetActive(false);

                    m_PlayerSpear.Clear();
                    m_PlayerSpear.FireIntoDirection(transform.position,
                                                    m_JumpBoostRightArrow.right,
                                                    () =>
                    {
                        ResetStateVars(State.Idle);
                        InitIdleState();
                    });
                }
            }
            else if (nextState == State.None)
            {
                nextState = State.GoTo;
                ResetStateVars(nextState);
                InitGoToState();
            }
        }

        if (m_PlayerState == State.OnHatch || m_PlayerState == State.AttachedToObject)
        {
            if (m_PlayerState != State.AttachedToObject)
            {
                bool hijackBtnPressed = m_HijackButton.IsHeldDown;

                if (hijackBtnPressed)
                {
                    if (!m_IsOpening)
                    {
                        m_IsOpening = true;
                        m_Animations.Play("HijackOpen");
                        OnStartedOpeningInHijack?.Invoke();
                    }
                }
                else if (m_IsOpening)
                {
                    m_IsOpening = false;
                    m_Animations.Play("Idle");
                    OnStoppedOpeningInHijack?.Invoke();
                }
            }

            if (m_PlayerSpear.CurrentState == PlayerSpear.State.ClosedToClamp)
            {
                if (!m_IsSwingingOnClamp)
                {
                    //Spear being in this state means we can swipe on the screen to clamp swing

                    if (bgInputDown && !m_InputDownForClampSwing)
                    {
                        m_InputDownForClampSwing  = true;
                        m_ClampSwingScreenDownPos = Input.mousePosition;
                        m_ClampSwingDownStartTime = Time.realtimeSinceStartup;
                    }
                    else if (bgInputUp && m_InputDownForClampSwing)
                    {
                        m_InputDownForClampSwing = false;

                        float clampSwipeTime = Time.realtimeSinceStartup - m_ClampSwingDownStartTime;
                        if (clampSwipeTime <= kMaxClampSwingTimeWindow)
                        {
                            //Reset spear to its idle state before doing any swing out behavior
                            m_PlayerSpear.ResetToIdle();
                            m_PlayerSpear.SetClosedToClampState();

                            //We'll say that this was quick enough to be considered a swipe

                            Vector3 worldSwipeStartPos = Camera.main.ScreenToWorldPoint(m_ClampSwingScreenDownPos);
                            Vector3 worldSwipeEndPos   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                            //Get swipe direction and distance
                            Vector2 swipeDir  = (worldSwipeEndPos - worldSwipeStartPos).normalized;
                            float   swipeDist = swipeDir.magnitude;

                            m_DisplayRoot.localScale = new Vector3(Mathf.Abs(m_DisplayRoot.localScale.x) * (swipeDir.x > 0 ? -1 : 1),
                                                                   m_DisplayRoot.localScale.y,
                                                                   m_DisplayRoot.localScale.z);

                            m_ClampSwingDir          = swipeDir;
                            m_ClampSwingVelocity     = swipeDir * 30f;
                            m_ClampSwingAcceleration = m_ClampSwingVelocity * 4f;

                            //We now use these data points to get the player spear to do its clamp swing behavior
                            m_IsSwingingOnClamp            = true;
                            m_RopeSwingOutEndWorldLocalPos = transform.localPosition;
                            m_RopeSwingOutParent           = transform.parent;
                            Vector3 swingInDestPos = transform.localPosition;

                            m_SwingOutDoneCallback = () =>
                            {
                                Vector3 localMoveDest = swingInDestPos;
                                m_TopOfSwingDelay = DOTween.Sequence();
                                m_TopOfSwingDelay.AppendInterval(.3f);
                                m_TopOfSwingDelay.Append(DOTween.To(GetCurrentPosFromRopeSwingIn, HandleClampedRopeSwingInVelocity, localMoveDest, 1f));
                                m_TopOfSwingDelay.AppendCallback(() =>
                                {
                                    m_TopOfSwingDelay   = null;
                                    m_IsSwingingOnClamp = false;
                                });
                            };
                        }
                    }
                }
                else if (bgInputUp && m_TopOfSwingDelay != null)
                {
                    TugOffRopeClamp();
                }
            }
        }

        //Detect to go into idle state
        if (nextState == State.None &&
            m_PlayerState != State.GoTo &&
            m_PlayerState != State.JumpBoost &&
            m_PlayerState != State.Damaged &&
            m_PlayerState != State.OnHatch &&
            m_PlayerState != State.AttachedToObject)
        {
            nextState = State.Idle;
            ResetStateVars(nextState);

            if (m_PlayerState != nextState)
            {
                InitIdleState();
            }
        }

        //if(m_StartedBoostPath && m_PlayerState == State.JumpBoost)
        //HandleBoostVelocity(ref moveVecThisFrame);

        if (m_PlayerState == State.Damaged)
        {
            HandleDamagedVelocity(ref moveVecThisFrame);
        }

        //if(m_PlayerState != State.OnHatch && m_PlayerState != State.AttachedToObject)
        HandleMoveStep(moveVecThisFrame);

        if ((m_PlayerState == State.OnHatch || m_PlayerState == State.AttachedToObject) && m_IsSwingingOnClamp)
        {
            HandleClampedRopeSwingOutVelocity();
        }

        //Check to see if player is close to any enemies that are controlled. If yes,
        //we show the enter/leave button
        if (m_PlayerState != State.ControllingEnemy &&
            m_PlayerState != State.OnHatch)
        {
            bool inRangeOfAny = false;
            if (m_CurrentControlledEnemy == null)
            {
                foreach (Enemy e in m_OwnedEnemies)
                {
                    float dist = (transform.position - e.transform.position).magnitude;
                    inRangeOfAny = (dist <= 5f);
                    if (inRangeOfAny)
                    {
                        break;
                    }
                }
            }
            m_EnterOrLeaveShipBtn.gameObject.SetActive(inRangeOfAny);
        }
        else if (m_PlayerState == State.ControllingEnemy &&
                 !m_EnterOrLeaveShipBtn.gameObject.activeSelf)
        {
            m_EnterOrLeaveShipBtn.gameObject.SetActive(true);
        }

        float bgWorldStep = m_BackgroundScroller.GetMoveStep() * .05f;

        //m_DistTraveledFromStart += new Vector2(bgWorldStep, 0f);
        m_WorldRoot.transform.position += new Vector3(-bgWorldStep, 0f, 0f);
    }
Exemple #8
0
    void ChangeRail(int direction)
    {
        float maxUp       = 3f;
        float maxDist     = 6f;
        var   saveSpeed   = rb.velocity;
        var   saveAngular = rb.angularVelocity;
        int   dist        = 2;

        float forwardLook = rb.velocity.x * 1f;

        Ray        ray = new Ray(transform.position + Vector3.forward * dist * direction + Vector3.up * maxUp + Vector3.right * (forwardLook), Vector3.down);
        RaycastHit hit;
        bool       success = Physics.Raycast(ray, out hit, maxDist);

        Vector3 landingSpot = Vector3.zero;

        if (success)
        {
            landingSpot = hit.point;
        }
        else
        {
            dist    = 4;
            ray     = new Ray(transform.position + Vector3.forward * dist * direction + Vector3.up * maxUp + Vector3.right * (forwardLook), Vector3.down);
            success = Physics.Raycast(ray, out hit, maxDist);
            if (success)
            {
                landingSpot = hit.point;
            }
            else
            {
                dist    = 6;
                ray     = new Ray(transform.position + Vector3.forward * dist * direction + Vector3.up * maxUp + Vector3.right * (forwardLook), Vector3.down);
                success = Physics.Raycast(ray, out hit, maxDist);
                if (success)
                {
                    landingSpot = hit.point;
                }
            }
        }

        if (!success)
        {
            landingSpot = transform.position + Vector3.forward * 2 * direction;
            dist        = 2;
        }

        Debug.DrawLine(transform.position, landingSpot, success ? Color.green : Color.red, 100);

        readyToRailChange = false;
        grounded          = false;
        rb.isKinematic    = true;
        railStatus        = RailStatus.Jumping;
        aus.clip          = Jump;
        aus.Play();

        float animationSpeedFactor = 0.2f;
        float elevation            = 1.5f;
        float apexHeight           = Mathf.Max(landingSpot.y + elevation, transform.position.y + elevation);
        float jumpHeight           = apexHeight - transform.position.y;
        float jumpUpTime           = jumpHeight * animationSpeedFactor;
        float jumpDownTime         = (apexHeight - landingSpot.y) * animationSpeedFactor;
        float jumpTime             = jumpUpTime + jumpDownTime;

        var sequence = DOTween.Sequence();

        sequence.Append(transform.DOMoveY(apexHeight, jumpUpTime).SetEase(Ease.OutQuad));
        sequence.Append(transform.DOMoveY(landingSpot.y + 0.5f, jumpDownTime).SetEase(Ease.InQuad));
        sequence.AppendCallback(() => rail -= direction * (dist / 2));
        sequence.AppendCallback(() => { rb.isKinematic = false; railStatus = RailStatus.OnTrack; });
        sequence.AppendCallback(() => { rb.velocity = Vector3.right * saveSpeed.x + Vector3.down * fallSpeed; rb.angularVelocity = saveAngular; });
        sequence.Insert(0, transform.DOMoveZ(dist * direction, jumpTime).SetEase(Ease.OutQuad).SetRelative(true));
        sequence.Insert(0, transform.DORotate(Vector3.right * 180f * direction, jumpTime, RotateMode.WorldAxisAdd).SetEase(Ease.OutBack).SetRelative(true));
        sequence.Insert(0, transform.DOMoveX(landingSpot.x, jumpTime).SetEase(Ease.Linear));
    }
 public void Screenshake(float duration, float amp, int strength)
 {
     shake?.Kill();
     shake = DOTween.Sequence();
     shake.Append(cam.DOShakePosition(duration, amp, strength, 90, true));
 }
Exemple #10
0
    private void FinishTurn(uint mergesInTurn = 0)
    {
        OnMergeCombo(mergesInTurn);

        //Check gravity
        List <Bubble> hangingBubbles = new List <Bubble>();

        for (int x = 0; x < gridConfig.gridWidth; x++)
        {
            Bubble topBubble = grid[x, gridConfig.gridHeight - 1];
            if (topBubble != null)
            {
                hangingBubbles.Add(topBubble);
                CheckGravityForBubble(topBubble, hangingBubbles);
            }
        }

        for (int x = 0; x < gridConfig.gridWidth; x++)
        {
            for (int y = 0; y < gridConfig.gridHeight; y++)
            {
                Bubble b = grid[x, y];
                if (b != null)
                {
                    if (hangingBubbles.Contains(b) == false)
                    {
                        DestroyBubble(b, Bubble.BubbleDeathType.DROP);
                    }
                }
            }
        }

        //Shift up, if whole height of the grid is used
        if (GetBottomFreeLines() == 0)
        {
            Sequence bubbleShiftUpSequence = DOTween.Sequence();
            for (int x = 0; x < gridConfig.gridWidth; x++)
            {
                for (int y = gridConfig.gridHeight - 1; y >= 0; y--)
                {
                    Bubble bubble = grid[x, y];
                    if (bubble != null)
                    {
                        bool topHiddenRows = gridConfig.gridHeight - 2 <= y;
                        if (topHiddenRows)
                        {
                            DestroyBubble(bubble, Bubble.BubbleDeathType.SILENT);
                        }
                        else
                        {
                            SetBubbleGridIndeces(bubble, x, y + 2);
                            Vector3 newBubblePosition = IndecesToPosition(x, y + 2);
                            bubble.transform.DOKill();
                            Tween shiftUpTween = bubble.transform.DOMove(newBubblePosition, animationCfg.bubbleShiftDuration).SetEase(animationCfg.bubbleShiftEase);
                            bubbleShiftUpSequence.Insert(0, shiftUpTween);
                        }
                    }
                }
            }
        }

        FillTopGridSpace();

        //Try shift down
        int bottomFreeLinesCount = GetBottomFreeLines();

        if (bottomFreeLinesCount >= gridConfig.maxLinesFittingIntoScreen)
        {
            OnGridCleared();
        }

        if (bottomFreeLinesCount >= gridConfig.freeLinesRequiredForShiftDown)
        {
            Sequence shiftDownSequence = DOTween.Sequence();
            int      shiftOffsetY      = 2 * ((bottomFreeLinesCount - 1) / 2);
            IterateOverGrid((x, y, bubble) =>
            {
                if (bubble != null)
                {
                    bubble.transform.DOKill();
                    SetBubbleGridIndeces(bubble, x, y - shiftOffsetY);
                    Vector3 newBubblePosition = IndecesToPosition(x, y - shiftOffsetY);
                    Tween shiftDownTween      = bubble.transform.DOMove(newBubblePosition, animationCfg.bubbleShiftDuration).SetEase(animationCfg.bubbleShiftEase);
                    shiftDownSequence.Insert(0, shiftDownTween);
                }
            });
        }

        //Add top bubbles, if needed
        FillTopGridSpace();
    }
Exemple #11
0
    public IPromise AttachBubble(Bubble newBubble, int x, int y, bool shotFromGun, uint mergesInTurn = 0)
    {
        Deferred attachDeferred = Deferred.GetFromPool();

        SetBubbleGridIndeces(newBubble, x, y);
        newBubble.transform.position = IndecesToPosition(x, y);

        bubblesActionSet.Clear();

        CheckMatches(newBubble);

        if (bubblesActionSet.Count > 1)
        {
            List <Bubble> bubblesMatched  = new List <Bubble>(bubblesActionSet);
            int           afterMergePower = bubblesMatched[0].Power + bubblesMatched.Count - 1;
            bubblesMatched = bubblesMatched
                             .OrderByDescending((b) => DoesBubbleHaveNeighbourWithPower(b, afterMergePower))
                             .ThenByDescending(b => b.transform.position.y)
                             .ToList();


            Bubble targetMergeBubble = bubblesMatched[0];

            Sequence mergeSequence = DOTween.Sequence();
            //Merge bubbles & destroy all except first
            for (int bIndex = bubblesMatched.Count - 1; bIndex >= 1; bIndex--)
            {
                Bubble mergingBubble   = bubblesMatched[bIndex];
                float  mergeDuration   = animationCfg.bubbleMergeDuration + animationCfg.bubbleMergeDelay * bIndex;
                Tween  mergeScaleTween = mergingBubble.transform.DOScale(animationCfg.bubbleMergeTargetScale, mergeDuration)
                                         .SetEase(animationCfg.bubbleMergeEase);
                Tween mergeMoveTween = mergingBubble.transform.DOMove(targetMergeBubble.transform.position, mergeDuration)
                                       .SetEase(animationCfg.bubbleMergeEase);
                mergeMoveTween.OnComplete(() => DestroyBubble(mergingBubble, Bubble.BubbleDeathType.EXPLOSION));
                mergeSequence.Insert(0, mergeMoveTween);
                mergeSequence.Insert(0, mergeScaleTween);
            }
            mergeSequence.OnComplete(() =>
            {
                OnBubblesMerged(afterMergePower);
                targetMergeBubble.Upgrade(afterMergePower);

                if (targetMergeBubble.Power >= bubblesConfig.explosionThresholdPower)
                {
                    Explode(targetMergeBubble);
                    FinishTurn(mergesInTurn + 1);
                    attachDeferred.Resolve();
                }
                else
                {
                    AttachBubble(targetMergeBubble, targetMergeBubble.X, targetMergeBubble.Y, false, mergesInTurn + 1)
                    .Done(() => attachDeferred.Resolve());
                }
            });
        }
        else
        {
            if (shotFromGun)
            {
                foreach (var neighbour in NeighbourBubbles(newBubble))
                {
                    neighbour.OnGunBubbleAttached(newBubble.X, newBubble.Y);
                }

                OnNothingMergedTurn();
            }
            FinishTurn(mergesInTurn);
            attachDeferred.Resolve();
        }

        return(attachDeferred);
    }
Exemple #12
0
 public void StartCountdown()
 {
     DOTween.Sequence().Append(countdownText.DOText("3", 1)).Append(countdownText.DOText("2", 1))
     .Append(countdownText.DOText("1", 1)).OnComplete(OnCountDownFinish);
 }
 public void initPanelChangeSequence()
 {
     panelChangeSequence = DOTween.Sequence();
     panelChangeSequence.Append(gameObject.GetComponent <RectTransform>().DOLocalMove(enterPosition, 0.3f));
     panelChangeSequence.Append(gameObject.GetComponent <RectTransform>().DOLocalMove(mainPosition, 0.3f));
 }
    // 押下時に形状を変化
    public void TouchDown()
    {
        movieSeq.Kill(true);

        // Common設定
        if (pushDuration)
        {
            fPushDuration = mPushDuration = rPushDuration = sPushDuration = commonPushDuration;
        }
        if (pushEasing)
        {
            fPushEasing = mPushEasing = rPushEasing = sPushEasing = commonPushEasing;
        }

        // フェード画像を作成
        if (fade && fadeObj == null)
        {
            fadeObj = new GameObject("FadeObj");
            fadeObj.AddComponent <Image> ();
            fadeObj.AddComponent <CanvasGroup> ();
            fadeObj.transform.SetParent(fTarget.transform);
            fadeObj.transform.localPosition = Vector3.zero;
            if (fadeFront)
            {
                fadeObj.transform.SetAsLastSibling();
            }
            else
            {
                fadeObj.transform.SetAsFirstSibling();
            }

            // スプライトを使うかカラーを使うかで設定を分ける
            if (fadeSprite == null)
            {
                fadeObj.GetComponent <RectTransform> ().sizeDelta =
                    fTarget.GetComponent <RectTransform> ().sizeDelta;
                fadeObj.GetComponent <Image> ().color = fadeColor;
            }
            else
            {
                fadeObj.GetComponent <RectTransform> ().sizeDelta =
                    new Vector2(fadeSprite.bounds.size.x, fadeSprite.bounds.size.y);
                fadeObj.GetComponent <Image> ().sprite = fadeSprite;
            }
        }

        // フェード画像は透明度を0にしておく
        if (fade)
        {
            fadeObj.GetComponent <CanvasGroup> ().alpha = 0;
        }
        if (fade)
        {
            fadeObj.SetActive(true);
        }

        // ツイーンを再生
        touching = true;

        movieSeq = DOTween.Sequence();

        if (fade)
        {
            movieSeq.Join(DOTween.Sequence()
                          .Join(fadeObj.GetComponent <CanvasGroup> ()
                                .DOFade(fadeAlpha, fPushDuration).SetEase(fPushEasing)));
        }
        if (move)
        {
            movieSeq.Join(DOTween.Sequence()
                          .Join(mTarget.transform
                                .DOLocalMove(pushPosition, mPushDuration).SetEase(mPushEasing)));
        }
        if (rotate)
        {
            movieSeq.Join(DOTween.Sequence()
                          .Join(rTarget.transform
                                .DORotate(pushRotation, rPushDuration).SetEase(rPushEasing)));
        }
        if (scale)
        {
            movieSeq.Join(DOTween.Sequence()
                          .Join(sTarget.transform
                                .DOScale(pushScale, sPushDuration).SetEase(sPushEasing)));
        }

        movieSeq.Play();
    }
Exemple #15
0
    public void CloseTheDoor()
    {
        Sequence mySequence = DOTween.Sequence();

        mySequence.Append(transform.DORotate(initRotation, 1));
    }
    public void StartTalkingSaturn()
    {
        //1 moon, 2 Saturn, 3 pluto
        foreach (Animator alienAnimator in _saturnAlienAnimator)
        {
            alienAnimator.SetTrigger("Talk");
        }
        _light.SetActive(true);

        switch (whichplant)
        {
        case 1:
            string[] Saturntext  = LanguageController.Instance.GetSaturnText();
            Sequence mySequence1 = DOTween.Sequence();
            mySequence1.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(Saturntext[0], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(Saturntext[1], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .Append(_saturnChatImage[0].DOFade(1f, 0.5f))
            .Append(_talksound.DOFade(1f, 0.1f))
            .Append(_saturnChatText[0].DOText(Saturntext[2], 3f, true, ScrambleMode.Numerals))
            .Append(_talksound.DOFade(0f, 0.1f))
            .Append(_saturnChatText[0].DOText("", 0.1f))
            .Append(_saturnChatImage[0].DOFade(0f, 0.5f))
            .Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(Saturntext[3], 3f))
            .Append(_shipChatImage.DOFade(2f, 0.5f))
            .Append(_saturnChatImage[1].DOFade(1f, 0.5f))
            .Append(_talksound.DOFade(1f, 0.1f))
            .Append(_saturnChatText[1].DOText(Saturntext[4], 3f, true, ScrambleMode.Numerals))
            .Append(_talksound.DOFade(0f, 0.1f))
            .Append(_saturnChatText[1].DOText("", 0.1f))
            .Append(_saturnChatImage[1].DOFade(0f, 0.5f))
            .AppendCallback(loadToGameScene);
            //.AppendCallback(SaturnEnd);
            mySequence1.Play();
            break;

        case 2:
            //introduce[1].SetActive(true);
            string[] moontext    = LanguageController.Instance.GetMoonText();
            Sequence mySequence2 = DOTween.Sequence();
            mySequence2.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(moontext[0], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(moontext[1], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(moontext[2], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))

            .Append(_moonChatImage[0].DOFade(1f, 0.5f))
            .Append(_talksound2.DOFade(1f, 0.1f))
            .Append(_moonChatText[0].DOText(moontext[3], 3f, true, ScrambleMode.Numerals))
            .Append(_moonChatText[0].DOText("", 0.1f))
            .Append(_moonChatImage[0].DOFade(0f, 0.5f))
            .Append(_talksound2.DOFade(0f, 0.1f))

            .Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(moontext[4], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))

            .Append(_talksound2.DOFade(1f, 0.1f))
            .Append(_moonChatImage[1].DOFade(1f, 0.5f))
            .Append(_moonChatText[1].DOText(moontext[5], 3f, true, ScrambleMode.Numerals))
            .Append(_moonChatText[1].DOText("", 0.1f))
            .Append(_moonChatImage[1].DOFade(0f, 0.5f))
            .Append(_moonChatImage[0].DOFade(1f, 0.5f))
            .Append(_moonChatText[0].DOText(moontext[6], 3f, true, ScrambleMode.Numerals))
            .Append(_moonChatText[0].DOText("", 0.1f))
            .Append(_moonChatImage[0].DOFade(0f, 0.5f))

            .Append(_talksound2.DOFade(0f, 0.1f))

            .Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(moontext[7], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .AppendCallback(loadToGameScene);
            //.AppendCallback(SaturnEnd);
            mySequence2.Play();
            break;

        case 3:
            string[] plutotext = LanguageController.Instance.GetPlutoText();

            //introduce[2].SetActive(true);
            Sequence mySequence3 = DOTween.Sequence();
            mySequence3.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(plutotext[0], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(plutotext[1], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .Append(_plutoChatImage[0].DOFade(1f, 0.5f))
            .Append(_talksound3.DOFade(1f, 0.1f))
            .Append(_plutoChatText[0].DOText(plutotext[2], 3f, true, ScrambleMode.Numerals))
            .Append(_talksound3.DOFade(0f, 0.1f))
            .Append(_plutoChatText[0].DOText("", 0.1f))
            .Append(_plutoChatImage[0].DOFade(0f, 0.5f))
            .Append(_plutoChatImage[1].DOFade(1f, 0.5f))
            .Append(_talksound3.DOFade(1f, 0.1f))
            .Append(_plutoChatText[1].DOText(plutotext[3], 3f, true, ScrambleMode.Numerals))
            .Append(_talksound3.DOFade(0f, 0.1f))
            .Append(_plutoChatText[1].DOText("", 0.1f))
            .Append(_plutoChatImage[1].DOFade(0f, 0.5f))
            .Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(plutotext[4], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .Append(_plutoChatImage[2].DOFade(1f, 0.5f))
            .Append(_talksound3.DOFade(1f, 0.1f))
            .Append(_plutoChatText[2].DOText(plutotext[5], 3f, true, ScrambleMode.Numerals))
            .Append(_plutoChatText[2].DOText("", 0.1f))
            .Append(_plutoChatImage[2].DOFade(0f, 0.5f))
            .Append(_plutoChatImage[3].DOFade(1f, 0.5f))
            .Append(_plutoChatText[3].DOText(plutotext[6], 3f, true, ScrambleMode.Numerals))
            .Append(_plutoChatText[3].DOText("", 0.1f))
            .Append(_plutoChatImage[3].DOFade(0f, 0.5f))
            .Append(_talksound3.DOFade(0f, 0.1f))
            .AppendCallback(loadToGameScene);
            //.AppendCallback(SaturnEnd);
            mySequence3.Play();
            break;
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (canPlay)
        {
            GameTimer -= Time.deltaTime;
            if (GameTimer <= fastMusicGameTime && !fastMusicStarted)
            {
                playMusic(true);
            }
            else if (GameTimer < 0)
            {
                WinCondition.CheckCondition();
                if (WinCondition.winner != null)
                {
                    TimerText.gameObject.SetActive(false);

                    MessageText.text  = "Winner: " + WinCondition.winner.PlayerName;
                    MessageText.color = WinCondition.winner.playerColor;
                    MessageText.gameObject.SetActive(true);


                    if (!winMessageShown)
                    {
                        winMessageShown = true;
                        int playerIndex = int.Parse(WinCondition.winner.PlayerName.Replace("Player", ""));
                        playerCounterManager.setWinner(playerIndex);
                    }
                }
                else
                {
                    WinCondition.CheckCondition();

                    TimerText.gameObject.SetActive(false);


                    MessageText.text  = "Sudden Death!!!";
                    MessageText.color = Color.red;

                    MessageText.gameObject.SetActive(true);

                    if (!suddenDeathSoundPlayed)
                    {
                        audioPool.PlayAudio(suddenDeathSound);
                        suddenDeathSoundPlayed = true;
                    }
                }
            }
            else
            {
                int minutes = Mathf.FloorToInt(GameTimer / 60f);
                int seconds = Mathf.FloorToInt(GameTimer % 60f);

                if (GameTimer > 10)
                {
                    TimerText.text = minutes.ToString("00") + ":" + seconds.ToString("00");
                }
                else
                {
                    if (!hurryUp)
                    {
                        DOTween.Sequence().Append(
                            TimerText.transform.DOScale(1.2f, 0.5f)
                            ).Append(
                            TimerText.transform.DOScale(1f, 0.5f)
                            ).SetLoops(10);
                        hurryUp = true;
                    }
                    TimerText.text  = seconds.ToString("00");
                    TimerText.color = new Color(1f, 0.26f, 0.27f);
                }
            }

            if (WinCondition.winner == null)
            {
                foreach (var playerPrefix in playersPrefix)
                {
                    if (!players[playerPrefix].wasStunned)
                    {
                        if (players[playerPrefix].isNPC == true)
                        {
                            HandleButtons(playerPrefix, players[playerPrefix]);
                        }

                        else
                        {
                            HandleControls(playerPrefix, players[playerPrefix]);
                        }
                    }
                }
            }
            else
            {
                reloadTimer -= Time.deltaTime;

                if (reloadTimer < 0)
                {
                    if (!ReloadText.gameObject.activeSelf)
                    {
                        ReloadText.gameObject.SetActive(true);
                    }
                    canReload = true;
                }

                if (Input.anyKeyDown && canReload)
                {
                    if (Input.GetKeyDown(KeyCode.Escape))
                    {
                        SceneManager.LoadScene("TitleScreen");
                    }
                    else
                    {
                        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
                    }
                }
            }
        }
    }
    public void SaturnEnd()
    {
        //foreach (GameObject alien in _saturnAlien) {
        //	alien.SetActive (false);
        //}
        _light.SetActive(false);
        switch (whichplant)
        {
        case 1:
            string[] Saturntext  = LanguageController.Instance.GetSaturnText();
            Sequence mySequence1 = DOTween.Sequence();
            mySequence1.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(Saturntext[5], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))


            .Append(_saturnChatImage[0].DOFade(1f, 0.5f))
            .Append(_talksound.DOFade(1f, 0.1f))
            .Append(_saturnChatText[0].DOText(Saturntext[6], 3f, true, ScrambleMode.Numerals))
            .Append(_talksound.DOFade(0f, 0.1f))
            .Append(_saturnChatText[0].DOText("", 0.1f))
            .Append(_saturnChatImage[0].DOFade(0f, 0.5f))

            .Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(Saturntext[7], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .AppendCallback(ToBlackHole);
            ;
            mySequence1.Play();
            break;

        case 2:
            string[] moontext    = LanguageController.Instance.GetMoonText();
            Sequence mySequence2 = DOTween.Sequence();
            mySequence2.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(moontext[7], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .AppendCallback(ToBlackHole);
            ;
            mySequence2.Play();
            break;

        case 3:
            string[] plutotext   = LanguageController.Instance.GetPlutoText();
            Sequence mySequence3 = DOTween.Sequence();
            mySequence3.Append(_shipChatImage.DOFade(1f, 0.5f))
            .Append(_shipChatText.DOText(plutotext[7], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatText.DOText(plutotext[8], 3f))
            .Append(_shipChatText.DOText("", 0.1f))
            .Append(_shipChatImage.DOFade(0f, 0.5f))
            .AppendCallback(ToBlackHole);
            ;
            mySequence3.Play();
            break;
        }
    }
Exemple #19
0
        /// <summary>
        /// 交换两个相邻的宝石
        /// </summary>
        /// <param name="gem1">交换的宝石1</param>
        /// <param name="gem2">交换的宝石2</param>
        /// <returns>交换成功返回1,不能交换返回0,距离太远返回-1,参数为空返回-2</returns>
        public int SwapGems(GameObject gem1, GameObject gem2)
        {
            // 连消次数归零
            multiBoomCount = 0;
            int returnInt = 1;  // 默认交换成功

            // 宝石不能为null
            if (gem1 != null && gem2 != null)
            {
                // 计算宝石间的距离
                var gs1  = gem1.GetComponent <GemScript>();
                var gs2  = gem2.GetComponent <GemScript>();
                var disX = Mathf.Abs(gs1.Row - gs2.Row);
                var disY = Mathf.Abs(gs1.Column - gs2.Column);
                // disx + disy = 1则可以认为这两个宝石的相对位置在上下左右其中一个
                if ((disX + disY) == 1)
                {
                    Swap(gs1, gs2);

                    var gem1Seq = DOTween.Sequence();
                    var gem2Seq = DOTween.Sequence();

                    // gem1 gem2 相互交换
                    swapping = true;

                    var gem1Tween = gem1.transform.DOMove(new Vector2(gs1.Column, gs1.Row), 0.5f, false);
                    gem1Tween.SetEase(Ease.InOutQuart);
                    gem1Seq.Append(gem1Tween);

                    var gem2Tween = gem2.transform.DOMove(new Vector2(gs2.Column, gs2.Row), 0.5f, false);
                    gem2Tween.SetEase(Ease.InOutQuart);
                    gem2Seq.Append(gem2Tween);

                    // 交换完成后需要检测交换的两个宝石是否满足消除条件
                    checkList.Add(gem1);
                    checkList.Add(gem2);

                    // 强制进行检测是否可以消除
                    // 如果不能交换则又重新换回来
                    if (!CheckBoomGems())
                    {
                        checkList.Clear();
                        Swap(gs1, gs2);
                        // gem1 gem2 相互交换
                        var tween1 = gem1.transform.DOMove(new Vector2(gs1.Column, gs1.Row), 0.5f, false);
                        tween1.SetEase(Ease.InOutQuart);
                        gem1Seq.Append(tween1);
                        var tween2 = gem2.transform.DOMove(new Vector2(gs2.Column, gs2.Row), 0.5f, false);
                        tween2.SetEase(Ease.InOutQuart);
                        gem2Seq.Append(tween2);
                        returnInt = 0;  // 交换失败
                    }
                    gem2Seq.OnComplete(() => swapping = false);
                    gem1Seq.Play();
                    gem2Seq.Play();
                }
                else
                {
                    returnInt = -1; // 距离太长
                }
            }
            else
            {
                returnInt = -2; // 参数为空
            }

            return(returnInt);
        }
 public override void OnStartManager()
 {
     _camera = Camera.main;
     _initialCameraPosition = _camera.transform.position;
     _sequence = DOTween.Sequence();
 }
 private void Awake()
 {
     sequence = DOTween.Sequence();
     BuildSequence();
 }
Exemple #22
0
        public HitType Swing(Vector2 direction, bool hit)
        {
            var state = State;

            if (state == SaberState.Swinging)
            {
                _streak = 0;
                return(HitType.Miss);
            }

            _sequence = DOTween.Sequence();

            direction = direction.normalized;
            bool swingingLeft;

            if (_streak >= StreakRequirement && direction.y < -0.5f)
            {
                _streak = 0;
                foreach (var pathNode in _verticalPath)
                {
                    _sequence.Append(transform.DOLocalMove(pathNode.localPosition, 0.1f)
                                     .SetEase(Ease.Linear));
                    _sequence.Join(transform.DOLocalRotateQuaternion(pathNode.localRotation, 0.1f)
                                   .SetEase(Ease.Linear));
                }

                var lastTarget = state == SaberState.Left ? _horizontalPath.Last() : _horizontalPath.First();
                _sequence.Append(transform.DOLocalMove(lastTarget.localPosition, 0.1f).SetEase(Ease.Linear));
                _sequence.Join(transform.DOLocalRotateQuaternion(lastTarget.localRotation, 0.1f).SetEase(Ease.Linear));
                _sequence.SetEase(Ease.Linear);
                _sequence.Play();
                return(HitType.Super);
            }

            if (direction.x > 0.5f && state == SaberState.Left)
            {
                swingingLeft = false;
            }
            else if (direction.x < -0.5f && state == SaberState.Right)
            {
                swingingLeft = true;
            }
            else
            {
                return(HitType.Miss);
            }

            for (var i = swingingLeft ? _horizontalPath.Length - 2 : 1;
                 i < _horizontalPath.Length && i >= 0;
                 i += swingingLeft ? -1 : 1)
            {
                _sequence.Append(transform.DOLocalMove(_horizontalPath[i].localPosition, 0.1f).SetEase(Ease.Linear));
                _sequence.Join(
                    transform.DOLocalRotateQuaternion(_horizontalPath[i].rotation, 0.1f).SetEase(Ease.Linear));
            }

            _sequence.SetEase(Ease.Linear);
            _sequence.Play();
            _streak = (_streak + 1) % (StreakRequirement + 1);
            return(HitType.Regular);
        }
Exemple #23
0
    public void MoveCard(Move move)
    {
        Sequence undoSequence = DOTween.Sequence();

        Card selectedCard = move.movedCards.First();
        int  targetColumn = move.to.index;

        CardView selectedCardView = this.cardData_to_cardView[selectedCard.ToString()];
        Vector3  selectedCardPos  = selectedCardView.positionBeforeDrag;

        Vector3 targetPos;

        CardView destinationCardView = null;

        if (move.from.zone == Zone.Tableu)
        {
            //Flip Card
            Card cardToFlip = move.GetCardToFlip();
            if (cardToFlip != null)
            {
                CardView cardViewToFlip = this.cardData_to_cardView[cardToFlip.ToString()];
                cardViewToFlip.TurnFaceUp(flipSpeed);

                undoSequence.AppendCallback(() => cardViewToFlip.TurnFaceDown(flipSpeed));
            }
        }

        if (move.from.zone == Zone.Waste)
        {
            //Update Waste Pile (Remove/Add card)

            //Move top two cards left, so we can show a third again.
            if (move.gameSnapshot.wastePile.Count > 3)
            {
                Card     topCard_wastePile     = move.gameSnapshot.wastePile.Peek();
                CardView topCardView_wastePile = this.cardData_to_cardView[topCard_wastePile.ToString()];

                CardView[] cardsToScoopRight = new CardView[2];
                cardsToScoopRight[0] = topCardView_wastePile.CardBelow;
                cardsToScoopRight[1] = topCardView_wastePile.CardBelow.CardBelow;
                foreach (CardView card in cardsToScoopRight)
                {
                    Vector3 cardPosition = card.transform.position;
                    card.transform.DOMove(cardPosition + new Vector3(stockPile_padding_x, 0, 0), flipSpeed);

                    undoSequence.Join(card.transform.DOMove(cardPosition, flipSpeed));
                }
            }
        }

        if (move.to.zone == Zone.Tableu)
        {
            //Move selected cards to new column
            bool isTargetColumnEmpty = move.gameSnapshot.tableu[targetColumn].faceUpCards.IsNullOrEmpty();
            if (isTargetColumnEmpty == false)
            {
                CardColumn targetCardColumn = move.gameSnapshot.tableu[targetColumn];
                Card       destinationCard  = targetCardColumn.faceUpCards.Last();
                destinationCardView = this.cardData_to_cardView[destinationCard.ToString()];

                int currZDepth = Mathf.RoundToInt(selectedCardView.transform.position.z * -1);

                targetPos = destinationCardView.transform.position - new Vector3(0, faceUp_padding_y, 0);


                selectedCardView.SetSortingOrderAndZDepth(targetCardColumn.TotalCardsCount());
                targetPos.z = selectedCardView.transform.position.z; //Update Z depth

                undoSequence.AppendCallback(() => selectedCardView.SetSortingOrderAndZDepth(currZDepth));
            }
            else
            {
                targetPos = this.tableuPositions[targetColumn];

                int currZDepth = Mathf.RoundToInt(selectedCardView.transform.position.z * -1);

                selectedCardView.SetSortingOrderAndZDepth(0);

                undoSequence.AppendCallback(() => selectedCardView.SetSortingOrderAndZDepth(currZDepth));
            }
        }
        else if (move.to.zone == Zone.Foundation)
        {
            //Move selected card to foundation
            targetPos = this.foundationPilesPositions[targetColumn];
            int cardsBelowSelection = move.gameSnapshot.foundationPiles[targetColumn].cards.Count;

            int currZDepth = Mathf.RoundToInt(selectedCardView.transform.position.z * -1);

            selectedCardView.SetSortingOrderAndZDepth(cardsBelowSelection);
            targetPos.z = selectedCardView.transform.position.z;

            undoSequence.AppendCallback(() => selectedCardView.SetSortingOrderAndZDepth(currZDepth));
        }
        else
        {
            throw new Exception("Move is invalid");
        }


        selectedCardView.MoveToPoint(targetPos);

        undoSequence.Join(selectedCardView.transform.DOMove(selectedCardPos, flipSpeed));
        undoSequence.Pause();
        movesUndo_sequences.Push(undoSequence);
    }
Exemple #24
0
        public void Initialise()
        {
            btsCategories = CategoriesContainer.GetComponentsInChildren <AnturaSpaceCategoryButton>(true);
            btsSwatches   = SwatchesContainer.GetComponentsInChildren <AnturaSpaceSwatchButton>(true);
            SelectCategory(AnturaSpaceCategoryButton.AnturaSpaceCategory.Unset);
            BtOpenModsPanel.SetAsNew(AppManager.I.RewardSystemManager.IsThereSomeNewReward());


            // Create items
            rewardsContainers       = new List <Transform>();
            rewardsImagesContainers = new List <Transform>();
            btsItems    = new AnturaSpaceItemButton[MaxItems];
            btsItems[0] = BtItemMain;
            rewardsContainers.Add(BtItemMain.RewardContainer);
            rewardsImagesContainers.Add(BtItemMain.RewardImage.transform);
            for (int i = 1; i < MaxItems; ++i)
            {
                AnturaSpaceItemButton item = Instantiate(BtItemMain);
                item.transform.SetParent(BtItemMain.transform.parent, false);
                item.Setup();
                btsItems[i] = item;
                rewardsContainers.Add(item.RewardContainer);
                rewardsImagesContainers.Add(item.RewardImage.transform);
            }
            BtItemMain.Setup();

            const float duration = 0.3f;

            showCategoriesTween = DOTween.Sequence().SetAutoKill(false).Pause()
                                  .Append(CategoriesContainer.DOAnchorPosY(150, duration).From().SetEase(Ease.OutBack))
                                  .Join(BtBonesShop.RectT.DOAnchorPosY(-830, duration))
                                  .OnRewind(() => CategoriesContainer.gameObject.SetActive(false));
            showShopTween = DOTween.Sequence().SetAutoKill(false).Pause()
                            .Append(ShopPanelContainer.DOAnchorPosY(-830, duration).From().SetEase(Ease.OutQuad))
                            .Join(BtOpenModsPanel.RectT.DOAnchorPosY(150, duration))
                            .OnRewind(() => ShopPanelContainer.gameObject.SetActive(false));
            showItemsTween = ItemsContainer.DOAnchorPosX(-350, duration).From().SetEase(Ease.OutBack).SetAutoKill(false).Pause()
                             .OnRewind(() => {
                ItemsContainer.gameObject.SetActive(false);
                // Clear items containers children
                foreach (Transform container in rewardsContainers)
                {
                    foreach (Transform child in container)
                    {
                        Destroy(child.gameObject);
                    }
                }
            });
            showSwatchesTween = SwatchesContainer.DOAnchorPosY(-100, duration).From().SetEase(Ease.OutBack).SetAutoKill(false).Pause()
                                .OnRewind(() => SwatchesContainer.gameObject.SetActive(false));

            CategoriesContainer.gameObject.SetActive(false);
            ShopPanelContainer.gameObject.SetActive(false);
            ItemsContainer.gameObject.SetActive(false);
            SwatchesContainer.gameObject.SetActive(false);

            // Listeneres
            BtOpenModsPanel.Bt.onClick.AddListener(() => OnClick(BtOpenModsPanel));
            BtBonesShop.Bt.onClick.AddListener(() => OnClick(BtBonesShop));
            BTRemoveMods.Bt.onClick.AddListener(() => OnClick(BTRemoveMods));
            foreach (var bt in btsCategories)
            {
                var b = bt;
                b.Bt.onClick.AddListener(() => OnClickCategory(b));
            }
            foreach (var bt in btsItems)
            {
                var b = bt;
                b.Bt.onClick.AddListener(() => OnClickItem(b));
            }
            foreach (var bt in btsSwatches)
            {
                var b = bt;
                b.Bt.onClick.AddListener(() => OnClickSwatch(b));
            }

            ShopPanelUI.Initialise();
        }
Exemple #25
0
    // Update is called once per frame
    void Update()
    {
        //Red cross positioning
        if (aiming)
        {
            if (targets.Count > 0)
            {
                for (int i = 0; i < targets.Count; i++)
                {
                    crossList[i].position = Camera.main.WorldToScreenPoint(targets[i].position);
                }
            }
        }

        //Dead Eye Animation Block
        if (deadeye)
        {
            return;
        }

        anim.SetFloat("speed", input.Speed);

        if (!aiming)
        {
            WeaponPosition();
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().name);
        }

        if (Input.GetMouseButtonDown(1) && !deadeye)
        {
            Aim(true);
        }

        if (Input.GetMouseButtonUp(1) && aiming)
        {
            if (targets.Count > 0)
            {
                DeadEye(true);

                Sequence s = DOTween.Sequence();
                for (int i = 0; i < targets.Count; i++)
                {
                    s.Append(transform.DOLookAt(targets[i].GetComponentInParent <EnemyScript>().transform.position, .05f).SetUpdate(true));
                    s.AppendCallback(() => anim.SetTrigger("fire"));
                    int x = i;
                    s.AppendInterval(.05f);
                    s.AppendCallback(() => FirePolish());
                    s.AppendCallback(() => targets[x].GetComponentInParent <EnemyScript>().Ragdoll(true, targets[x]));
                    s.AppendCallback(() => crossList[x].GetComponent <Image>().color = Color.clear);
                    s.AppendInterval(.35f);
                }
                s.AppendCallback(() => Aim(false));
                s.AppendCallback(() => DeadEye(false));
            }
            else
            {
                Aim(false);
            }
        }

        if (aiming)
        {
            input.LookAt(Camera.main.transform.forward + (Camera.main.transform.right * .1f));

            RaycastHit hit;
            Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit);

            if (!deadeye)
            {
                reticle.color = Color.white;
            }

            if (hit.transform == null)
            {
                return;
            }

            if (!hit.collider.CompareTag("Enemy"))
            {
                return;
            }

            reticle.color = Color.red;

            if (!targets.Contains(hit.transform) && !hit.transform.GetComponentInParent <EnemyScript>().aimed)
            {
                hit.transform.GetComponentInParent <EnemyScript>().aimed = true;
                targets.Add(hit.transform);

                Vector3    convertedPos = Camera.main.WorldToScreenPoint(hit.transform.position);
                GameObject cross        = Instantiate(aimPrefab, canvas);
                cross.transform.position = convertedPos;
                crossList.Add(cross.transform);
            }
        }
    }
 private void Update()
 {
     if (Input.GetKeyDown(KeyCode.A))
     {
         this.ani.Play(this.AniString);
         TweenSettingsExtensions.AppendCallback(TweenSettingsExtensions.AppendInterval(DOTween.Sequence(), this.time), new TweenCallback(this, this.< Update > m__0));
     }
 }
 void Start()
 {
     mySequence = DOTween.Sequence();
 }
Exemple #28
0
    private void Update()
    {
        // Example of collecting something
        if (Input.GetKey(KeyCode.LeftShift) && Input.GetMouseButtonUp(0))
        {
            var mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            var mouseCellPosition  = _floor.WorldToCell(mouseWorldPosition);
            var playerCellPosition = _floor.WorldToCell(transform.position);

            if (playerCellPosition != mouseCellPosition)
            {
                return;
            }

            if (_collectables.HasTile(mouseCellPosition))
            {
                _collectables.SetTile(mouseCellPosition, null);
            }
        }

        // Example of pathfinding
        if (Input.GetMouseButtonUp(0))
        {
            var mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            var cellPosition       = _floor.WorldToCell(mouseWorldPosition);

            var targetCellPosition  = cellPosition;
            var currentCellPosition = _floor.WorldToCell(gameObject.transform.position);

            var currentPath = _pathFinder.GetPath(currentCellPosition, targetCellPosition);
            if (currentPath == null)
            {
                return;
            }

            // Process the given path to ensure there are no blocking obstacles
            foreach (var node in currentPath)
            {
                if (_graphNode.Cost(node) == _obstacleNodeCost.Cost(node))
                {
                    return;
                }
            }

            var currentPathWorldPositions = new List <Vector3>();
            foreach (var pos in currentPath)
            {
                var cellWorldPosition       = _floor.CellToWorld(pos);
                var cellCenterWorldPosition = _floor.GetCellCenterWorld(pos);
                currentPathWorldPositions.Add(new Vector3(cellCenterWorldPosition.x, cellWorldPosition.y, 0));
            }

            // Always start from the current world position, this will prevent snapping back to middle of cell.
            if (currentPathWorldPositions.Count > 0)
            {
                currentPathWorldPositions[0] = gameObject.transform.position;
            }

            float pathTravelTime = currentPathWorldPositions.Count * _movementTime;

            _currentSequence?.Kill();
            _currentSequence = DOTween.Sequence();
            _currentSequence.Append(gameObject.transform.DOPath(currentPathWorldPositions.ToArray(), pathTravelTime)
                                    .SetEase(Ease.Linear));
        }
    }
Exemple #29
0
 private void FlashAward()
 {
     DOTween.Sequence()
     .Append(pointAwardText.DOColor(standardTextColor, showTime))
     .Append(pointAwardText.DOColor(standardTransparentColor, hideTime));
 }
    public void ShowActionBarTween(bool isOn)
    {
        if (IsTween)
        {
            return;
        }
        ActionBarSequence = DOTween.Sequence();
        if (isOn)
        {
            IsTween = true;
            if (ActionBarManage.Instance.PersonnelToggle.isOn == isOn)
            {
                SystemModeTweenManage.Instance.PersonTree_normal();
                SystemModeTweenManage.Instance.TweenSequence.PlayBackwards();
            }
            else if (ActionBarManage.Instance.DevToggle.isOn == isOn)
            {
                TopoTweenerManage.Instance.TopoTree_normal();
                TopoTweenerManage.Instance.TopoTweenSequence.PlayForward();
            }
            else if (ActionBarManage.Instance.TwoVotesToggle.isOn == isOn)
            {
                if (TwoTicketSystemUI_N.Instance.State == TwoTicketState.工作票)
                {
                    TwoTicketSystemUITweenManage.Instance.SetTwoVotes_normal();

                    TwoTicketSystemUITweenManage.Instance.TwoVotesTweenSequence.Restart();
                }
                else if (TwoTicketSystemUI_N.Instance.State == TwoTicketState.操作票)
                {
                    OperationTicketDetailsTweenManage.Instance.SetMobilePatrol_normal();
                    // OperationTicketDetailsCloseAndDisappear();
                    OperationTicketDetailsTweenManage.Instance.MobilePatrolTweenSequence.Restart();
                }
            }
            IsTween = false;
        }
        else
        {
            IsTween = true;

            // ActionBarOpernTween();
            if (ActionBarManage.Instance.PersonnelToggle.isOn == true)
            {
                SystemModeTweenManage.Instance.PersonTree_click();
                SystemModeTweenManage.Instance.TweenSequence.Restart();
            }
            else if (ActionBarManage.Instance.DevToggle.isOn == true)
            {
                TopoTweenerManage.Instance.TopoTree_click();


                TopoTweenerManage.Instance.TopoTweenSequence.PlayBackwards();
            }
            else if (ActionBarManage.Instance.TwoVotesToggle.isOn == true)
            {
                if (TwoTicketSystemUI_N.Instance.State == TwoTicketState.工作票)
                {
                    TwoTicketSystemUITweenManage.Instance.SetTwoVotes_click();

                    TwoTicketSystemUITweenManage.Instance.TwoVotesTweenSequence.PlayBackwards();
                }
                else if (TwoTicketSystemUI_N.Instance.State == TwoTicketState.操作票)
                {
                    OperationTicketDetailsTweenManage.Instance.SetMobilePatrol_click();
                    // OperationTicketDetailsRestoreAndAppear();
                    OperationTicketDetailsTweenManage.Instance.MobilePatrolTweenSequence.PlayBackwards();
                }
            }
        }
        IsTween = false;
    }