Beispiel #1
0
        //  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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #4
0
 /// <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;
 }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        // 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;
        }
Beispiel #9
0
        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);
                }
            }
        }
Beispiel #10
0
        // 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));
        }
Beispiel #11
0
        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;
                        }
                    }
                }
            }
        }
Beispiel #12
0
        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;
        }
Beispiel #13
0
        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;
                }

            }
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
0
        public FieldStates State => state;// { get { return state; } set { StateQueue.Enqueue(value); } }


        private void Awake()
        {
            state         = FieldStates.Hold;
            SlidingTokens = new List <TokenController>();
        }