Example #1
0
    // stackPosition == 0 is nearest the gameboard (i.e. Zero is bottom of stack)
    private void _NewTile(DiceGame.RefillEvent.NewTileInfo newTileInfo, int stackPosition)
    {
        Debug.LogFormat("_NewTile {0},{1} add {2}",
                        newTileInfo.col, newTileInfo.row, newTileInfo.tileValue);

        //
        // Drop new tile from top of screen to new location
        ObjectInMotion objInMotion    = new ObjectInMotion();
        GameObject     prefab         = _PrefabFromDataModelTileName(newTileInfo.tileValue);
        Vector3        initialTilePos = new Vector3(
            startTile.transform.position.x + _tileSize.x * newTileInfo.col,
            startTile.transform.position.y + _tileSize.y * stackPosition,
            startTile.transform.position.z);

        _gameBoardTiles[newTileInfo.col, newTileInfo.row] = Instantiate(prefab, initialTilePos, Quaternion.identity);
        objInMotion.gameObject = _gameBoardTiles[newTileInfo.col, newTileInfo.row];

        objInMotion.destination = new Vector3(
            startTile.transform.position.x + _tileSize.x * newTileInfo.col,
            startTile.transform.position.y - _tileSize.y * (newTileInfo.row + 1),
            startTile.transform.position.z);
        objInMotion.speed = _dieDropSpeed;

        _objectsInMotion.Add(objInMotion);
    }
Example #2
0
    private void _ShootVictim(DiceGame.ActivateTileEvent.ShootVictimInfo shootVictimInfo)
    {
        Debug.LogFormat("_ShootVictim {0},{1} -> {2},{3}",
                        shootVictimInfo.shooterCol, shootVictimInfo.shooterRow,
                        shootVictimInfo.victimCol, shootVictimInfo.victimRow);

        //
        // Pip animation
        //if (shootVictimEvent.shooterCol != shootVictimEvent.victimCol || shootVictimEvent.shooterRow != shootVictimEvent.victimRow)
        {
            int shooterCol = shootVictimInfo.shooterCol;
            int shooterRow = shootVictimInfo.shooterRow;
            int victimCol  = shootVictimInfo.victimCol;
            int victimRow  = shootVictimInfo.victimRow;

            GameObject shooterObject = _gameBoardTiles[shooterCol, shooterRow];
            GameObject victimObject  = _gameBoardTiles[victimCol, victimRow];
            GameObject pip           = Instantiate(this.pipPrefab, shooterObject.transform.position, Quaternion.identity);

            SpriteRenderer victimSprite = pip.GetComponent <SpriteRenderer>();
            SpriteRenderer pipSprite    = pip.GetComponent <SpriteRenderer>();
            pipSprite.sortingOrder = victimSprite.sortingOrder + 1;

            ObjectInMotion objInMotion = new ObjectInMotion();

            objInMotion.gameObject = pip;

            objInMotion.destination = new Vector3(
                victimObject.transform.position.x,
                victimObject.transform.position.y,
                victimObject.transform.position.z);
            objInMotion.speed = _dieDropSpeed;

            //
            // The lambda function below does variable capturing to do it's job properly...
            objInMotion.OnMotionComplete = () => {
                Destroy(victimObject);

                GameObject prefab = _PrefabForGameBoardPosition(victimCol, victimRow);
                if (prefab)
                {
                    _gameBoardTiles[victimCol, victimRow] = Instantiate(prefab, _gameBoardTiles[victimCol, victimRow].transform.position, Quaternion.identity);
                }
                else
                {
                    _gameBoardTiles[victimCol, victimRow] = null;
                }

                Destroy(pip);
            };

            _objectsInMotion.Add(objInMotion);
        }
    }
Example #3
0
    private void _MoveObjects()
    {
        //
        // Move and then remove from list if at destination.  For this to work in a loop
        // you have to iterate in reverse...
        for (int cnt = _objectsInMotion.Count - 1; cnt >= 0; --cnt)
        {
            ObjectInMotion objInMotion = _objectsInMotion[cnt];

            float step = objInMotion.speed * Time.deltaTime;
            objInMotion.gameObject.transform.position = Vector3.MoveTowards(objInMotion.gameObject.transform.position, objInMotion.destination, step);

            if (objInMotion.gameObject.transform.position == objInMotion.destination)
            {
                if (objInMotion.OnMotionComplete != null)
                {
                    objInMotion.OnMotionComplete();
                }

                _objectsInMotion.RemoveAt(cnt);
            }
        }

        //
        // We may need a refill now.  I am not sure where else to test for this?  If we do need a refill then
        // new objects will be added to _objectsInMotion.
        if (_objectsInMotion.Count == 0)
        {
            if (_pendingScore != 0)
            {
                _totalScore   += _pendingScore;
                _pendingScore  = 0;
                scoreText.text = "Score: " + _totalScore.ToString();
            }

            _gameController.Execute(new DiceGame.RefillColumnsAction(_gameController.refillTiles));
        }
    }
Example #4
0
    private void _MoveTile(DiceGame.RefillEvent.MoveTileInfo moveTileInfo)
    {
        Debug.LogFormat("_MoveTile {0},{1} to {2},{3}",
                        moveTileInfo.col, moveTileInfo.fromRow, moveTileInfo.col, moveTileInfo.toRow);

        //
        // Drop tile into new position
        ObjectInMotion objInMotion = new ObjectInMotion();

        _gameBoardTiles[moveTileInfo.col, moveTileInfo.toRow] = _gameBoardTiles[moveTileInfo.col, moveTileInfo.fromRow];
        Debug.Assert(_gameBoardTiles[moveTileInfo.col, moveTileInfo.toRow]);
        _gameBoardTiles[moveTileInfo.col, moveTileInfo.fromRow] = null;

        objInMotion.gameObject = _gameBoardTiles[moveTileInfo.col, moveTileInfo.toRow];

        objInMotion.destination = new Vector3(
            objInMotion.gameObject.transform.position.x,
            objInMotion.gameObject.transform.position.y - _tileSize.y * (moveTileInfo.toRow - moveTileInfo.fromRow),              // Negative moves down
            objInMotion.gameObject.transform.position.z);
        objInMotion.speed = _dieDropSpeed;

        _objectsInMotion.Add(objInMotion);
    }