The module is a wrapper around the libcurl library. It supports SSL and allows transfers in non-blocking mode. Functions: All natives do exactly what their C counterparts do, except for some: the function starts a transfer, and when it completes, the callback callbackComplite…
BMOD - Extended Physics Module (Module that extends the game's physics)
What is BMOD? BMOD lets amxx programmers use an alternative physics engine (Bullet). A few videos for illustration: https://youtube.com/watch?v=Nn26KkoIGNY https://youtube.com/watch?v=CUmNRsVro1U https://youtube.com/watch?v=vUCIKGlyDBQ https://youtube.com/watch?v=fAJlHJehlI8…
Description
What is BMOD?
BMOD lets amxx programmers use an alternative physics engine (Bullet). A few videos for illustration:
https://youtube.com/watch?v=Nn26KkoIGNY
https://youtube.com/watch?v=CUmNRsVro1U
https://youtube.com/watch?v=vUCIKGlyDBQ
https://youtube.com/watch?v=fAJlHJehlI8
How does it work?
When a game map loads, the Bullet engine creates its own world. This gives us two "worlds": one with the old HL1 physics and one with Bullet Physics. This makes it possible to add an object to the Bullet world and sync its movements with any entity in the HL1 world.
What functions does BMOD have
/*
Типы объектов bmod:
*/
enum {
BMOD_sphere = 0, /* сфера: x - радиус */
BMOD_box, /* куб: x, y и z - стороны */
BMOD_cylinder, /* цилиндр: x - радиус; z - ось, вдоль которой расположен цилиндр */
BMOD_capsule, /* капсула: x - радиус, y - расстояние между полусфер; z - ось, вдоль которой расположена капсула */
BMOD_cone /* конус: x - радиус, y - высота; z - ось, вдоль которой расположен конус */
};
/*
Создает bmod объект с параметрами: энтити, тип, масса и размеры (x,y,z). Впоследствии bmod объект прикрепляется к данной энтити.
*/
native bmod_object_add(ent,type,Float:mass,Float:size[3])
/*
Удаляет bmod объект, прикрепленный к энтити.
*/
native bmod_object_remove(ent)
/*
Возвращает 1, если к энтити прикреплен какой-нибудь bmod объект.
*/
native bmod_object_check(ent)
enum BMOD_FL {
BMOD_FL_afactor, //только устанавливает угловой фактор
BMOD_FL_friction, //устанавливает/получает трение
BMOD_FL_restitution //устанавливает/получает восстановление
};
enum BMOD_VEC {
BMOD_VEC_afactor, //устанавливает/получает угловой фактор
BMOD_VEC_avelocity, //устанавливает/получает угловое ускорение
BMOD_VEC_afriction, //устанавливает/получает анизотропное трение
BMOD_VEC_gravity, //устанавливает/получает гравитацию
BMOD_VEC_factor, //устанавливает/получает линейный фактор
BMOD_VEC_velocity, //устанавливает/получает линейное ускорение
BMOD_VEC_force, //применяет центральная силу / получает полную силу
BMOD_VEC_torque //применяет момент силы / получает полный момент силы
};
/*
Устанавливает параметры объекту.
*/
native bmod_object_set_float(ent,BMOD_FL:key,Float:float)
native bmod_object_set_vector(ent,BMOD_VEC:key,Float:vector[3])
/*
Применяет объект в силу относительного положения.
*/
native bmod_object_apply_force_at(ent,Float:force[3],Float:pos[3])
/*
Получает параметры объекта.
*/
native Float:bmod_object_get_float(ent,BMOD_FL:key)
native bmod_object_get_vector(ent,BMOD_VEC:key,Float:vector[3])
/*
Активирут callback(forward) для энтити.
*/
native bmod_object_set_callback(ent,bool)
/*
Устанавливает/применяет мировые параметры.
*/
native bmod_world_set_float(BMOD_FL:key,Float:float)
native Float:bmod_world_get_float(BMOD_FL:key)
/*
Стоит трейс до энтити, возвращая его индекс или ноль, если ее нет. Также возвращает точку касания и нормаль.
*/
native bmod_traceline(Float:start[3],Float:end[3],Float:point[3],Float:normal[3])
/*
Форвард, вызывающийся при столкновении объектов.
*/
forward bmod_forward_contact(ent1,ent2,Float:distance)Example?
How to create a ball above the player's head:
public plugin_init() {
register_concmd("bmod_test","_bmod_test")
}
public _bmod_test(id){
//создаем новую энтити и устанавливаем модель к ней
new entity = create_entity("func_wall")
entity_set_model(entity,"models/fyzsph.mdl")
//устанавливаем координаты энтити над головой игрока
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)
origin[2]+=128
entity_set_origin(entity,origin)
//устанавливаем movetype и nextthink для плавного движения энтити
entity_set_float(entity,EV_FL_nextthink,86400.0)
entity_set_int(entity,EV_INT_movetype,8)
//прикрепляем bmod объект к созданной энтити
new Float:size[3] = {24.0,24.0,24.0}
bmod_object_add(entity,BMOD_sphere,10.0,size)
//устанавливаем трение и восстановление
bmod_object_set_float(entity,BMOD_FL_friction,2.0)
bmod_object_set_float(entity,BMOD_FL_restitution,0.88)
//устанавливаем мировое трение и мировое восстановление
bmod_world_set_float(BMOD_FL_friction,1.0)
bmod_world_set_float(BMOD_FL_restitution,1.0)
}
public plugin_precache(){
precache_model("models/fyzsph.mdl")
}Latest files/source code
Download the latest files from GitHub (windows, linux).
Download the latest amxx source code from GitHub.
Browse the latest source code on GitHub.
Source: https://forums.alliedmods.net/showthread.php?t=178066
