Класс sound_object

Материал из xrWiki
Перейти к: навигация, поиск

Описание класса из 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. если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень;
  4. громкость задается в интервале от 0.0 до 1.0;
  5. поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание.

Данный метод подходит для проигрывания не цикличных звуков, для который не требуется дальнейшее изменение параметров.

Внимание!

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