title |
---|
Controllers |
Controllers distribute events between instances and manage the living instances. For example, if the BaseMode.PlayerEnteredVehicle
event is called, the BasePlayerController
will trigger the BasePlayer.EnteredVehicle
event. If a player disconnected, the BasePlayerController
will destroy the instance of the disconnected player.
To create a controller, create a class which implements IController
. There are some additional interfaces which can be implemented to add functionality to the controller:
- If the controller needs to register a type to the pooling system, it must implement the
ITypeProvider
interface. - If the controller needs to register services to the game mode, it must implement the
IGameServiceProvider
interface. - If the controller needs to listen to events in the game mode, it must implement the
IEventListener
interface.
class MyController : IController, IEventListener, ITypeProvider, IGameServiceProvider
{
public virtual void RegisterEvents(BaseMode gameMode)
{
// TODO: Register your events
}
public virtual void RegisterTypes()
{
// TODO: Register your types
}
public virtual void RegisterServices(BaseMode gameMode, GameModeServiceContainer serviceContainer)
{
// TODO: Register your services
}
}
To load a controller, override LoadControllers
in your game mode and add them to the controllers collection.
protected override void LoadControllers(ControllerCollection controllers)
{
// Load the default controllers first
base.LoadControllers(controllers);
controllers.Add(new MyController());
}
To overload a controller, create a subclass of the controllers you are overloading and add it to the controllers collection using the ControllerCollection.Override
method.
class MyPlayerController : BasePlayerController
{
public override void RegisterTypes()
{
// Register your own player implementation instead of the default.
MyPlayer.Register<MyPlayer>();
}
}
protected override void LoadControllers(ControllerCollection controllers)
{
// Load the default controllers first
base.LoadControllers(controllers);
// Override default controllers
controllers.Override(new MyPlayerController());
// Add you own controllers
controllers.Add(new MyController());
}