User Tools

Site Tools


scripting:basics

Scripting Basics

The examples below need a soldier with the name 'scripted_soldier' and a vehicle with the name 'BTR1'. Make sure these two exists in your composition.

Get an Entity

The examples below need a soldier with the name 'scripted_soldier' and a vehicle with the name 'BTR1'. Make sure these two exists in your composition.

One of the most used commands is probably 'FindEntityByName'. Whevever you want to script something in the game, you should find its entity. This is simply done by the below line.

Notice the variable name 'btr' and the entityname 'BTR1' - You have to change these variables to reflect your entity ingame.

Example 1 a vehicle

Get the entity of a vehicle with the name 'BTR1'

GenericEntity btr = GenericEntity.Cast(GetWorld().FindEntityByName("BTR1"));

Lets break down this line.

This is where we declare our variablename and type, where the name is 'btr' and the type is 'GenericEntity' In Enfusion, variables has to be declared of which type they should be. Its fairly self-explanatory if you look at the line below.

GenericEntity btr = 

So, the variable 'btr' wil contain the results of a combination of 2 commands.

When we break it down you'll notice these 2 commands.

GetWorld().FindEntityByName("BTR1")

GenericEntity.Cast()

Lets not get too technical, but what you need to know is that we search for the entity 'BTR1' - The result of this command is passed to the CAST function of the GenericEntity object.

GenericEntity.Cast(GetWorld().FindEntityByName("BTR1"));  

What does that mean? - it means that the result of your FindEntityByName is 'casted' (*converted) to a GenericEntity Object. And with a genericEntity object we can do things…

So, the result of the above is that we have a variable with the name 'btr' which 'type' is 'GenericEntity'

Example 2: a Character

Lets try this with a soldier (character).

So, we get the entity of a soldier with the name 'soldier_scripted'

GenericEntity soldier = GenericEntity.Cast(GetWorld().FindEntityByName("soldier_scripted"));

Now we have the 'GenericEntity' in the variable 'soldier'. To control this soldier, we need a controller component. Because we know the entity is in fact a 'character' - we need to get the characterController. This procedure is almost the same as you would get any other entity.

CharacterControllerComponent soldier_c = CharacterControllerComponent.Cast(soldier.FindComponent(CharacterControllerComponent));

So here we have a variable with the name 'soldier_c' ( this is a descriptive variable, we know its a soldier and by appending the '_c' we know this is the soldier controller component) which contains the CharacterControllerComponent for our specific entity.


Control a CharacterEntity

Lets continu from Example #2. We now have an entity, and its time we control it.

Change stance

If we want to change the stance of the soldier, we can do so via this CharacterController.

soldier_c.SetStanceChange(ECharacterStanceChange.STANCECHANGE_TOCROUCH);

That looks quite straightforward, aside from the variable passed to the function. The stances of the character are defined in ECharacterStanceChange.c, but i will list them below.

  • STANCECHANGE_NONE,
  • STANCECHANGE_TOERECTED,
  • STANCECHANGE_TOCROUCH,
  • STANCECHANGE_TOPRONE

Notice that these are 'STANCE CHANGES' - not the actual stances (which are defined in echaracterstance.c).

Great! You are now able to control a soldier's stance by script!

Move

Now lets try make the character move. To move a character, we need to know what speed and direction you want to move. We will use a variable which we declare as a 'vector' as shown below.

vector direction = {0,0,1};

The 'soldier_c' variable contains the CharacterController, and like with the stances, you can control the movement. Below you see the 'SetMovement' command to which we pass 'speed' (2) and the variable 'direction'.

soldier_c.SetMovement(2, direction);

That should do the trick. Your character should be moving in the given direction.

scripting/basics.txt · Last modified: 2022/08/11 14:32 by jerryhopper

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki