
Что такое BMOD?
BMOD позволяет amxx программистам использовать альтернативный физический движок (Bullet). Немного видео для наглядности:
https://youtube.com/watch?v=Nn26KkoIGNY
https://youtube.com/watch?v=CUmNRsVro1U
https://youtube.com/watch?v=vUCIKGlyDBQ
https://youtube.com/watch?v=fAJlHJehlI8
Как это работает?
Во время загрузки игровой карты движок Bullet создает свою. У нас получается два “мира” – один со старой HL1 физикой и один с Bullet Physics. Это позволяет добавить объект в мир Bullet и синхронизировать движения с любой энтити в мире HL1.
Какие функции имеет BMOD
/*
Типы объектов 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)
Пример?
Как создать шар над головой игрока:
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")
}
Последние файлы/исходники
Скачать последние файлы GitHub (windows, linux).
Скачать последние amxx исходники Github.
Просмотреть последние исходники GitHub.
Источник: https://forums.alliedmods.net/showthread.php?t=178066


Sorry, the comment form is closed at this time.