diff --git a/tests/showbase/test_Audio3DManager.py b/tests/showbase/test_Audio3DManager.py new file mode 100644 index 0000000000..39b179bc91 --- /dev/null +++ b/tests/showbase/test_Audio3DManager.py @@ -0,0 +1,55 @@ +from direct.showbase.Audio3DManager import Audio3DManager +from panda3d import core +import pytest + + +@pytest.fixture(scope='session') +def manager3d(): + root = core.NodePath("root") + manager = core.AudioManager.create_AudioManager() + manager3d = Audio3DManager(manager, root=root) + yield manager3d + del manager3d + manager.shutdown() + + +def test_audio3dmanager_velocity(manager3d): + sound = manager3d.load_sfx("nonexistent") + + # Generate an object with movement + object = core.NodePath("object") + object.set_pos(0, 0, 0) + object.set_fluid_pos(1, 2, 3) + assert object.get_pos_delta() == (1, 2, 3) + + res = manager3d.attach_sound_to_object(sound, object) + assert res + + clock = core.ClockObject.get_global_clock() + clock.mode = core.ClockObject.M_slave + clock.dt = 0.5 + + # Test auto velocity calculation + manager3d.set_sound_velocity_auto(sound) + assert manager3d.get_sound_velocity(sound) == (2, 4, 6) + + # Test setting to fixed value + manager3d.set_sound_velocity(sound, (5, 5, 5)) + assert manager3d.get_sound_velocity(sound) == (5, 5, 5) + + +def test_audio3dmanager_weak(manager3d): + sound = manager3d.load_sfx("nonexistent") + object = core.NodePath("object") + + res = manager3d.attach_sound_to_object(sound, object) + assert res + assert object in manager3d.sound_dict + + manager3d.update() + assert object in manager3d.sound_dict + + object.remove_node() + manager3d.update() + + assert object not in manager3d.sound_dict