CustomInitialize is called once per entity instance when it is initialized. Initialization happens:

  • When an instance is created either in code by using the “new” operator, or if an instance is added through the FRB Editor. See below for more information.
  • Whenever an Entity is recycled through a factory.

CustomInitialize and AddToManagers

The CustomInitialize method will only be called when an Entity instance is added to managers. For example consider the following code:

// This assumes that the game has an Entity called Enemy:

// enemy1 will have CustomInitialize called
Enemy enemy1 = new Enemy();

bool addToManagers = false;
// enemy2 will not have CustomInitialize called since it is
// not being added to managers:
Enemy enemy2 = new Enemy(ContentManagerName, addToManagers);

// enemy will not have CustomInitialize called since it is
// not being added to managers (yet):
Enemy enemy3 = new Enemy(ContentManagerName, addToManagers);
// ...but now enemy3 will have CustomInitialize called

CustomInitialize and Inheritance

Entities and Screens which have base types (inheritance) have two or more CustomInitialize functions depending on the inheritance depth. For example, if a screen Level1 inherits from GameScreen, each class (Level1 and GameScreen) has its own CustomInitialize method. Both are called by generated code – a base.CustomInitialize call is not needed.

CustomInitialize is called on the base class first, then to more-derived. Using the example above, GameScreen.CustomInitialize is called first, then Level1.CustomInitialize.