// 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); }
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); } }
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)); } }
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); }