This tutorial sets up an entity with Top Down controls. It provides a default implementation which requires no code. Later tutorials show how to interact with this plugin using code.
The FRB Editor provides support for top-down entities through the Entity Input Movement tab. Any entity can be created as a Top Down entity; however, the most common setup is to have a Player entity which uses top down controls.
Empty projects can use the Project Setup Wizard to create a top down player entity. Existing games can add top down controls to new or existing entities with a few clicks. This tutorial shows you how to do both.
The simplest way to set your project up is to use the new project wizard. FlatRedBall automatically launches the wizard when creating a new project.
To create a top-down project, select the Standard Top Down button.
Now your game should be set up with a fully-functional top-down entity. You can verify this by clicking on the Player entity and then clicking on the Entity Input Movement tab. The Player should be marked as having Top-Down as its Input Movement Type.
This section will explain how to manually add a GameScreen and Top-Down entity. You do not need to follow this section if you have used the wizard as shown in the previous step.
Select the Quick Actions tab
Click the Add Screen button
Click OK to the default GameScreen name (all games should have a single GameScreen)
To add a Player entity:
Click the Add Entity button
Name the entity Player
Check:
Circle under Collisions
Top-Down under Input Movement Type
Leave the rest of the defaults and click OK
If you already have an entity created, you can make it a Top Down entity:
Select the entity
Click the Entity Input Movement tab
Click the Top-Down option
By default your GameScreen should have a list of Players (it was an option earlier when creating the Player entity). We recommend always creating a list of Players even if you intend to only have one player. This standard appears throughout FlatRedBall's documentation and can make moving from one project to another easier.
If you did not add a PlayerList earlier by keeping the Include lists in GameScreen, or if you created your GameScreen after your Player, you can manually add a PlayerList by following these steps:
Verify Player is selected
Click the Quick Actions tab
Click the Add Player List to GameScreen button
You will also need a Player instance in the list. To do this, drag+drop the Player onto the GameScreen and it will be added to the Player list.
Now that the entity is marked as a Top Down entity and now that we have an instance of the entity in the GameScreen, we can run the game and see the player move. By default the entity uses a gamepad if one is connected. Otherwise, the entity will use WASD keys on the keyboard.
This tutorial provides information on how to change the input device used by the entity. By default the entity uses the first Xbox game pad if one is available, otherwise the entity uses the keyboard. Sometimes this functionality is not desired, such as if the game supports multiple players or AI-controlled entities.
The Top Down entity code interacts with the IInputDevice interface, which provides a standard set of values for controlling game objects. Both the Xbox360GamePad and Keyboard implement this interface, so if the default implementation for this interface meets your game's needs, you can use these objects as-is. Otherwise, your game can implement its own IInputDevice to change how the top down entity is controlled. First we'll look at how to customize the input to use different keyboard keys.
As mentioned earlier, our Player entity defaults to using an Xbox gamepad if one exists. If not, it uses the keyboard. Even though we won't customize this code, we can see its implementation by looking in Player.Generated.cs and searching for InitializeInput.
Ultimately, these calls make their way to calling CustomInitializeTopDownInput. Since this is a partial method, we need to add it ourselves to our Player if we want to customize the input. To do this:
Go to Player.cs
Add the following code to the Player.cs file
The player will now move around with the IJKL keys (rather than the default WASD). Note that this will also override input even if you have an Xbox gamepad plugged in. If this is not desired, we can change the input if it's using the keyboard. This is an example of how to keep the input device, but only change the movement code conditionally:
This code could contain further updates to change desired input based on other input devices such as Xbox360GamePad.
The code in the section above modifies which keys are used from the keyboard. It could be expanded to also handle other input devices like Xbox gamepads. However, instead of changing which keys are used when using the keyboard, you may want to change which input device is being used by your player. This is typically done in the GameScreen. This allows the GameScreen to initialize input, especially if your game allows the player to pick which input device to use. For example, to force the player to always use an Xbox gamepad, modify the following code in the GameScreen's CustomInitialize:
If your game followed the previous tutorials, then your GameScreen has a PlayerList with a single Player named Player1. In this setup, the GameScreen will always have at least 1 player, but can have more. A quick way to support multiplayer without any UI is to detect the number of Xbox gamepads plugged in. If more than 1 is plugged in, we can create additional players very easily. The following code will create one player per Xbox gamepad plugged in. Notice that we only create additional players if we have two or more gamepads since the first player is automatically created.
To see more than one player you must have at least two gamepads plugged in to your computer. Also, keep in mind that the players will initially overlap so you must move one to see both.
The CurrentMovement property controls the values used by the top down entity in response to input values. This value can be changed according to various conditions in your game such as:
Collision with different terrain (such as walking through mud)
Responding to power-ups (such as collecting a power-up which increases speed)
Responding to special moves or input which changes the character's movement variables (such as holding down a run button)
Movement values can be defined in Glue or code. If your game has a limited set of movement values, these can be defined in Glue. To define a movement value in Glue:
Select the entity
Click the Entity Input Movement tab
Verify that your entity is using the Top Down option for Input Movement Type
Click the Add Control Values button
Modify the newly-added movement values as necessary
The Top Down tab displays all movement values for the selected entity.
You can assign the current movement values in code through the CurrentMovement propety. For example, the following code assigns the movement to FastMovement or Default depending on the state of an Xbox360GamePad: