Класс sound object

Материал из xrWiki
Версия от 22:08, 4 апреля 2016; RayTwitty (обсуждение | вклад) (Новая страница: «=Описание класса из lua_help= <syntaxhighlight lang="cpp">C++ class sound_object { const looped = 1; // зацикленность звука…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Описание класса из lua_help

C++ class sound_object {
    const looped = 1; // зацикленность звука
    const s2d = 2; // играть в голове актора
    const s3d = 0; // играть в пространстве

    property frequency; // частота
    property max_distance; // максимальная дистанция слышимости
    property min_distance; // минимальная дистанция слышимости
    property volume; // громкость

    sound_object (string); // создание звукового объекта, в аргументе - путь до звукового файла
    sound_object (string, enum ESoundTypes); // тоже самое, что и предыдущее + установка типа звука

    function set_position(const vector&); // установить позицию звука
    function stop_deffered(); // отложенная остановка
    function get_position() const; // получить позицию звука
    function stop(); // остановка
    function length(); // получить длительность звука
    function playing() const; // играет ли звук в данный момент

    function play_no_feedback(game_object*, number, number, vector, number);
    function play_at_pos(game_object*, const vector&);
    function play_at_pos(game_object*, const vector&, number);
    function play_at_pos(game_object*, const vector&, number, number);
    function play(game_object*);
    function play(game_object*, number);
    function play(game_object*, number, number);
};

Описание ESoundTypes из движка игры

enum ESoundTypes
{
  SOUND_TYPE_NO_SOUND = 0x0,
  SOUND_TYPE_WEAPON = 0x80000000,
  SOUND_TYPE_ITEM = 0x40000000,
  SOUND_TYPE_MONSTER = 0x20000000,
  SOUND_TYPE_ANOMALY = 0x10000000,
  SOUND_TYPE_WORLD = 0x8000000,
  SOUND_TYPE_PICKING_UP = 0x4000000,
  SOUND_TYPE_DROPPING = 0x2000000,
  SOUND_TYPE_HIDING = 0x1000000,
  SOUND_TYPE_TAKING = 0x800000,
  SOUND_TYPE_USING = 0x400000,
  SOUND_TYPE_SHOOTING = 0x200000,
  SOUND_TYPE_EMPTY_CLICKING = 0x100000,
  SOUND_TYPE_BULLET_HIT = 0x80000,
  SOUND_TYPE_RECHARGING = 0x40000,
  SOUND_TYPE_DYING = 0x20000,
  SOUND_TYPE_INJURING = 0x10000,
  SOUND_TYPE_STEP = 0x8000,
  SOUND_TYPE_TALKING = 0x4000,
  SOUND_TYPE_ATTACKING = 0x2000,
  SOUND_TYPE_EATING = 0x1000,
  SOUND_TYPE_IDLE = 0x800,
  SOUND_TYPE_OBJECT_BREAKING = 0x400,
  SOUND_TYPE_OBJECT_COLLIDING = 0x200,
  SOUND_TYPE_OBJECT_EXPLODING = 0x100,
  SOUND_TYPE_AMBIENT = 0x80,
  SOUND_TYPE_ITEM_PICKING_UP = 0x44000000,
  SOUND_TYPE_ITEM_DROPPING = 0x42000000,
  SOUND_TYPE_ITEM_HIDING = 0x41000000,
  SOUND_TYPE_ITEM_TAKING = 0x40800000,
  SOUND_TYPE_ITEM_USING = 0x40400000,
  SOUND_TYPE_WEAPON_SHOOTING = 0x80200000,
  SOUND_TYPE_WEAPON_EMPTY_CLICKING = 0x80100000,
  SOUND_TYPE_WEAPON_BULLET_HIT = 0x80080000,
  SOUND_TYPE_WEAPON_RECHARGING = 0x80040000,
  SOUND_TYPE_MONSTER_DYING = 0x20020000,
  SOUND_TYPE_MONSTER_INJURING = 0x20010000,
  SOUND_TYPE_MONSTER_STEP = 0x20008000,
  SOUND_TYPE_MONSTER_TALKING = 0x20004000,
  SOUND_TYPE_MONSTER_ATTACKING = 0x20002000,
  SOUND_TYPE_MONSTER_EATING = 0x20001000,
  SOUND_TYPE_ANOMALY_IDLE = 0x10000800,
  SOUND_TYPE_WORLD_OBJECT_BREAKING = 0x8000400,
  SOUND_TYPE_WORLD_OBJECT_COLLIDING = 0x8000200,
  SOUND_TYPE_WORLD_OBJECT_EXPLODING = 0x8000100,
  SOUND_TYPE_WORLD_AMBIENT = 0x8000080,
  SOUND_TYPE_WEAPON_PISTOL = 0x80000000,
  SOUND_TYPE_WEAPON_GUN = 0x80000000,
  SOUND_TYPE_WEAPON_SUBMACHINEGUN = 0x80000000,
  SOUND_TYPE_WEAPON_MACHINEGUN = 0x80000000,
  SOUND_TYPE_WEAPON_SNIPERRIFLE = 0x80000000,
  SOUND_TYPE_WEAPON_GRENADELAUNCHER = 0x80000000,
  SOUND_TYPE_WEAPON_ROCKETLAUNCHER = 0x80000000,
};

Методы проигрывания звуков

Описание параметров
obj - игровой объект
timeout - задержка перед проигрыванием звука
position - позиция
volume - громкость
flags - набор констант класса sound_object (looped, s2d, s3d)

play

function play(obj);
function play(obj, timeout);
function play(obj, timeout, flags);

1) Методы с одним и двумя аргументами не работают.
2) Работает только для актора.
По сути, этот метод годится только для проигрывания звуков в голове актора.

play_at_pos

function play_at_pos(obj, position);
function play_at_pos(obj, position, timeout);
function play_at_pos(obj, position, timeout, flags);

1) Для метода с двумя аргументами, второй аргумент - это позиция на уровне. Звук не перемещается вместе с объектом, а остается играть там, где запустили. Работает и для актора и для других объектов.
2) Метод с тремя аргументами работает как и предыдущий, но появилась возможность установки таймаута.
3) Особенности метода с четырьмя аргументами:
- Для актора аргумент position - это смещение звука относительно актора. Звук смещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет).
- Для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.

play_no_feedback

function play_no_feedback(obj, flags, timeout, position, volume);

1) Для актора аргумент position - это смещение звука относительно актора. Звук перемещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет).
2) Для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.
3) При наличии looped, звук продолжает циклически играть и после перезагрузки сейва.
4) Громкость задается в диапазоне от 0.0 до 1.0.
5) Для этого метода не работает дальнейшее изменение каких-либо параметров, в т.ч. и остановка
Фактически не подходит для проигрывания зацикленных звуков.

Совет: при использовании методов play и play_at_pos - сохраняйте созданный звуковой объект во внешнюю локальную переменную, иначе уборщик затрет ваш звук в игре.