SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Filterscripts > Includes

Reply
 
Thread Tools Display Modes
Old 25/06/2013, 12:14 PM   #1
PeppeAC
Big Clucker
 
Join Date: Jun 2013
Location: Trani, Italy
Posts: 105
Reputation: 190
Default Objects Physics - Handle objects 3D/2D physics (collisions, gravity, ...)

Objects Physics

This include handles via script collisions and other physics of the objects.
Open physics.inc to view the list of functions.

Required:
modelsizes.inc by Y_Less
foreach.inc by Y_Less
ColAndreas by Pottus

Github:
https://github.com/uPeppe/Object-Physics

Examples:
Changelogs:
Objects Physics 0.1
  • Added support to 3D physics.
  • Some functions edited tu support 3D features.
  • Some improvements and bug fixes.
Objects Physics 0.2
  • PHY_ObjectDelate renamed to PHY_DeleteObject.
  • Wall collisions fixed and improved.
  • Added optional "constant" parameter to PHY_CreateWall, like in PHY_SetObjectZBound.
  • Failed attempt to make a better ball rolling using quaternions. See the internal function PHY_Rall if you want to try to fix it.
Objects Physics 0.2 R2
  • Use of foreach.inc to optimize the script.
  • Added PHY_ApplyRotation (can be used in PHY_OnObjectUpdate to make a manual rotation), PHY_GetObjectSpeed and PHY_GetObjectMoveAngle.
Objects Physics 0.3
  • PHY_MoveObject renamed to PHY_SetObjectVelocity.
  • Added PHY_SetObjectAcceleration and PHY_GetObjectAcceleration.
  • Added PHY_SetObjectAirResistance and PHY_GetObjectAirResistance (similar to friction, but proportional to velocity).
  • Script improvements and optimizations.
Objects Physics 0.4
  • Added ColAndreas support, put #define COLANDREAS before including physics.inc to activate it. Related function: PHY_UseColAndreas(objectid, mode).
  • New callbacks: OnObjectCollideWithZBound(objectid, lowhigh), OnObjectCollideWithSAWorld(objectid, Float:cx, Float:cy, Float:cz).
  • New algorithm for object to object 3D collisions.
  • Added a new demo gamemode (colandreas.pwn), that uses ColAndreas and implements a little dog system.

Documentation:
Code:
PHY_InitObject(objectid, modelid = 0, Float:mass = 1.0, Float:size = FLOAT_NAN, mode = PHY_MODE_3D)
/*Starts using physics for objectid.
modelid - object's modelid, used to get its size with modelsizes include.
mass - object's mass, it is like its weight and is used in collisions.
size - object's sphere radius, taken from modelsizes.inc by default.
mode - PHY_MODE_3D or PHY_MODE_2D.*/

PHY_GetObjectMode(objectid)

PHY_DeleteObject(objectid)
/*Stops using physics for objectid (doesn't destroy it).*/

PHY_SetObjectVelocity(objectid, Float:vx, Float:vy, Float:vz = 0.0)
/*Moves the object with vx, vy, vz velocities.*/

PHY_GetObjectVelocity(objectid, &Float:vx, &Float:vy, &Float:vz)

PHY_IsObjectMoving(objectid)

PHY_SetObjectAcceleration(objectid, Float:ax, Float:ay, Float:az = 0.0)
/*Sets the object's acceleration.*/

PHY_GetObjectAcceleration(objectid, &Float:ax, &Float:ay, &Float:az)

PHY_GetObjectSpeed(objectid, &Float:speed, _3D = 0)

PHY_GetObjectMoveAngle(objectid, &Float:moveangle)

PHY_RollObject(objectid, toggle = 1)
/*Starts rolling the object when it moves of toggle = 1 or stops if toggle = 0.*/

PHY_IsObjectRolling(objectid)

PHY_SetObjectFriction(objectid, Float:friction)
/*Applies friction to the object when it moves on the floor (at its lowest Z). If friction is applied, the object gradually slows down.*/

Float:PHY_GetObjectFriction(objectid)

PHY_SetObjectAirResistance(objectid, Float:resistance)
/*Applies air resistance to the object when it moves. The difference between friction and air resistance is that the former works only if the object is on the floor and the letter is also slows down the object proportionally to its velocity.*/

Float:PHY_GetObjectAirResistance(objectid)

PHY_SetObjectZBound(objectid, Float:low = FLOAT_NAN, Float:high = FLOAT_NAN, Float:constant = 0.0)
/*Limits the object's Z position.
low - The lowest Z that the object can have (you can use FLOAT_NEG_INFINITY). If it is set to NaN it doesn't change.
high - The highest Z that the object can have (you can use FLOAT_INFINITY). If it is set to NaN it doesn't change.
(When you use PHY_InitObject lowest Z is set to the current object's Z and highest Z to FLOAT_INFINITY.
constant - It should be from 0.0 to 1.0. If it is 1.0 the object doesn't lose velocity,
if it is 0.0 the object stops when it bounces. It could be a middle ground.*/

PHY_SetObjectGravity(objectid, Float:gravity)
/*Sets the gravity's acceleration that the object is subjected to.*/

Float:PHY_GetObjectGravity(objectid)

PHY_SetObjectWorld(objectid, world)
/*Object and walls collide only if the are in the same world or one of them is in the world 0 (default).*/

PHY_ToggleObjectPlayerColls(objectid, toggle = 1, Float:constant = 1.0, Float:distoffset = 0.8, Float:zoffsetlow = 1.0, Float:zoffsethigh = 1.0)
/*Toggles object's collisions with players.
- constant - It should be from 0.0 to 1.0. If it is 1.0 the object doesn't lose velocity,
if it is 0.0 the object stops when it bounces. It could be a middle ground.
- distoffset - The distance at which the object collides with the player.
- zoffsetlow/zoffsethigh - The max Z distance (downward/upward) at which the object collides with the player.*/

PHY_ApplyRotation(objectid, Float:speed, Float:moveangle)
/*Function used internally to rotate the objects.*/

PHY_CreateWall(Float:x1, Float:y1, Float:x2, Float:y2, Float:constant = 1.0, Float:low = FLOAT_NEG_INFINITY, Float:high = FLOAT_INFINITY)
/*Creates a collision wall (straight line) from A(x1, y1) to B(x2, y2).
constant should be from 0.0 to 1.0. If it is 1.0 the object doesn't lose velocity,
if it is 0.0 the object stops when it collides.
low is the lowest wall's Z, high is the highest. If they're set to default the wall is like infinitely high. */

PHY_CreateArea(Float:minX, Float:minY, Float:maxX, Float:maxY, Float:constant = 1.0, Float:low = FLOAT_NEG_INFINITY, Float:high = FLOAT_INFINITY)
/*Creates four walls that form an area. Works like IsPlayerInArea.*/

PHY_DestroyWall(wallid)

PHY_SetWallWorld(wallid, world)

PHY_CreateCylinder(Float:x, Float:y, Float:size, Float:constant = 1.0, Float:low = FLOAT_NEG_INFINITY, Float:high = FLOAT_INFINITY)
/*Creates a collision cylinder at position x, y.
constant should be from 0.0 to 1.0. If it is 1.0 the object doesn't lose velocity,
if it is 0.0 the object stops when it collides.
low is the lowest cylinder's Z, high is the highest. If they're set to default the cylinder is like infinitely high.*/

PHY_DestroyCylinder(cylinderid)

PHY_SetCylinderWorld(cylinderid, world)

PHY_SetPlayerWorld(playerid, world)

PHY_UseColAndreas(objectid, mode = 1)
/* Sets ColAndreas mode for the object. Modes: 0 none, 1 collisions + z bounds, 2 collisions only, 3 z bounds only */

/* Callbacks */
forward PHY_OnObjectUpdate(objectid);
forward PHY_OnObjectCollideWithObject(object1, object2);
forward PHY_OnObjectCollideWithZBound(objectid, lowhigh); // low bound = 0, high bound = 1
forward PHY_OnObjectCollideWithSAWorld(objectid, Float:cx, Float:cy, Float:cz); // Only with ColAndreas
forward PHY_OnObjectCollideWithWall(objectid, wallid);
forward PHY_OnObjectCollideWithCylinder(objectid, cylinderid);
forward PHY_OnObjectCollideWithPlayer(objectid, playerid);

ColAndreas support:
ColAndreas plugin by Pottus allows to calculate collisions with every object in San Andreas map and to constantly update the low and high Z bound of the object that uses physics.
If you want to use ColAndreas features (PHY_UseColAndreas and PHY_OnObjectCollideWithSAWorld), put "#define COLANDREAS" before including "physics.inc".

Possible usages:
  • Creating a game played with balls, like pool, soccer, volleyball, tennis, etc.
  • Throwing an object with 3D physics.

Videos:

Last edited by PeppeAC; 09/02/2016 at 01:24 PM.
PeppeAC is offline   Reply With Quote
Old 25/06/2013, 12:28 PM   #2
TheArcher
High-roller
 
TheArcher's Avatar
 
Join Date: Dec 2009
Location: Home
Posts: 2,423
Reputation: 251
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Ohooo, really useful, after I've seen the video, I was thinking about the pool. Really good job!
__________________
TheArcher is offline   Reply With Quote
Old 25/06/2013, 01:28 PM   #3
Y_Less
Spam Machine
 
Y_Less's Avatar
 
Join Date: Jun 2008
Location: 629 - git.io/Y
Posts: 14,899
Reputation: 3126
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

VERY nice work!
Y_Less is offline   Reply With Quote
Old 25/06/2013, 02:11 PM   #4
IstuntmanI
High-roller
 
IstuntmanI's Avatar
 
Join Date: Mar 2009
Location: Romania
Posts: 1,863
Reputation: 370
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Great work !
__________________


IstuntmanI is offline   Reply With Quote
Old 25/06/2013, 02:25 PM   #5
Dan..
Gangsta
 
Join Date: Jun 2012
Location: Galati, Romania
Posts: 521
Reputation: 122
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Wonderful!

I noticed a small bug. In your movie, at 0:31 in the left part of the screen there is a ball colliding with a stationary ball and the second ball starts rotating awkwardly.

EDIT: It looks like there are more balls that are not moving, but rotating.

Sugestion: Make objects collide with players and vehicles.
__________________
I'm no longer visiting these forums. BlueG, you can suck my dick.
Dan.. is offline   Reply With Quote
Old 25/06/2013, 02:27 PM   #6
Littlehelper
Gangsta
 
Littlehelper's Avatar
 
Join Date: Nov 2011
Location: 420
Posts: 980
Reputation: 178
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Nice!
Littlehelper is offline   Reply With Quote
Old 25/06/2013, 02:29 PM   #7
Black Wolf
Gangsta
 
Join Date: Mar 2009
Location: On the bed with your sister.
Posts: 515
Reputation: 166
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

OMG Awesome Awesome Awesome.
__________________
<not allowed>
Black Wolf is offline   Reply With Quote
Old 25/06/2013, 02:35 PM   #8
PeppeAC
Big Clucker
 
Join Date: Jun 2013
Location: Trani, Italy
Posts: 105
Reputation: 190
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Quote:
Originally Posted by Dan.. View Post
Wonderful!

I noticed a small bug. In your movie, at 0:31 in the left part of the screen there is a ball colliding with a stationary ball and the second ball starts rotating awkwardly.

EDIT: It looks like there are more balls that are not moving, but rotating.

Sugestion: Make objects collide with players and vehicles.
Thanks to all.

However this happens due to an inappropriate rotation system. That should use more complex maths (like matrixes), but I don't know how.

Last edited by PeppeAC; 25/06/2013 at 05:24 PM.
PeppeAC is offline   Reply With Quote
Old 25/06/2013, 02:39 PM   #9
Lordzy
High-roller
 
Join Date: Mar 2012
Location: NetherRealm
Posts: 2,764
Reputation: 1172
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Great work.
__________________
Currently inactive - I don't play at any SA-MP servers nor work on anything in PAWN for now. The projects that I've done so far in PAWN, which requires updates will be taking some time.
Lordzy is offline   Reply With Quote
Old 25/06/2013, 02:39 PM   #10
KingHual
High-roller
 
KingHual's Avatar
 
Join Date: Jun 2010
Location: Bulgaria
Posts: 2,447
Reputation: 1375
Default Re: [alpha] Objects Physics - Handle objects collisions and more.

Really good work!
__________________
KingHual is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Player Camera Goes Trough Objects And Attached Objects. [WSF]ThA_Devil Scripting Help 1 20/11/2013 02:40 PM
Handle multiple objects. HeLiOn_PrImE Scripting Help 5 08/04/2012 06:32 AM
If I create the objects in virtual worlds that makes room for other objects? tal_peretz Help Archive 8 17/05/2011 01:48 PM
Question regarding objects, collisions Biesmen Help Archive 5 25/03/2011 06:27 AM
Making objects, deleting created objects KnooL Help Archive 1 15/02/2009 08:34 AM


All times are GMT. The time now is 11:30 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.