public GameSession(CoordHelper.EProfile pt, HUD h) : base(App.Game) { hud = h; playerType = pt; board = new Board(playerType, new Vector2(Constants.Measures.boardBlockWidth, Constants.Measures.boardBlockHeight)); climby = new Climby(playerType); // aroundRect = new Dictionary<Climby.EAroundSquare, Point>(); #region Set Around Rect aroundRect.Add(Climby.EAroundSquare.FRONT, Point.Zero); aroundRect.Add(Climby.EAroundSquare.FRONT_TOP, Point.Zero); aroundRect.Add(Climby.EAroundSquare.FRONT_UNDER, Point.Zero); aroundRect.Add(Climby.EAroundSquare.FRONT_UNDER_UNDER, Point.Zero); aroundRect.Add(Climby.EAroundSquare.TOP, Point.Zero); aroundRect.Add(Climby.EAroundSquare.UNDER, Point.Zero); #endregion lastDir = climby.Direction; // tetriminoFactory = TetriminoFactory.Instance; var tmp = tetriminoFactory.getTetrimino(playerType); currTetrimino = tmp.Item1; shadowTetrimino = tmp.Item2; hud.setNext(TetriminoFactory.Instance.getNextTetrimino(playerType), playerType); cur = TimeSpan.Zero; //lat = new TimeSpan(10000000/3); // 3 score = new Score(); level = new Level(); //lat = new TimeSpan(10000000 / (level.level + 1)); lat = new TimeSpan((10 - level.level) * 1000000); //lat = new TimeSpan(2 / (level.level + 1) * 10000000); tSpinLimit = new TimeSpan(1000000 * 3); // TSPIN TIME tSpinCur = TimeSpan.Zero; state = new Dictionary<Climby.EState, Action>(); #region Climby State state.Add(Climby.EState.FALL, climbyFall); state.Add(Climby.EState.FREE_FALL, climbyFreeFall); state.Add(Climby.EState.CLIMB, climbyClimb); state.Add(Climby.EState.END_CLIMB, climbyClimb); state.Add(Climby.EState.MOVE, climbyMove); state.Add(Climby.EState.STOP, climbyStop); #endregion updateAroundRects(); }
public override void Update(GameTime gameTime) { base.Update(gameTime); board.Update(gameTime); cur += gameTime.ElapsedGameTime; if (TagManager.Instance.NextTagIsPlace(playerType)) hud.setNext(tetriminoFactory.getAndSetNextTetriminoFromId(TagManager.Instance.getNextTag(playerType), playerType), playerType); //ACTIVE TETRIMiNO if (cur > lat) { cur = TimeSpan.Zero; if (tetriminoCanGoingDown()) currTetrimino.PosRel = new Vector2(currTetrimino.PosRel.X, currTetrimino.PosRel.Y + 1f); } if (!tetriminoCanGoingDown()) { if (tSpinCur == TimeSpan.Zero) tSpinCur = TimeSpan.Zero + gameTime.ElapsedGameTime; else tSpinCur += gameTime.ElapsedGameTime; if (tSpinCur > tSpinLimit) { SoundManager.Instance.play(SoundManager.EChannel.SFX, SoundManager.ESound.DROP, 0, 0.5f, false); death = board.pushBlocks(currTetrimino, climby.DeadZone); //END -- ACTIVE TETRIMiNO //BOARD #region FullLine Event List<int> brokenLines = board.checkFullLine(); climby.stepDown(aroundRect, board.CamUp); if (brokenLines.Count > 0) // Happens when lines are borken { Point climbyRelPos = climby.getRelPos(); score.addLineScore(brokenLines.Count * brokenLines.Count); hud.setScore(score.TotalScore, playerType); int nbDown = 0; foreach (int l in brokenLines) if (climbyRelPos.Y < l) nbDown++; if (nbDown > 0) climby.stepDown(aroundRect, nbDown); } #endregion if (climby.State != Climby.EState.CLIMB && climby.ActualPosition.Bottom > Constants.Measures.upBoardMargin + Constants.Measures.boardHeight) death = true; var tmp = tetriminoFactory.getTetrimino(playerType); currTetrimino = tmp.Item1; shadowTetrimino = tmp.Item2; hud.setNext(TetriminoFactory.Instance.getNextTetrimino(playerType), playerType); tSpinCur = TimeSpan.Zero; } } //state[climby.State](); climby.Update(gameTime); // state[climby.State](); // INVERTED UPDATE AND STATECHANGE if (lastDir != climby.Direction || climby.State == Climby.EState.MOVE || climby.State == Climby.EState.FREE_FALL) updateAroundRects(); lastDir = climby.Direction; var tmpClimbyStepHeight = climby.OldMinHeight - climby.MinHeight; if (tmpClimbyStepHeight > 0) { score.addClimbyScore(tmpClimbyStepHeight); hud.setScore(score.TotalScore, playerType); } if (level.updateLevel(tmpClimbyStepHeight)) { hud.setLevel(level.level, playerType); //lat = new TimeSpan(10000000 / (level.level + 1)); //lat = new TimeSpan(2 / ((level.level + 1) * 11) * 1000000000); lat = new TimeSpan((10 - level.level) * 1000000); climby.setSpeedFromLevel(level.level); } projectShadow(); }