Adding a Player
In Torque3D we call the object that you are moving when you press keys the
ControlObject
and the Player
is one instance of such a ControlObject. So, let's define a PlayerData
datablock, place the following in the file data/CoinCollection/datablocks/player.tscript
:datablock PlayerData( CoinCollectorPlayer ) {
// Third person shape
ShapeAsset = "Prototyping:Playerbot_shape";
// Set distance from camera to player
cameraMaxDist = 3.0;
};
datablock
this is very similar to a struct, basically in a datablock you define a set of default values which will get referenced by the spawned objects upon creation.PlayerData
(
CoinCollectorPlayer )
here we state that we want to create a datablock of the type PlayerData, for creating new Players. We call this new datablock CoinCollectorPlayer .ShapeAsset
here it is a reference to the asset Playerbot_shape
in the Prototyping module. But it could be set to any ShapeAsset in any module. We'll cover assets later in the tutorial.cameraMaxDist
defines the maximum distance from the Player shape to the Camera
this will essentially allow us to zoom out a bit.And we need to register this datablock, do this in the
onCreateGameServer
function in data/CoinCollection/CoinCollection.tscript
:function CoinCollection::onCreateGameServer(%this) {
%this.registerDatablock("./datablocks/player.tscript");
}
We use the method
registerDatablock
because the core
module has a lot of clever logic about loading/unloading/updating datablocks which we can't take advantage of if we just use the exec
function.Now we have a
PlayerData
that we can use, but in order to actually use it, we have to create a Player
instance whenever a player enters the game. We do that in data/CoinCollection/server/gamemode.tscript
, first let's create a helper method that creates the Player
using the CoinCollectorPlayer
datablock and assigns it as the client's Control Object:function CoinCollectionGameMode::spawnControlObject(%this, %client) {
// First spawn the actual Player object
%player = spawnObject(Player, CoinCollectorPlayer);
if (!isObject(%player)) {
return;
}
MissionCleanup.add(%player);
// Place it at the center of the world with a default rotation,
// this is a pretty simple "spawn placement"
%spawnTransform = "0 0 1 0 0 0 0 0";
%player.setTransform(%spawnTransform);
// Couple the player to the client and set it as the control object
%player.client = %client;
%client.setControlObject(%player);
%client.player = %player;
// Tell the client that we expect it to be in third person
%client.setFirstPerson(false);
}
Now that's just a helper method, in order to actually activate it we should call it from the
onClientEnterGame
function that we will add in that same file:function CoinCollectionGameMode::onClientEnterGame(%this, %client) {
// Set the player name based on the client's connection data
%client.setPlayerName(%client.connectData);
// Call the helper function
%this.spawnControlObject(%client);
}
And let's make sure to delete the player object when they leave:
function CoinCollectionGameMode::onClientLeaveGame(%this, %client) {
// Remove the player object
%client.player.delete();
}
Now, run the level again and see that you can move around and jump with your newly created
Player
object!Last modified 8mo ago