#include
Inherits pe_params.
Public Attributes | |
float | kInertia |
inertia koefficient, the more it is, the less inertia is; 0 means no inertia | |
float | kInertiaAccel |
inertia on acceleration | |
float | kAirControl |
air control koefficient 0..1, 1 - special value (total control of movement) | |
float | kAirResistance |
standard air resistance | |
Vec3 | gravity |
gravity vector | |
float | nodSpeed |
vertical camera shake speed after landings | |
int | bSwimming |
whether entity is swimming (is not bound to ground plane) | |
float | mass |
mass (in kg) | |
int | surface_idx |
surface identifier for collisions | |
float | minSlideAngle |
if surface slope is more than this angle, player starts sliding (angle is in radians) | |
float | maxClimbAngle |
player cannot climb surface which slope is steeper than this angle | |
float | maxJumpAngle |
player is not allowed to jump towards ground if this angle is exceeded | |
float | minFallAngle |
player starts falling when slope is steeper than this | |
float | maxVelGround |
player cannot stand of surfaces that are moving faster than this | |
float | timeImpulseRecover |
forcefully turns on inertia for that duration after receiving an impulse | |
int | collTypes |
entity types to check collisions against | |
IPhysicalEntity * | pLivingEntToIgnore |
ignore collisions with this living entity (doesn't work with other entity types) | |
int | bNetwork |
uses extended history information (obsolete) | |
int | bActive |
0 disables all simulation for the character, apart from moving along the requested velocity | |
int | iRequestedTime |
requests that the player rolls back to that time and re-executes pending actions during the next step | |
int | bReleaseGroundColliderWhenNotActive |
when not 0, if the living entity is not active, the ground collider, if any, will be explicitly released during the simulation step. | |
Determines the dynamics of a living / walking entity
#include
// Example for how a living (walking) character can be physicalized
void PhysicalizeLiving(IEntity& entity)
{
SEntityPhysicalizeParams physParams;
// Set the physics type to PE_LIVING
physParams.type = PE_LIVING;
// Set the mass to 90 kilograms
physParams.mass = 90;
// Living entities have to set the SEntityPhysicalizeParams::pPlayerDimensions field
pe_player_dimensions playerDimensions;
// Prefer usage of a cylinder instead of capsule
playerDimensions.bUseCapsule = 0;
// Specify the size of our cylinder
playerDimensions.sizeCollider = Vec3(0.3f, 0.3f, 0.935f * 0.5f);
// Keep pivot at the player's feet (defined in player geometry)
playerDimensions.heightPivot = 0.f;
// Offset collider upwards
playerDimensions.heightCollider = 1.f;
physParams.pPlayerDimensions = &playerDimensions;
// Living entities have to set the SEntityPhysicalizeParams::pPlayerDynamics field
pe_player_dynamics playerDynamics;
// Mass needs to be repeated in the pe_player_dynamics structure
playerDynamics.mass = physParams.mass;
physParams.pPlayerDynamics = &playerDynamics;
// Now physicalize the entity
entity.Physicalize(physParams);
}
// Example for how a living (walking) character's move direction can be modified
void MoveLiving(IPhysicalEntity& physicalEntity)
{
pe_action_move moveAction;
// Apply movement request directly to velocity
moveAction.iJump = 2;
moveAction.dir = Vec3(0, 1, 0);
physicalEntity.Action(&moveAction);
}