This is a documentation for Board Game Arena: play board games online !
User talk:SwHawk/Create Modular Code: Difference between revisions
Jump to navigation
Jump to search
(→Highlight lines added in code blocks: new section) |
|||
Line 37: | Line 37: | ||
*Always use X instead of this | *Always use X instead of this | ||
*As usual, you can use any number of modules this way | *As usual, you can use any number of modules this way | ||
== Highlight lines added in code blocks == | |||
The code blocks are rather long right now with all of the comments, however I do think it is worth keeping them so they look like the starter files. | |||
You could consider coloring or emphasising the lines added in some way. | |||
e.g. | |||
<nowiki>[[X_game.php]]</nowiki> | |||
<?php | |||
/** | |||
*------ | |||
* BGA framework: © Gregory Isabelli <gisabelli@boardgamearena.com> & Emmanuel Colin <ecolin@boardgamearena.com> | |||
* X implementation : © <Your name here> <Your email address here> | |||
* | |||
* This code has been produced on the BGA studio platform for use on http://boardgamearena.com. | |||
* See http://en.boardgamearena.com/#!doc/Studio for more information. | |||
* ----- | |||
* | |||
* X.game.php | |||
* | |||
* This is the main file for your game logic. | |||
* | |||
* In this PHP file, you are going to defines the rules of the game. | |||
* | |||
*/ | |||
'''require_once 'modules/UtilityFunctionsTrait.php';''' //Here we require the trait to be loaded when the class is loaded | |||
<span style="color:green">use YourProjectNamespace\Modules\UtilityFunctionsTrait;</span> //We import the trait to be used directly as UtilityFunctionsTraits, otherwise we would have to use the Fully qualified class name (YourProjectNamespace\Modules\UtilityFunctionsTrait) | |||
class YourProjectName extends Table | |||
{ | |||
//... | |||
////////////////////////////////////////////////////////////////////////////// | |||
//////////// Utility functions | |||
//////////// | |||
/* | |||
In this space, you can put any utility methods useful for your game logic | |||
*/ | |||
<span style="color:green">'''use UtilityFunctionsTrait;'''</span> //Here we actually include the trait inside the class, making all the trait's methods available as class methods, keeping their visibility scope (so a private method is still private) | |||
} |
Revision as of 18:04, 14 June 2022
User names
"Tisaac Human Expert" -> Tisaac
"VictoriaLia" -> VictoriaLa
A non-dojo JS approach
Dojo is old and kinda bad. This approach lets you avoid Dojo and this and allows more modern JS.
[X.js] window.X = {}; // X = your game, or you can use something more generic ... setup: function (gameData) { // this cannot be an arrow function due to dojo X = Object.assign(this, X); // the rest of your setup goes here },
[modules/whatever.js] X = Object.assign(X, { MY_CONSTANT: 1, myFunction: (arg1, arg2) => { X.someFunction(X.MY_CONSTANT); return arg1 + arg2; }, someFunction: (x) => _('The answer is: ') + x, }
Notes on this approach:
- Aside from setup and any framework-override functions, you should be using arrow functions
- Always use X instead of this
- As usual, you can use any number of modules this way
Highlight lines added in code blocks
The code blocks are rather long right now with all of the comments, however I do think it is worth keeping them so they look like the starter files.
You could consider coloring or emphasising the lines added in some way.
e.g.
[[X_game.php]] <?php /** *------ * BGA framework: © Gregory Isabelli <gisabelli@boardgamearena.com> & Emmanuel Colin <ecolin@boardgamearena.com> * X implementation : © <Your name here> <Your email address here> * * This code has been produced on the BGA studio platform for use on http://boardgamearena.com. * See http://en.boardgamearena.com/#!doc/Studio for more information. * ----- * * X.game.php * * This is the main file for your game logic. * * In this PHP file, you are going to defines the rules of the game. * */ require_once 'modules/UtilityFunctionsTrait.php'; //Here we require the trait to be loaded when the class is loaded use YourProjectNamespace\Modules\UtilityFunctionsTrait; //We import the trait to be used directly as UtilityFunctionsTraits, otherwise we would have to use the Fully qualified class name (YourProjectNamespace\Modules\UtilityFunctionsTrait) class YourProjectName extends Table { //... ////////////////////////////////////////////////////////////////////////////// //////////// Utility functions //////////// /* In this space, you can put any utility methods useful for your game logic */ use UtilityFunctionsTrait; //Here we actually include the trait inside the class, making all the trait's methods available as class methods, keeping their visibility scope (so a private method is still private) }