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; }
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); } }
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; }
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; }
//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; }
//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; }
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); }
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(); }); } }
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; }
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; } }
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; } }