// External functions :) /// <summary> /// Fill List SlidingTokens with tokens that currently on in place /// </summary> public void FillSlideList() { for (int x = 0; x < FieldData.FieldLength; x++) { for (int y = 0; y < FieldData.FieldHeight; y++) { int idx = Tokens.FindIndex(tc => tc.Item.ID == FieldData[x, y].ID); if (idx > -1) { Tokens[idx].SetPosition(LocalPosition(x, y)); if (Tokens[idx].InMotion) { SlidingTokens.Add(Tokens[idx]); } } } } foreach (TokenController tk in Tokens) { if (tk.Created) { SlidingTokens.Add(tk); } } if (SlidingTokens.Count > 0) { state = FieldStates.Slide; } else { state = FieldStates.Ready; } }
private void Update() { switch (State) { case FieldStates.Init: OnGameFieldInit(); break; case FieldStates.Hold: break; case FieldStates.Slide: ReleaseNextSlide(); break; case FieldStates.Cleanup: foreach (TokenController tc in SlidingTokens.FindAll(tk => tk.Death)) { Destroy(tc.gameObject); } Tokens.RemoveAll(tk => tk.Death); SlidingTokens.RemoveAll(tk => tk.Death); if (SlidingTokens.Count == 0) { state = FieldStates.Ready; } break; } }
private void ReleaseNextSlide() { if (SlidingTokens.Count == 0) { state = FieldStates.Ready; return; } foreach (TokenController tk in SlidingTokens) { tk.Created = false; } SlidingTokens.RemoveAll(tk => !tk._created && !tk.InMotion); foreach (TokenController tk in SlidingTokens) { GameToken t = FieldData.NextToken(Mathf.CeilToInt(tk.GamePosition.x), Mathf.CeilToInt(tk.GamePosition.y)); if (t is null) { continue; } if (SlidingTokens.FindIndex(tkn => tkn.Item.ID == t.ID) == -1) { //tk.gameObject.SetActive(true); tk.Created = false; } } }
/// <summary> /// Clean up active Lilsteners and kotens, and reinitialize with new ones /// </summary> public void SyncField() { if (associated) { FieldData.TokensAdded -= OnTokensAdd; FieldData.TokensKilled -= OnTokensKilled; FieldData.FieldChanged -= OnFieldChanged; } OnGameFieldInit(); RespawnTokens(); state = FieldStates.Ready; }
private void OnTokensKilled(object sender, TokenEventArgs e) { state = FieldStates.Cleanup; SlidingTokens.ForEach(delegate(TokenController tk) { tk.Teleport(); }); SlidingTokens.Clear(); SlidingTokens.AddRange(Tokens.FindAll(tk => tk.Perish)); foreach (TokenController tc in SlidingTokens) { tc.gameObject.name = "[killed]" + tc.gameObject.name; } DebugText2.text = FieldData.GetLines(FindAndKill: false).ToString(); }
public void LoadContent() { score = 0; MainState = FieldStates.Idle; AdditionalState = FieldStates.Idle; MovingTiles = new List <Tile>(); FadingTiles = new List <Tile>(); CurrentSelectedTile = PreviousSelectedTile = null; do { Generate(); } while (!MovesAvailable()); }
private void OnTokensAdd(object sender, TokenEventArgs e) { foreach (GameTokenData td in e.Tokens) { SpawnNewToken(td.x, td.y); SlidingTokens.Add(Tokens[Tokens.Count - 1]); } //SlidingTokens.RemoveAll(tk=>!tk.perish); state = FieldStates.Slide; DebugText2.text = FieldData.GetLines(FindAndKill: false).ToString(); }
// constructor public Field(Level curLevel, int id, int x, int y, FieldTypes type) { _curLevel = curLevel; _fieldMesh = _curLevel.GlobalFieldMesh; _fieldId = id; CoordXY = new[] { x, y }; Type = type; _posZ = 0.0f; _veloZ = 0.0f; _curBright = 0.0f; // color and brightness _fieldBright = 1.0f; switch (Type) { case FieldTypes.FtStart: _fieldBright = 0.8f; _fieldColor = new float3(0.0f, 1.0f, 0.0f); break; case FieldTypes.FtEnd: _fieldBright = 1.0f; _fieldColor = new float3(1.0f, 0.1f, 0.1f); break; case FieldTypes.FtNormal: _fieldColor = new float3(0.8f, 0.8f, 0.8f); break; case FieldTypes.FtNormal2: _fieldColor = new float3(0.39f, 0.28f, 0.18f); break; case FieldTypes.FtTele: _fieldColor = new float3(0.0f, 0.62f, 0.89f); break; default: _fieldColor = new float3(0.0f, 0.0f, 0.0f); break; } _randomRotZ = curLevel.ObjRandom.Next(0, 4); State = FieldStates.FsLoading; _dirtyFlag = true; }
private void BlocksFadeout() { AdditionalState = FieldStates.TilesFading; List <List <Tile> > blocks = FindBlocks(); foreach (List <Tile> block in blocks) { foreach (Tile tile in block) { ++score; FadingTiles.Add(tile); } } }
// methods public void ResetField() { if (TypeOld == FieldTypes.FtNormal2 && State == FieldStates.FsDead) { _fieldColor = new float3(0.39f, 0.28f, 0.18f); Type = FieldTypes.FtNormal2; } State = FieldStates.FsLoading; _posZ = -_fieldId / 2.0f; _veloZ = 6f; // default brightness: z coord divided by maximum dist _curBright = 1 - (_posZ / (-_curLevel.FieldCount / 2.0f)); }
private void RemoveBlocks() { List <List <Tile> > blocks = FindBlocks(); foreach (List <Tile> block in blocks) { foreach (Tile tile in block) { if (FadingTiles.Count > 0) { FadingTiles.Remove(tile); } TileArray[tile.Col, tile.Row].Figure = null; } } ((GameplayScreen)ScreenManager.Instance.CurrentScreen).CurrentTime += 1; if (((GameplayScreen)ScreenManager.Instance.CurrentScreen).CurrentTime > ((GameplayScreen)ScreenManager.Instance.CurrentScreen).TimeLimit) { ((GameplayScreen)ScreenManager.Instance.CurrentScreen).CurrentTime = ((GameplayScreen)ScreenManager.Instance.CurrentScreen).TimeLimit; } ((GameplayScreen)ScreenManager.Instance.CurrentScreen).Score.Text = "SCORE: " + (10 * score).ToString(); AdditionalState = FieldStates.TilesStoppedMoving; for (int i = Settings.ColsCount - 1; i >= 0; --i) { for (int j = Settings.RowsCount - 1; j >= 0; --j) { if (TileArray[i, j].Figure == null) { Tile firstAbove = FindFirstAbove(i, j); if (firstAbove != null) { AdditionalState = FieldStates.TilesMoving; TileArray[firstAbove.Col, firstAbove.Row].Figure = null; firstAbove.InitiateMovement(TileArray[i, j].Position, 4); firstAbove.Background.Position = TileArray[i, j].Background.Position; firstAbove.Col = i; firstAbove.Row = j; TileArray[i, j] = firstAbove; } } } } }
private void LoadAnimation() { if (State != FieldStates.FsLoading) { return; } _veloZ = Math.Max(-0.6f, -_posZ / 0.17f); _posZ += _veloZ * (float)Time.Instance.DeltaTime; _curBright = 1 - (_posZ) / (-_curLevel.FieldCount / 2.0f); if (_posZ > -0.01f) { _posZ = 0; _veloZ = 0; _curBright = 1.0f; State = FieldStates.FsAlive; } _dirtyFlag = true; }
public void DeadField() { if (Type != FieldTypes.FtNormal2) { if (State != FieldStates.FsDead) { State = FieldStates.FsDead; _posZ = 0; _veloZ = (Type == FieldTypes.FtEnd) ? -24f : -6f; } } else { TypeOld = FieldTypes.FtNormal2; _posZ = 0; _veloZ = (Type == FieldTypes.FtEnd) ? -24f : -6f; Type = FieldTypes.FtNormal; _fieldColor = new float3(0.8f, 0.8f, 0.8f); ResetField(); } }
/// <summary> /// Inkrementiert den aktuellen Feldstatus. /// </summary> private void IncrementFieldState() { string flagging = "flag_"; if (!this.Checked) { this._FieldState = ((int)this._FieldState == Enum.GetValues(typeof(FieldStates)).Length - 1) ? 0 : ++this._FieldState; switch (this._FieldState) { case FieldStates.RedFlag: flagging += "red"; break; case FieldStates.BlueFlag: if (!this._BlueEnabled) { IncrementFieldState(); } else { flagging += "blue"; } break; case FieldStates.GreenFlag: if (!this._GreenEnabled) { IncrementFieldState(); } else { flagging += "green"; } break; case FieldStates.YellowFlag: if (!this._YellowEnabled) { IncrementFieldState(); } else { flagging += "yellow"; } break; case FieldStates.QuestioMark: this.Text = "?"; break; default: this.Text = ""; break; } if (flagging != "flag_") { System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream myStream = myAssembly.GetManifestResourceStream("MixedMinesweeper.Images." + flagging + ".png"); Bitmap image = new Bitmap(myStream); base.BackgroundImage = image; base.BackgroundImageLayout = ImageLayout.Stretch; } else { this.BackgroundImage = null; } } }
public void Update(GameTime gameTime) { // Attention: a handful of brain cells has been sacrificed to Satan // In order to make fancy swapping animation work properly; // It's time to kick switches and chew bubblegum... and I'm all outta gum switch (MainState) { case FieldStates.RemovingTiles: switch (AdditionalState) { case FieldStates.TilesFading: if (FadingTiles.Last().Figure.Alpha != 0.0f) { foreach (Tile tile in FadingTiles) { RemoveEffect.Apply(tile.Figure); } } else { AdditionalState = FieldStates.RemovingTiles; } break; case FieldStates.RemovingTiles: RemoveBlocks(); break; case FieldStates.TilesStoppedMoving: FillTiles(); if (FindBlocks().Count > 0) { BlocksFadeout(); AdditionalState = FieldStates.TilesFading; } else if (MovesAvailable()) { MainState = AdditionalState = FieldStates.Idle; } else { ((GameplayScreen)ScreenManager.Instance.CurrentScreen).IsGameFinished = true; } break; } break; case FieldStates.Swapping: switch (AdditionalState) { case FieldStates.SwappingBack: MainState = AdditionalState = FieldStates.Idle; CurrentSelectedTile = PreviousSelectedTile = null; break; case FieldStates.TilesStoppedMoving: if (FindBlocks().Count == 0) { CurrentSelectedTile.InitiateMovement(PreviousSelectedTile.Position); PreviousSelectedTile.InitiateMovement(CurrentSelectedTile.Position); SwapTiles(ref CurrentSelectedTile, ref PreviousSelectedTile); AdditionalState = FieldStates.SwappingBack; } else { BlocksFadeout(); MainState = FieldStates.RemovingTiles; CurrentSelectedTile = PreviousSelectedTile = null; } break; } break; case FieldStates.Idle: if (PreviousSelectedTile != null) { ClickEffect.Restore(PreviousSelectedTile.Figure); if (IsAdjacent(CurrentSelectedTile, PreviousSelectedTile)) { CurrentSelectedTile.InitiateMovement(PreviousSelectedTile.Position); PreviousSelectedTile.InitiateMovement(CurrentSelectedTile.Position); SwapTiles(ref CurrentSelectedTile, ref PreviousSelectedTile); MainState = FieldStates.Swapping; AdditionalState = FieldStates.TilesMoving; break; } else { if (CurrentSelectedTile == PreviousSelectedTile) { CurrentSelectedTile = null; } PreviousSelectedTile = null; } } if (CurrentSelectedTile != null) { ClickEffect.Apply(CurrentSelectedTile.Figure); } break; } // So many field states, so little time :) foreach (Tile tile in TileArray) { tile.Update(gameTime); } }
public FieldStates State => state;// { get { return state; } set { StateQueue.Enqueue(value); } } private void Awake() { state = FieldStates.Hold; SlidingTokens = new List <TokenController>(); }