A set of tools to work with BoardGameArena projects.
Via composer:
composer require --dev dholmes/bga-workbench
Via Docker:
docker build -t bgawb .
alias bgawb="docker run --rm -v $PWD:/data -w /data bgawb"
(this last line should be set in your ~/.bashrc to keep the alias working in a new terminal)
To set up your project to work with BGA Workbench you need to have a bgaproject.yml
file in the root. To generate one
see the bgawb init
command.
Once you've installed bgawb you can run the below command to interactively create a bgaproject.yml
file in your
current directory.
bgawb init
bgawb build --deploy
Watches development files and deploys them as they change.
bgawb build --deploy --watch
The Board Game Arena production framework/environment doesn't natively support a Composer
project setup. By having useComposer: true
set in your bgaproject.yml
file, the
[bgawb build
](Deploying to BGA Studio) command will merge all non-dev composer dependencies inline into your .game.php
file before deploying.
Some testing utilities are provided to help test various parts of a standard BGA project game.
Will run some basic checks on your project setup. e.g. whether you have the required files to function on the BGA
platform (.game.php
, .action.php
, etc), whether your states.inc.php
file is valid, etc.
bgawb validate
Including this trait and implementing the createGameTableInstanceBuilder
method will set up and tear down a game table
instance for each test that is run. Note that this makes use of the setUp
and tearDown
PHPUnit hooks
<?php
namespace Game\Tests;
use PHPUnit\Framework\TestCase;
use BGAWorkbench\Test\TestHelp;
use Doctrine\DBAL\Connection;
use BGAWorkbench\Utils;
class ChooseAttackTest extends TestCase
{
use TestHelp;
protected function createGameTableInstanceBuilder() : TableInstanceBuilder
{
return $this->gameTableInstanceBuilder()
->setPlayersWithIds([66, 77])
->overridePlayersPostSetup([
66 => ['player_color' => 'ff0000'],
77 => ['player_color' => '00ff00']
]);
}
public function testAction()
{
$action = $this->table
->setupNewGame()
->withDbConnection(function (Connection $db) {
$db->exec('INSERT battlefield_card (player_id, type, x, y) VALUES (' .
join('), (', [
[77, '"infantry"', 0, -1],
[66, '"infantry"', 0, 1],
[66, '"artillery"', 6, 1],
])
. ')');
})
->createActionInstanceForCurrentPlayer(66)
->stubActivePlayerId(66)
->stubArgs(['x' => 5, 'y' => 5]);
$action->chooseAttack();
// TODO: Run some asserts on the db
}
public function testStateFunc()
{
$game = $this->table
->setupNewGame()
->createGameInstanceWithNoBoundedPlayer()
->stubActivePlayerId(66);
$game->stNextPlayer();
}
public function testGetAllDatas()
{
$game = $this->table
->setupNewGame()
->withDbConnection(function (Connection $db) {
$db->exec('DELETE FROM deck_card');
$db->exec('DELETE FROM playable_card');
$db->exec('INSERT INTO battlefield_card (player_id, type, x, y) VALUES (66, "tank", 0, 2)');
$db->executeUpdate('UPDATE player SET player_score_aux = 1 WHERE player_id = 66');
})
->createGameInstanceForCurrentPlayer(66);
$datas = Utils::callProtectedMethod($game, 'getAllDatas');
// TODO: Some asserts on $datas
}
}
i.e. if you want to make some changes to the BGA Workbench project. This is not required for using the library in your own project.
vagrant up
vagrant ssh
composer test
- Add a release/tag on github with the version number.
- Go to the packagist url and click "Update": https://packagist.org/packages/dholmes/bga-workbench. This should be done automatically though if just left.