Пример #1
0
        protected virtual void Stop()
        {
            _state = SpinningState.Normal;
            if (RewardListsView != null && RewardListsView.gameObject.activeInHierarchy)
            {
                RewardListsView.UpdateData();
            }
            if (AllListsView != null && AllListsView.gameObject.activeInHierarchy)
            {
                AllListsView.UpdateData();
            }
            var rz = Rolling.localEulerAngles.z;

            Debug.Log("停止:" + rz);
            if (HeightMark == null)
            {
                return;
            }
            if (_rewardIndex == -1)
            {
                return;
            }
            var item = Items[_rewardIndex];

            HeightMark.SetActive(true);
            var marktAngle = HeightMark.transform.eulerAngles;

            marktAngle.z = item.transform.eulerAngles.z;
            HeightMark.transform.localEulerAngles = marktAngle;
        }
Пример #2
0
    public void Execute(Player player)
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            JumpingState jumpingState = new JumpingState();
            jumpingState.Enter(player);
        }

        if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            DuckingState duckingState = new DuckingState();
            duckingState.Enter(player);
        }

        if (Input.GetKeyDown(KeyCode.S))
        {
            SpinningState spinningState = new SpinningState();
            spinningState.Enter(player);
        }

        if (Input.GetKeyDown(KeyCode.I))
        {
            InvisibleState invisibleState = new InvisibleState();
            invisibleState.Enter(player);
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            RudeState rudeState = new RudeState();
            rudeState.Enter(player);
        }
    }
Пример #3
0
        protected virtual void WaitFor()
        {
            var ds = GetDistance(_curVel, Rolling);

            _waitAllAngles += ds;

            var waitCount = Mathf.Abs((int)(_waitAllAngles / 360));

            if (waitCount < WaitForCylinderCount)
            {
                return;                                  //已经达到指定圈数
            }
            if (_rewardIndex < 0)
            {
                return;                  //已经有奖励
            }
            ReckonReadyStopAngle();
            var curAngles = Rolling.localEulerAngles;//当前的角度

            if (Math.Abs(_readyStopAngle - curAngles.z) > Mathf.Abs(ds))
            {
                return;
            }
            curAngles.z = _readyStopAngle;
            Rolling.localEulerAngles = curAngles;
            _state = SpinningState.SpeedDwon;
        }
Пример #4
0
 public void OnStartClick()
 {
     if (Data == null)
     {
         return;
     }
     if (RotateBySome)
     {
     }
     else
     {
         if (_residueDegree < 1)
         {
             return;
         }
     }
     if (Rolling == null)
     {
         return;
     }
     if (_state != SpinningState.Normal)
     {
         return;
     }
     _state = SpinningState.Launch;
 }
Пример #5
0
        //S=初速度V*时间t+1/2at^2
        protected virtual void SpeedUp()
        {
            var newVel = ChangeAngular(AcceleratedAngularSpeed, _curVel, Rolling);

            if (Mathf.Abs(newVel) > Mathf.Abs(MaxAngularSpeed))
            {
                _state         = SpinningState.Wait;
                _waitAllAngles = 0;
                return;
            }
            _curVel = newVel;
        }
Пример #6
0
        //S=V*T-1/2at^2
        protected virtual void SpeedDown()
        {
            var newVel = ChangeAngular(-AcceleratedAngularSpeed, _curVel, Rolling);

            if (newVel * _curVel <= 0)
            {
                _state         = SpinningState.Stop;
                _waitAllAngles = 0;
                _curVel        = 0;
                return;
            }
            _curVel = newVel;
        }
Пример #7
0
    private void InitializeTrickPhysicsMachine()
    {
        SpinIdleState    s_spinIdle    = new SpinIdleState(ref c_trickPhysicsData, ref c_positionData);
        SpinChargeState  s_spinCharge  = new SpinChargeState(ref c_trickPhysicsData, ref c_inputData, ref cart_incr);
        SpinningState    s_spinning    = new SpinningState(ref c_trickPhysicsData, ref c_positionData, ref cart_incr);
        SpinSnapState    s_spinSnap    = new SpinSnapState(ref c_aerialMoveData, ref c_positionData, ref c_trickPhysicsData, ref c_scoringData);
        SpinCorrectState s_spinCorrect = new SpinCorrectState(ref c_trickPhysicsData, ref c_playerData, ref c_positionData);

        sm_trickPhys = new StateMachine(StateRef.SPIN_IDLE);
        sm_trickPhys.AddState(s_spinIdle, StateRef.SPIN_IDLE);
        sm_trickPhys.AddState(s_spinCharge, StateRef.SPIN_CHARGE);
        sm_trickPhys.AddState(s_spinning, StateRef.SPINNING);
        sm_trickPhys.AddState(s_spinSnap, StateRef.SPIN_RESET);
        sm_trickPhys.AddState(s_spinCorrect, StateRef.SPIN_CORRECT);
    }
Пример #8
0
        protected void SetReward(object obj)
        {
            //{"id":"7","name":"\u8868\u60c5\u798f\u888b","img":null,"grade":"2","odds":"50","is_effect":"1"}
//            _rewardIndex = index;
//            {"getAward_yr":{"count":99997,"info":{"id":"11","name":"\u8c22\u8c22\u53c2\u4e0e","img":null,"num":"1","grade":"1","odds":"200","is_effect":"1","tot_q":null,"remain_q":null}},"success":true
            if (obj == null)
            {
                return;
            }
            var dict = obj as Dictionary <string, object>;

            if (dict == null)
            {
                return;
            }
            DealCost(dict);
            if (!dict.ContainsKey("info"))
            {
                return;
            }
            var dictObj = dict["info"];

            if (dictObj == null)
            {
                return;
            }
            var spDict = dictObj as Dictionary <string, object>;

            if (spDict == null)
            {
                return;
            }
            var sdata = new SpinningItemData(spDict);

            _msgShow = sdata.Msg;
            if (_spinningDatas.ContainsKey(sdata.Id))
            {
                _rewardIndex = _spinningDatas[sdata.Id];
            }
            else
            {
                YxMessageBox.Show("数据异常!!!", null, (box, btnName) =>
                {
                    _state = SpinningState.Normal;
                    Close();
                });
            }
        }
Пример #9
0
        protected virtual void Launch()
        {
            ReSet();
            _state = SpinningState.SpeedUp;
            Facade.Instance <TwManger>().SendAction("getAward_yr", new Dictionary <string, object>(), SetReward, true,
                                                    msg =>
            {
                var msgDict = msg as Dictionary <string, object>;
                if (msgDict != null && msgDict.ContainsKey("errorMessage"))
                {
                    YxMessageBox.Show(msgDict["errorMessage"].ToString());
                }
                _state = SpinningState.Normal;
            });
//            SetReward(Random.Range(0,11));//测试用
        }
    public void Execute(Player player)
    {
        if (Input.GetKey(KeyCode.U))
        {
            player.transform.localScale *= 2f;
            SpinningState spinningState = new SpinningState();
            spinningState.Enter(player);
        }

        if (Input.GetKeyUp(KeyCode.LeftControl))
        {
            player.transform.localScale *= 2f;
            StandingState standingState = new StandingState();
            standingState.Enter(player);
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (moving)
        {
            switch (spinningState)
            {
            case SpinningState.spinning:
                if (spinTime > time)
                {
                    time += Time.deltaTime;

                    // moves toward player while spinning
                    MoveTowards();
                }
                else
                {
                    spinningState = SpinningState.dizzy;
                    time          = 0f;
                }
                break;

            case SpinningState.dizzy:
                if (dizzyTime > time)
                {
                    time += Time.deltaTime;
                    // stops movement
                    myBase.myRigid.velocity = Vector2.zero;
                }
                else
                {
                    spinningState = SpinningState.spinning;
                    time          = 0f;
                }
                break;
            }
        }
    }
 public override void SetState(int newState)
 {
     this.spinningState = (SpinningState)newState;
 }
Пример #13
0
    void ChangeState(SpinningState spinningState)
    {
        switch (spinningState) {
        case SpinningState.Nothing:
                this.spinningBehaviour = this.EmptyBehaviour;
                this.spinningState = SpinningState.Nothing;
                this.directionHookMove = DirectionHookMove.nowhere;
                this.fishingHookGameObject.transform.position = this.fishingHookPivotPoint.transform.position;
                this.fishingHookPivotPoint.transform.position = this.startPivotPointHookPosition;
                this.currentAngleDeviation = 0;
                break;
            case SpinningState.LookingFor:
                this.spinningBehaviour = this.LookingForBehaviour;
                this.catchedStuff = null;
                this.directionHookMove = DirectionHookMove.nowhere;
                this.spinningState = SpinningState.LookingFor;
                break;
            case SpinningState.TryCatch:
                this.destinationNormalVector = (this.fishingHookPivotPoint.transform.position - this.fishingHookCenterOfRotation.transform.position).normalized /* *this.maxLength*/;
                this.spinningBehaviour = this.TryCatchBehaviour;
                this.spinningState = SpinningState.TryCatch;

                if (this.onStartTryCatch != null) {
                    this.onStartTryCatch.Invoke();
                }

                break;
            case SpinningState.PullStuff:
                this.spinningBehaviour = this.PullStaffBehaviour;
                this.spinningState = SpinningState.PullStuff;
                break;
        }
    }
Пример #14
0
        internal override void Update()
        {
            if (AudioEngine.Time < EndTime && IsHit)
            {
                Disarm();
            }

            if (IsHit || AudioEngine.Time < StartTime)
            {
                return;
            }

            double decay = Math.Pow(0.9, InputManager.ElapsedAudioTime / GameBase.SIXTY_FRAME_TIME);

            rpm = rpm * decay + (1.0 - decay) * (Math.Abs(velocityCurrent) * 1000) / (Math.PI * 2) * 60;

            if (spriteRpmText != null)
            {
                spriteRpmText.Text = string.Format(@"{0:#,0}", rpm);
            }

            Player.Instance?.LogSpinSpeed(rpm);

            if (spriteMiddleTop != null)
            {
                spriteMiddleTop.InitialColour = ColourHelper.ColourLerp(Color.White, Color.Red, (float)(AudioEngine.Time - StartTime) / Length);
            }

            if (GameBase.Mode == OsuModes.Edit)
            {
                editorCircleRotation.EndFloat = (float)(rotationRequirement * Math.PI);
                floatRotationCount            = (float)((AudioEngine.Time - StartTime) / 1000 * hitObjectManager.SpinnerRotationRatio);
            }
            else if (AudioEngine.Time < EndTime && AudioEngine.Time > StartTime && !Player.Recovering)
            {
                // Mod time is applied here to keep discrepancies between DT, HT and nomod to preserve integrity of older scores. :(
                double maxAccelThisFrame = HitObjectManager.ApplyModsToTime(maxAccel * InputManager.ElapsedAudioTime, hitObjectManager.ActiveMods);

                if ((GameBase.Mode == OsuModes.Play && ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.SpunOut)) || Player.Relaxing2)
                {
                    velocityCurrent = 0.03;
                }
                else if (velocityTheoretical > velocityCurrent)
                {
                    velocityCurrent += Math.Min(velocityTheoretical - velocityCurrent, velocityCurrent < 0 && Player.Relaxing ? maxAccelThisFrame / RELAX_BONUS_ACCEL : maxAccelThisFrame);
                }
                else
                {
                    velocityCurrent += Math.Max(velocityTheoretical - velocityCurrent, velocityCurrent > 0 && Player.Relaxing ? -maxAccelThisFrame / RELAX_BONUS_ACCEL : -maxAccelThisFrame);
                }


                velocityCurrent = Math.Max(-0.05, Math.Min(velocityCurrent, 0.05));

                float rotationAddition = (float)(velocityCurrent * InputManager.ElapsedAudioTime);
                float turnRatio        = spriteMiddleBottom != null && spriteMiddleBottom.Texture != null ? 0.5f : 1;

                // We don't want the spinner sprite to spin faster / slower when DT / HT are active. It should always spin proportionally to the cursor spinning rate.
                SpriteCircleTop.Rotation += (float)HitObjectManager.ApplyModsToTime(rotationAddition * turnRatio, hitObjectManager.ActiveMods);
                if (spriteMiddleBottom != null)
                {
                    spriteMiddleBottom.Rotation += (float)HitObjectManager.ApplyModsToTime(rotationAddition, hitObjectManager.ActiveMods);
                    spriteCircleBottom.Rotation  = SpriteCircleTop.Rotation / 3f;
                }

                if (velocityCurrent != 0)
                {
                    StartSound();
                }
                else
                {
                    StopSound();
                }

                floatRotationCount += Math.Abs((float)(rotationAddition / Math.PI));
            }

            updateCompletion(Math.Abs(floatRotationCount) / rotationRequirement * 100);

            switch (state)
            {
            case SpinningState.NotStarted:
                if (scoringRotationCount == 0 || AudioEngine.Time < StartTime + 500)
                {
                    break;
                }

                spriteSpin?.FadeOut(300);
                state = SpinningState.Started;
                break;

            case SpinningState.Started:
                if (scoringRotationCount < rotationRequirement)
                {
                    break;
                }

                if (spriteGlow != null)
                {
                    spriteGlow.InitialColour = new Color(3, 151, 255);
                }

                if (spriteSpin != null)
                {
                    spriteSpin.FadeOut(100);
                    spriteClear.Transformations.Clear();
                    spriteClear.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1, AudioEngine.Time, Math.Min(EndTime, AudioEngine.Time + 400), EasingTypes.Out));
                    spriteClear.Transformations.Add(new Transformation(TransformationType.Scale, 2, 0.8f, AudioEngine.Time, Math.Min(EndTime, AudioEngine.Time + 240), EasingTypes.Out));
                    spriteClear.Transformations.Add(new Transformation(TransformationType.Scale, 0.8f, 1, Math.Min(EndTime, AudioEngine.Time + 240), Math.Min(EndTime, AudioEngine.Time + 400), EasingTypes.None));
                    spriteClear.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime - 50, EndTime));
                }

                state = SpinningState.Passed;
                break;
            }
        }