/// <summary> /// Gem state change handling /// </summary> /// <param name="gem">Gem whose state has changed</param> /// <param name="lastState">Last gem state</param> /// <param name="currentState">Current gem state</param> protected virtual void OnChangeGemState(Gem gem, GemState lastState, GemState currentState) { if ((lastState == GemState.Move || lastState == GemState.Swap) && currentState == GemState.Idle) { GemOnMove--; Recalculate.Add(gem); if (GemOnMove == 0 && BoardState == BoardState.Move) { var first = Recalculate.FirstOrDefault(); var two = Recalculate.LastOrDefault(); BoardState = BoardState.Idle; if (!FindMatchesAndDestroy() && lastState == GemState.Swap) { GemSwap(first, two, GemState.Move); } } } if (lastState == GemState.Destroy && currentState == GemState.Idle) { GemOnDestroy--; Gems[gem.XPosition, gem.YPosition].ChangeGemState -= OnChangeGemState; Gems[gem.XPosition, gem.YPosition] = null; OnGemDestroy(); if (Bonuses.Count == 0 && GemOnDestroy == 0 && BoardState == BoardState.Destroy) { CreateNew(); } } }
/// <summary> /// Gem state changes /// </summary> /// <param name="state">State</param> private void ChangeState(GemState state) { var lastState = GemState; GemState = state; OnChangeGemState(this, lastState, GemState); }
/// <summary> /// Swap gem /// </summary> /// <param name="gemOne">First gem</param> /// <param name="gemTwo">Second gem</param> /// <param name="state">Gem states</param> protected virtual void GemSwap(Gem gemOne, Gem gemTwo, GemState state) { Gems[gemOne.XPosition, gemOne.YPosition] = gemTwo; Gems[gemTwo.XPosition, gemTwo.YPosition] = gemOne; GemOnMove += 2; BoardState = BoardState.Move; gemOne.Swap(gemTwo, state); }
/// <summary> /// Swapping two gems /// </summary> /// <param name="gem">Second gem for swap</param> /// <param name="state">State gems</param> public void Swap(Gem gem, GemState state) { var endPosition = gem.EndPosition; var x = gem.XPosition; var y = gem.YPosition; gem.Move(XPosition, YPosition, EndPosition, state); Move(x, y, endPosition, state); }
public Gem(Texture2D texture2D, Rectangle startPosition, Rectangle endPosition) { Texture2D = texture2D; EndPosition = endPosition; Box = startPosition; Position = new Vector2(startPosition.X, startPosition.Y); GemState = GemState.Move; GemColor = Color.White; Size = new Vector2(startPosition.Width, startPosition.Height); DestroyStep = startPosition.Height * 3f; }
/// <summary> /// Move a gem to a specific position /// </summary> /// <param name="x">X gem board position</param> /// <param name="y">Y gem board position</param> /// <param name="position">Coordinate where the gem should be at the end of the path</param> /// <param name="state">State gem</param> public void Move(int x, int y, Rectangle position, GemState state) { if (Bonus != null) { Bonus.XPosition = x; Bonus.YPosition = y; } XPosition = x; YPosition = y; GemState = state; EndPosition = position; }
/// <summary> /// Prepare for the animation state after switching to a new state. /// </summary> protected override void PostTransitState(GemState oldState, GemState newState) { switch (newState) { case GemState.Moving: break; case GemState.Appearing: transform.localScale = Vector3.zero; break; case GemState.Disappearing: break; case GemState.Disappeared: transform.localScale = Vector3.zero; break; } }
public void onStateChanged(int state) { this._state = (GemState)state; if (_state == GemState.Connected) { var sysInfoAndroid = gemWrapper.Call <AndroidJavaObject>("getGemSystemInfo"); SystemInfo = new GemSystemInfo() { Name = sysInfoAndroid.Get <string>("name"), Address = sysInfoAndroid.Get <string>("address"), FirmwareRevision = sysInfoAndroid.Get <string>("firmwareRevision"), HardwareRevision = sysInfoAndroid.Get <string>("hardwareRevision") }; SetPedometerActive(isPedometerActive); } Debug.Log("new connection status is " + ((GemState)state).ToString().ToUpper()); }
/// <summary> /// Clear the animation state before switching to a new state. /// </summary> protected override void PreTransitState(GemState oldState, GemState newState) { switch (oldState) { case GemState.Moving: transform.localPosition = GameManager.Instance.GemMap.GetCoordPos(coord); transform.localScale = originalScale; break; case GemState.Appearing: transform.localScale = originalScale; break; case GemState.Disappearing: transform.localScale = originalScale; transform.localRotation = Quaternion.identity; break; case GemState.Disappeared: transform.localScale = originalScale; break; } }
private void StateChanged(NativeWrapper.GemState state) { Debug.Log("GemSDK: State changed from \"" + addressStr + "\" -> " + state.ToString()); if (state == NativeWrapper.GemState.Connected) { State = GemState.Connected; if (tapActive) { SetTapActive(true); } if (pedometerActive) { SetPedometerActive(true); } } else if (state == NativeWrapper.GemState.Connecting) { State = GemState.Connecting; } else if (state == NativeWrapper.GemState.Disconnected) { GemState lastState = State; State = GemState.Disconnected; if (lastState == GemState.Connecting) { Reconnect(); } } else if (state == NativeWrapper.GemState.Disconnecting) { State = GemState.Disconnecting; } }
// Use this for initialization public void SetGem(GemState _state) { gemState = _state; stateTimer = 0; }
protected virtual void OnChangeGemState(Gem gem, GemState lastState, GemState currentState) { ChangeGemState?.Invoke(gem, lastState, currentState); }
/// <summary> /// Destruction of the gem /// </summary> public void Destroy() { GemState = GemState.Destroy; }
public void onStateChanged(int state) { this._state = (GemState)state; Debug.Log("new connection status is " + ((GemState)state).ToString().ToUpper()); }