Developer Documentation
- Introduction
- Plugin
- Data Providers
- Install
- Services
- Chat Notification
- Translations
- File System
- User Groups
- Admin Groups
- Player Storage
- Players DB Storage
- Maps Storage
- Components
- Cook Books
In-Game Configuration
One of the big features of eXpansion has always been the ability to configure nearly everything directly ingame, instead of going through complex.
In eXpansion2 we have kept this awsome feature, but we have taken it a step further to make it as easy as possible to implement and use.
Basics
Creating a new configuration.
A cnfiguration, a parameter, like everything else in eXpansion2 is a service. So you just need to add your service :
services:
_defaults:
autowire: true
autoconfigure: true
eXpansion.local_records.config.nb_records:
class: eXpansion\Framework\Config\Model\IntegerConfig
arguments:
$path: "eXpansion/LocalRecords/NbRecords"
$name: "expansion_local_records.config.nb_records.name"
$scope: "global"
$description: "expansion_local_records.config.nb_records.dsc"
$defaultValue: 100
$minValue: 10
$maxValue: 10000
tags:
- {name: expansion.config}
The path is used to display the configuration in the proper place in the menu. In this casse it will be in : Admin > Config > eXpansion > Local Records. Cicking on this element will open a window containing all the configs in this path. The path is normally only used to organize the configs in the menu. The real unique identifier of the config that will be used to fetch it is the service id.
The name parameter is a translated string that will be displayed in the window
scope works much like eXpansion1. There are multiple scopes :
- global : All servers sharing the same install will have same configuration
- key : Allows servers sharing the same key to have same configuration values. (Unused at the moment same as global)
- server : Server configs are configs that are unique to the server. Exemple : Dedimania key and such.
The description Will be displayed in the config window and allow people to better understand what they are configuring.
The defaultValue allows to have a default value when nothing is configured.
The other parameters will depend upon the config Model you use. You can find all available config models in
the eXpansion\Framework\Config\Model
namespece. We will se later how you can create you own model.
Making the translations:
First let’s translate the menu elements. These translations keys are generated automatically by eXpansion.
expansion_config:
menu:
eXpansion:
label: "eXpansion Configs"
LocalRecords:
label: "Local Records"
As you can see the path is taken back in the config.
Let’s also translate our custom configs :
expansion_local_records:
config:
nb_records:
name: "Number of Local Records"
Using the config
Yo use the config you will simply need to inject it in the service(s) that needs it.
eXpansion.local_records.services.lap_record_handler_factory:
class: eXpansion\Bundle\LocalRecords\Services\RecordHandlerFactory
arguments:
$ordering: ASC
$nbRecords: '@eXpansion.local_records.config.nb_records'
Creating your own.
In order to create your own config you need an class implementing ConfigInterface
. Easiest way is to do this is to
use AbstractConfig
.
<?php
class MyTotoConfig extends AbstractConfig
{
/**
* @inheritdoc
*/
public function __toString() : string
{
return 'TODO'; /* Do stuff here */
}
}
This can then be used as wished. By default nevertheless the ui will use a text field to display the config.
To customize the ui you will need to add a custom UiField, implementing UiInterface
Let’s first create our class :
<?php
class MyTotoField implements UiInterface
{
/** @var Factory */
protected $uiFactory;
/**
* TextField constructor.
*
* @param Factory $uiFactory
*/
public function __construct(Factory $uiFactory)
{
$this->uiFactory = $uiFactory;
}
/**
* @inheritdoc
*/
public function build(ConfigInterface $config, $width, ManialinkInterface $manialink): Renderable
{
// TODO change this and do what you actually need
return $this
->uiFactory
->createInput($config->getPath(), $config->getRawValue())
->setWidth($width);
}
/**
* @inheritdoc
*/
public function isCompatible(ConfigInterface $config): bool
{
return ($config instanceof MyTotoConfig);
}
}
We can now need to create a service and register it as a config ui field.
Vendor\MyBundle\Ui\Fields\MyTotoField:
class: Vendor\MyBundle\Ui\Fields\MyTotoField
tags:
- {name: 'expansion.config.ui'}
There you go, you have created you own config, with a dedicated server that displayes it properly.