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