Garry's Mod Wiki

Revision Difference

PhysObj:ApplyForceCenter#528430

<function name="ApplyForceCenter" parent="PhysObj" type="classfunc"> <description> Applies the specified force to the physics object. (in Newtons) Applies the specified force to the physics object (in [Newtons](https://en.wikipedia.org/wiki/Newton_(unit))). <note>This will not work on players, use <page>Entity:SetVelocity</page> instead.</note> </description> <realm>Shared</realm> <args> <arg name="force" type="Vector">The force to be applied.</arg> </args> </function> <example> <description> An entity that Simulates it's own gravity by applying a force downward on the entity based on the force equation. (Force = mass * acceleration) Since, by default, entities already have gravity. The default gravity must be turned off by adding "phys:EnableGravity(false)" in the entities Initialize function so that the default gravity doesn't interfere with our custom gravity. NOTE: We can get the mass of the entity by using the GetMass() function. An entity that Simulates it's own gravity by applying a force downward on the entity based on the force equation : `(Force = mass * acceleration)` Since, by default, entities already have gravity. The default gravity must be turned off by adding `phys:EnableGravity(false)` in the entities <page text="Initialize">ENTITY:Initialize</page> function so that the default gravity doesn't interfere with our custom gravity. **NOTE**: We can get the mass of the entity by using the <page>PhysObj:GetMass</page> function. <note>-9.80665 (meters / second ^ 2) Is the approximate acceleration of objects on Earth due to gravity. (It is negative because gravity pushes things downwards.)</note> <note>-9.80665 (meters / second^2) Is the approximate acceleration of objects on Earth due to gravity. (It is negative because gravity pushes things downwards.)</note> </description> <code> function ENT:Initialize() self:SetModel("models/hunter/blocks/cube1x1x1.mdl") self:PhysicsInit(SOLID_VPHYSICS) self:SetSolid(SOLID_VPHYSICS) self:SetMoveType(MOVETYPE_VPHYSICS) if phys:IsValid() then phys:EnableGravity(false) -- This is required. Since we are creating our own gravity. self:SetModel( "models/hunter/blocks/cube1x1x1.mdl" ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) local phys = self:GetPhysicsObject() if phys:IsValid() then phys:EnableGravity( false ) -- This is required. Since we are creating our own gravity. phys:Wake() end end function ENT:PhysicsUpdate(phys) local phys = self:GetPhysicsObject() function ENT:PhysicsUpdate( phys ) phys:ApplyForceCenter( Vector( 0, 0, phys:GetMass() * -9.80665 ) ) phys:ApplyForceCenter(Vector(0,0,phys:GetMass()*-9.80665)) end </code> </example> </example>