Что такое 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.