diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index d8f1b3be..95a62007 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -45,6 +45,7 @@ - [Модуль core:bit_converter](scripting/modules/core_bit_converter.md) - [Модуль core:data_buffer](scripting/modules/core_data_buffer.md) - [Модули core:vector2, core:vector3](scripting/modules/core_vector2_vector3.md) +- [Встроенные компоненты сущностей](scripting/core_components.md) ## Аннотации типов данных diff --git a/doc/ru/scripting/core_components.md b/doc/ru/scripting/core_components.md new file mode 100644 index 00000000..a90cf1d8 --- /dev/null +++ b/doc/ru/scripting/core_components.md @@ -0,0 +1,89 @@ +# Встроенные компоненты + +## *core:pathfinding* + +Компонент для построение путей движения мобов. + +```lua +local pathfinding = entity:require_component("core:pathfinding") + +-- Устанавливает цель движения, не сбрасывая текущий маршрут +pathfinding.set_target(target: vec3) + +-- Возвращает текущую цель движения +pathfinding.get_target() --> vec3 + +-- Устанавливает высоту преодолимого прыжком препятствия +pathfinding.set_jump_height(height: number) + +-- Возвращает текущий построенный маршрут или nil +pathfinding.get_route() + +-- Сбрасывает текущий построенный маршрут +pathfinding.reset_route() + +-- Возвращает следующую точку маршрута, по текущим координатам. +-- (следует использовать компонент core:mob - функция mob.follow_waypoints) +pathfinding.next_waypoint() --> vec3 или nil + +-- Устанавливает интервал перестройки маршрута в тактах обновления. +pathfinding.set_refresh_interval(interval: number) +``` + +## *core:mob* + +Компонент для управления движением (включая полёт) и вращением мобов. + +```lua +local mob = entity:require_component("core:mob") + +-- Выполняет прыжок с силой jump_force * multiplier +mob.jump([опционально] multiplier: number = 1.0) + + +-- Вертикальное движение (работает в полёте или в плавании (в будущем)) +mob.move_vertical( + -- Скорость вертикального движения + speed: number, + -- Текущая скорость сущности (для минимизации вызовов rigidbody:get_vel()) + [опционально] current_velocity +) + +-- Горизонтальное движение +mob.go( + -- 2D вектор направления движения + dir: vec2, + -- Множитель скорости + speed_multiplier: number, + -- Бег + sprint: bool, + -- Присядь + crouch: bool, + -- Текущая скорость сущности (для минимизации вызовов rigidbody:get_vel()) + [опционально] current_velocity +) + +-- Меняет направление взгляда сущности, направляя на указанную точку +mob.look_at( + -- Целевая точка + point: vec3, + -- Менять ли направление всей сущности + change_dir: bool = false +) + +-- Движение по построенному маршруту. +-- Если не указан pathfinding, требуется наличие у сущности компонента core:pathfinding +mob.follow_waypoints( + -- Возможная замена компонента pathfinding + [опционально] pathfinding +) + +-- Устанавливает направление всей сущности +mob.set_dir(dir: vec3) + +-- Проверяет, включён ли режим полёта +mob.is_flight() --> bool + +-- Включает/выключает режим полёта +mob.set_flight(flag: bool) +``` diff --git a/res/scripts/components/mob.lua b/res/scripts/components/mob.lua index 4a9efaaa..f81658a9 100644 --- a/res/scripts/components/mob.lua +++ b/res/scripts/components/mob.lua @@ -51,6 +51,7 @@ end function move_vertical(speed, vel) vel = vel or body:get_vel() + speed = speed or 1.0 vel[2] = vel[2] * 0.2 + props.movement_speed * speed * 0.8 body:set_vel(vel) end @@ -145,6 +146,10 @@ function set_dir(new_dir) dir = new_dir end +function get_dir() + return dir +end + function is_flight() return flight end function set_flight(flag) flight = flag end diff --git a/res/scripts/components/pathfinding.lua b/res/scripts/components/pathfinding.lua index 2a6e51aa..2ae8b3e7 100644 --- a/res/scripts/components/pathfinding.lua +++ b/res/scripts/components/pathfinding.lua @@ -25,6 +25,10 @@ function get_route() return route end +function reset_route() + route = nil +end + function next_waypoint() if not route or #route == 0 then return