From f8ae78762c6ebb55a0e561c8ec38bfd7806d793f Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Sun, 13 Dec 2020 02:48:18 +0300 Subject: [PATCH] Removed obsolete sxscore --- build/gamesource/config/entities/classes.ent | 12 +- build/gamesource/config/entities/defaults.ent | 2 +- proj/SkyXEngine/vs2013/SkyXEngine.sln | 94 +- proj/sxscore/vs2013/sxscore.vcxproj | 199 -- proj/sxscore/vs2013/sxscore.vcxproj.filters | 57 - source/game/BaseEntity.h | 2 +- source/game/BaseTool.cpp | 45 +- source/game/BaseTool.h | 4 +- source/game/BaseWeapon.cpp | 94 +- source/game/BaseWeapon.h | 27 +- source/game/GameData.cpp | 1 - source/game/GameStates.cpp | 15 +- source/game/NPCZombie.cpp | 25 +- source/game/NPCZombie.h | 6 +- source/game/PropBreakable.cpp | 22 +- source/game/PropBreakable.h | 9 +- source/game/PropDoor.cpp | 58 +- source/game/PropDoor.h | 16 +- source/game/SoundPlayer.h | 1 - source/game/ZombieHands.cpp | 10 +- source/game/proptable.cpp | 1 + source/gdefines.h | 2 + source/score/CallBackOgg.cpp | 43 - source/score/sound.cpp | 1805 ----------------- source/score/sound.h | 639 ------ source/score/sxscore.cpp | 548 ----- source/score/sxscore.h | 507 ----- source/score/sxscore_dll.cpp | 24 - 28 files changed, 226 insertions(+), 4042 deletions(-) delete mode 100644 proj/sxscore/vs2013/sxscore.vcxproj delete mode 100644 proj/sxscore/vs2013/sxscore.vcxproj.filters delete mode 100644 source/score/CallBackOgg.cpp delete mode 100644 source/score/sound.cpp delete mode 100644 source/score/sound.h delete mode 100644 source/score/sxscore.cpp delete mode 100644 source/score/sxscore.h delete mode 100644 source/score/sxscore_dll.cpp diff --git a/build/gamesource/config/entities/classes.ent b/build/gamesource/config/entities/classes.ent index 1db9d18a7..8ac055b8a 100644 --- a/build/gamesource/config/entities/classes.ent +++ b/build/gamesource/config/entities/classes.ent @@ -99,12 +99,12 @@ rifle_step = 200 ; шаг нарезки, мм ; звуки -snd_draw = "wpn/ak74_draw.ogg" ; Достать -snd_holster = "wpn/generic_holster.ogg" ; Убрать -snd_shoot = "wpn/ak74_shoot2.ogg" ; Стрелять -snd_empty = "wpn/gen_empty.ogg" ; Пустой -snd_reload = "wpn/ak74_reload.ogg" ; Перезарядка -snd_switch = "wpn/generic_close.ogg" ; Переключение режима +snd_draw = "sounds/wpn/ak74_draw.ogg" ; Достать +snd_holster = "sounds/wpn/generic_holster.ogg" ; Убрать +snd_shoot = "sounds/wpn/ak74_shoot2.ogg" ; Стрелять +snd_empty = "sounds/wpn/gen_empty.ogg" ; Пустой +snd_reload = "sounds/wpn/ak74_reload.ogg" ; Перезарядка +snd_switch = "sounds/wpn/generic_close.ogg" ; Переключение режима ;прочность durability_max = 350000 diff --git a/build/gamesource/config/entities/defaults.ent b/build/gamesource/config/entities/defaults.ent index 9e849bedb..f6fc7afaf 100644 --- a/build/gamesource/config/entities/defaults.ent +++ b/build/gamesource/config/entities/defaults.ent @@ -23,7 +23,7 @@ effective_distance = 2 spread_base = 10 ;угол (в градусах) базовой дисперсии оружия (оружия, зажатого в тисках) ; звуки -snd_shoot = "mobs/zombie/zombie_attack_1.ogg" ; Стрелять +snd_shoot = "sounds/mobs/zombie/zombie_attack_1.ogg" ; Стрелять damage = 100 diff --git a/proj/SkyXEngine/vs2013/SkyXEngine.sln b/proj/SkyXEngine/vs2013/SkyXEngine.sln index ab3233bdb..c7ad64771 100644 --- a/proj/SkyXEngine/vs2013/SkyXEngine.sln +++ b/proj/SkyXEngine/vs2013/SkyXEngine.sln @@ -1,7 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 +VisualStudioVersion = 12.0.40629.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vcxproj", "{97D8EE94-0A6D-47F2-BE01-63F7C89715BC}" ProjectSection(ProjectDependencies) = postProject @@ -20,7 +20,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkyXEngine", "SkyXEngine.vc {5145958A-F75F-4F6D-9793-7384B616CF76} = {5145958A-F75F-4F6D-9793-7384B616CF76} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -72,7 +71,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxae", "..\..\sxae\vs2013\s {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -109,7 +107,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxleveleditor", "..\..\sxle {97D8EE94-0A6D-47F2-BE01-63F7C89715BC} = {97D8EE94-0A6D-47F2-BE01-63F7C89715BC} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -131,7 +128,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxmaterialeditor", "..\..\s {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -173,11 +169,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxparticles", "..\..\sxpart {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxscore", "..\..\sxscore\vs2013\sxscore.vcxproj", "{120D29B8-D2D9-4B4E-8AC6-D951973B7398}" - ProjectSection(ProjectDependencies) = postProject - {C1C1F046-C839-4602-AF70-923CDD237C1B} = {C1C1F046-C839-4602-AF70-923CDD237C1B} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgame", "..\..\sxgame\vs2013\sxgame.vcxproj", "{718C186E-9155-41DF-B8AB-74ED03E204CD}" ProjectSection(ProjectDependencies) = postProject {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} @@ -187,7 +178,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgame", "..\..\sxgame\vs20 {6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} {56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {56A8D7F7-B73C-4206-8038-83D8A169AA2F} {8144D5F8-07D0-4663-AAAE-11053614FAC5} = {8144D5F8-07D0-4663-AAAE-11053614FAC5} @@ -216,7 +206,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxparticleseditor", "..\..\ {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -260,7 +249,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxgenpreview", "..\..\sxgen {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {0C7E3DB7-005F-41E9-A570-868BCF959E91} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} @@ -337,7 +325,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xEngine", "..\..\xEngine\vs {FE640066-C8E8-41FB-AD13-89BC03BFFBFB} = {FE640066-C8E8-41FB-AD13-89BC03BFFBFB} {718C186E-9155-41DF-B8AB-74ED03E204CD} = {718C186E-9155-41DF-B8AB-74ED03E204CD} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {120D29B8-D2D9-4B4E-8AC6-D951973B7398} {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {7F0ACED1-6E16-4DD3-800E-0C50150897C2} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {AEECC2DB-C7C7-4089-9262-A69794DF834D} {8144D5F8-07D0-4663-AAAE-11053614FAC5} = {8144D5F8-07D0-4663-AAAE-11053614FAC5} @@ -524,10 +511,6 @@ Global {56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Debug|x64.ActiveCfg = Debug|x64 {56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Release|Win32.ActiveCfg = Release|Win32 {56A8D7F7-B73C-4206-8038-83D8A169AA2F}.Release|x64.ActiveCfg = Release|x64 - {120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Debug|Win32.ActiveCfg = Debug|Win32 - {120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Debug|x64.ActiveCfg = Debug|x64 - {120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Release|Win32.ActiveCfg = Release|Win32 - {120D29B8-D2D9-4B4E-8AC6-D951973B7398}.Release|x64.ActiveCfg = Release|x64 {718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|Win32.ActiveCfg = Debug|Win32 {718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|Win32.Build.0 = Debug|Win32 {718C186E-9155-41DF-B8AB-74ED03E204CD}.Debug|x64.ActiveCfg = Debug|x64 @@ -763,70 +746,69 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {74D74409-BAC7-4DD0-8C74-117516B4A01C} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {0292BE32-298E-4E18-BC42-5A39F9487EBA} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {120D29B8-D2D9-4B4E-8AC6-D951973B7398} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} - {C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {C1C1F046-C839-4602-AF70-923CDD237C1B} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} {AEECC2DB-C7C7-4089-9262-A69794DF834D} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} {3A5449A3-DCE7-4557-9C9F-DEEAFBAAC763} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {718C186E-9155-41DF-B8AB-74ED03E204CD} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {8144D5F8-07D0-4663-AAAE-11053614FAC5} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {D2386C4E-7032-487B-8EAD-951778AD6EBC} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {C1C1F046-C839-4602-AF70-923CDD237C1B} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {A1C76785-6ED9-4246-89C0-3AB0D603894F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} - {4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} - {7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} - {6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} - {349DE810-592A-42AF-9440-A0B3F46A9229} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} + {BA779DCC-93C8-4FB7-BBB9-A7D2F76C35DE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {0292BE32-298E-4E18-BC42-5A39F9487EBA} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} {6A3341BF-710B-4310-A7F8-810040D698DC} = {5128FBE9-1706-4255-B422-4A652320085E} + {709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} {AFBF200A-9260-4469-AE64-DCB42C796DD6} = {5128FBE9-1706-4255-B422-4A652320085E} {A2B9EACA-69C1-4E9D-AF3C-704608DB57DE} = {5128FBE9-1706-4255-B422-4A652320085E} {9C34362D-7FA6-4BD1-A48B-8FDE541344B0} = {5128FBE9-1706-4255-B422-4A652320085E} {CEFD4247-0B36-4268-B455-C1E826173005} = {5128FBE9-1706-4255-B422-4A652320085E} - {B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E} - {D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E} - {A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E} - {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} - {0C7E3DB7-005F-41E9-A570-868BCF959E91} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} - {709D8A7A-D3E0-4070-A493-EFDF7A8E9D73} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} - {AE74C93F-2FD3-462D-8E98-B3F3198B9104} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} - {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} + {6376944C-E417-43FD-8B56-073A310EB7D9} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} {A57B87BE-C63D-C64F-A06E-C48B4723C51A} = {6376944C-E417-43FD-8B56-073A310EB7D9} {EF2EC91D-F2A6-BD43-89AC-8054F3D5EECA} = {6376944C-E417-43FD-8B56-073A310EB7D9} {D6ECE531-C294-BC42-8C32-6F09F1240325} = {6376944C-E417-43FD-8B56-073A310EB7D9} {60A46FEB-576C-7B40-A047-D6079D9D66C4} = {6376944C-E417-43FD-8B56-073A310EB7D9} + {7C0C8205-BDD3-44A3-AA3A-7855C7EFC88E} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} {072A60D2-317A-CC41-AD12-7E381235064A} = {6376944C-E417-43FD-8B56-073A310EB7D9} {46A17C83-2972-4C41-B67F-224640089085} = {6376944C-E417-43FD-8B56-073A310EB7D9} {E74F00B5-7DC5-DC48-8E91-D1C2296F455F} = {6376944C-E417-43FD-8B56-073A310EB7D9} + {56A8D7F7-B73C-4206-8038-83D8A169AA2F} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {718C186E-9155-41DF-B8AB-74ED03E204CD} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {B9656841-7734-4D0B-8619-1BED5E2ED7AE} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {B66C63CA-62E0-472F-9D24-070CAC7C8B12} = {5128FBE9-1706-4255-B422-4A652320085E} {F2DD3789-7BC9-D241-8C8D-2179933B30DD} = {6376944C-E417-43FD-8B56-073A310EB7D9} {ED53EB62-C809-1649-A203-948AF1412B4C} = {6376944C-E417-43FD-8B56-073A310EB7D9} + {6A402480-C09B-4CBF-A6BD-115CE4BFF2D8} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {7F0ACED1-6E16-4DD3-800E-0C50150897C2} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {D381001E-C1FF-415F-A269-5264AD9013D5} = {5128FBE9-1706-4255-B422-4A652320085E} + {8AA0585B-D6E4-46B4-9183-3BACD5B9D47F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {2D039A6D-B874-4AA7-8F89-E86DD70B21ED} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {2D039A6D-B874-4AA7-8F89-E86DD70B21ED} + {8144D5F8-07D0-4663-AAAE-11053614FAC5} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {2B3BA583-D5EC-4DC2-91CF-42B1C7ADFD9D} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} + {236F4A16-78D8-42E4-86C0-30265CA2D84D} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {8C9E1225-F0B3-403E-AB88-3372E67DE173} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} {9117FCDB-957B-4FF8-8AD4-90965159B721} = {8C9E1225-F0B3-403E-AB88-3372E67DE173} {15AD3AF2-47B1-4836-9777-F1249EB299A7} = {8C9E1225-F0B3-403E-AB88-3372E67DE173} {DAFA20F5-5162-4F21-99AF-DB8084D3C557} = {8C9E1225-F0B3-403E-AB88-3372E67DE173} + {A1AC0163-A56A-416D-AFA0-19F7DFBE9F64} = {5128FBE9-1706-4255-B422-4A652320085E} + {E6B16854-D4A4-4B56-8E1C-482DD523F205} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {7C1F0E50-7A19-4AB4-B559-11EF078F4787} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} {5145958A-F75F-4F6D-9793-7384B616CF76} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} + {F0BA654B-EFF1-4F48-8ED5-4B1AA6888687} = {C3CAABF6-9239-4133-86E3-44DF79A67AF6} + {C3CAABF6-9239-4133-86E3-44DF79A67AF6} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {4408F4BE-1F9D-4861-881A-AF9869C3D663} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} + {16D78A7B-8EE9-4FD3-84C9-B71D8723E718} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {D2386C4E-7032-487B-8EAD-951778AD6EBC} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} + {74D74409-BAC7-4DD0-8C74-117516B4A01C} = {13D5622C-8643-4BD8-A730-B5C919DAFDDC} + {6FE14C5C-6052-4D96-A89F-0843D91F89AD} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} {FE640066-C8E8-41FB-AD13-89BC03BFFBFB} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} + {AE74C93F-2FD3-462D-8E98-B3F3198B9104} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} + {A1C76785-6ED9-4246-89C0-3AB0D603894F} = {74D74409-BAC7-4DD0-8C74-117516B4A01C} {602837DA-C6C8-4D51-97A1-770224A52693} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} - {3DB7AC42-6141-417D-B2E6-7D62F08A2246} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} - {1D304E26-D5EC-4AA6-B41A-2246FC359112} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} - {F0BA654B-EFF1-4F48-8ED5-4B1AA6888687} = {C3CAABF6-9239-4133-86E3-44DF79A67AF6} {02E4C411-4802-4522-A2D6-00094A4CD14B} = {602837DA-C6C8-4D51-97A1-770224A52693} {F926F7FA-099E-499C-ABC9-743BCAB919C4} = {602837DA-C6C8-4D51-97A1-770224A52693} - {8D0540EE-F8A5-44AB-8023-AD75251167E4} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} + {3DB7AC42-6141-417D-B2E6-7D62F08A2246} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} {4A77FC81-98F6-4ABF-A489-B6F427354E5B} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} + {8D0540EE-F8A5-44AB-8023-AD75251167E4} = {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} + {3B9DBCFA-CFB6-459D-BE24-2EECB2E3042C} = {4408F4BE-1F9D-4861-881A-AF9869C3D663} + {1D304E26-D5EC-4AA6-B41A-2246FC359112} = {7C1F0E50-7A19-4AB4-B559-11EF078F4787} + {349DE810-592A-42AF-9440-A0B3F46A9229} = {E6B16854-D4A4-4B56-8E1C-482DD523F205} {BE42C295-1262-4499-9CD8-7C3B0044EC3D} = {198BBFFF-2183-41F4-9453-BEB12B0C37F5} EndGlobalSection EndGlobal diff --git a/proj/sxscore/vs2013/sxscore.vcxproj b/proj/sxscore/vs2013/sxscore.vcxproj deleted file mode 100644 index 3f8af6b3a..000000000 --- a/proj/sxscore/vs2013/sxscore.vcxproj +++ /dev/null @@ -1,199 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\..\source\common\file_utils.cpp" /> - <ClCompile Include="..\..\..\source\common\string.cpp" /> - <ClCompile Include="..\..\..\source\common\string_utils.cpp" /> - <ClCompile Include="..\..\..\source\score\sound.cpp" /> - <ClCompile Include="..\..\..\source\score\sxscore.cpp" /> - <ClCompile Include="..\..\..\source\score\sxscore_dll.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\..\source\common\array.h" /> - <ClInclude Include="..\..\..\source\common\file_utils.h" /> - <ClInclude Include="..\..\..\source\common\string.h" /> - <ClInclude Include="..\..\..\source\common\string_utils.h" /> - <ClInclude Include="..\..\..\source\score\sound.h" /> - <ClInclude Include="..\..\..\source\score\sxscore.h" /> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{120D29B8-D2D9-4B4E-8AC6-D951973B7398}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>sxscore</RootNamespace> - <ProjectName>sxscore</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v120_xp</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v120_xp</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v120_xp</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v120_xp</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>../../../build/bin/</OutDir> - <TargetName>$(ProjectName)_d</TargetName> - <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath> - <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath> - <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>$(ProjectName)_d</TargetName> - <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath> - <LibraryPath>../../../libs64;$(LibraryPath);$(WindowsSDK_LibraryPath_x64);../../../sdks/dx9sdk/Lib</LibraryPath> - <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath> - <LinkIncremental>false</LinkIncremental> - <OutDir>../../../build/bin64/</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>../../../build/bin/</OutDir> - <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath> - <LibraryPath>../../../libs;$(LibraryPath);$(WindowsSDK_LibraryPath_x86);../../../sdks/dx9sdk/Lib</LibraryPath> - <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <IncludePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</IncludePath> - <LibraryPath>../../../libs64;$(LibraryPath);$(WindowsSDK_LibraryPath_x64);../../../sdks/dx9sdk/Lib</LibraryPath> - <SourcePath>../../../sdks/ogg/libogg/include/;../../../sdks/ogg/libvorbis/include/;../../../source;$(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdks/dx9sdk/Include</SourcePath> - <LinkIncremental>false</LinkIncremental> - <OutDir>../../../build/bin64/</OutDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ProgramDatabaseFile>$(ProjectDir)../../../pdb/$(TargetName).pdb</ProgramDatabaseFile> - <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary> - <Profile>true</Profile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ProgramDatabaseFile>$(ProjectDir)../../../pdb64/$(TargetName).pdb</ProgramDatabaseFile> - <ImportLibrary>../../../libs64/$(TargetName).lib</ImportLibrary> - <Profile>true</Profile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level1</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <ProgramDatabaseFile>$(ProjectDir)../../../pdb/$(TargetName).pdb</ProgramDatabaseFile> - <ImportLibrary>../../../libs/$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level1</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN64;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;SXSCORE_EXPORTS;SX_DLL;%(PreprocessorDefinitions);SX_LIB_NAME="SCORE"</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <TreatSpecificWarningsAsErrors>4316</TreatSpecificWarningsAsErrors> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <ProgramDatabaseFile>$(ProjectDir)../../../pdb64/$(TargetName).pdb</ProgramDatabaseFile> - <ImportLibrary>../../../libs64/$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file diff --git a/proj/sxscore/vs2013/sxscore.vcxproj.filters b/proj/sxscore/vs2013/sxscore.vcxproj.filters deleted file mode 100644 index 86412f4c9..000000000 --- a/proj/sxscore/vs2013/sxscore.vcxproj.filters +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\..\source\score\sxscore_dll.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\..\source\score\sxscore.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\..\source\score\sound.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\..\source\common\string.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\..\source\common\file_utils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\..\source\common\string_utils.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\..\source\score\sxscore.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\..\source\score\sound.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\..\source\common\array.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\..\source\common\string.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\..\source\common\file_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\..\source\common\string_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> -</Project> \ No newline at end of file diff --git a/source/game/BaseEntity.h b/source/game/BaseEntity.h index a218a3603..3d5bd7580 100644 --- a/source/game/BaseEntity.h +++ b/source/game/BaseEntity.h @@ -22,7 +22,7 @@ See the license in LICENSE #include <common/Math.h> #include <core/sxcore.h> #include <physics/sxphysics.h> -#include <score/sxscore.h> +#include <xcommon/IXSoundSystem.h> #include "EntityFactory.h" #include "EntityManager.h" diff --git a/source/game/BaseTool.cpp b/source/game/BaseTool.cpp index 708d1a287..9bfb41ebf 100644 --- a/source/game/BaseTool.cpp +++ b/source/game/BaseTool.cpp @@ -94,8 +94,6 @@ CBaseTool::CBaseTool(CEntityManager * pMgr): m_fZoomTime(0.0f), m_fReloadTime(0.0f), m_iZoomable(1), - m_iSoundAction1(-1), - m_iSoundAction2(-1), m_iMuzzleFlash(-1), m_iMuzzleFlash2(-1), m_fMaxDistance(1000.0f), @@ -110,27 +108,36 @@ CBaseTool::CBaseTool(CEntityManager * pMgr): CBaseTool::~CBaseTool() { CLEAR_INTERVAL(m_iIvalUpdate); + + mem_release(m_pSoundAction1); + mem_release(m_pSoundAction2); } void CBaseTool::onPostLoad() { BaseClass::onPostLoad(); - if(m_szPrimaryActionSound[0]) - { - m_iSoundAction1 = SSCore_SndCreate3dInst(m_szPrimaryActionSound, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSecondaryActionSound[0]) - { - m_iSoundAction2 = SSCore_SndCreate3dInst(m_szSecondaryActionSound, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szPrimaryActionMuzzleflash[0]) + IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID)); + if(pSound) { - m_iMuzzleFlash = SPE_EffectInstanceByName(m_szPrimaryActionMuzzleflash); - } - if(m_szSecondaryActionMuzzleflash[0]) - { - m_iMuzzleFlash2 = SPE_EffectInstanceByName(m_szSecondaryActionMuzzleflash); + IXSoundLayer *pGameLayer = pSound->findLayer("xGame"); + + if(m_szPrimaryActionSound[0]) + { + m_pSoundAction1 = pGameLayer->newSoundEmitter(m_szPrimaryActionSound, SOUND_SPACE_3D); + } + if(m_szSecondaryActionSound[0]) + { + m_pSoundAction2 = pGameLayer->newSoundEmitter(m_szSecondaryActionSound, SOUND_SPACE_3D); + } + if(m_szPrimaryActionMuzzleflash[0]) + { + m_iMuzzleFlash = SPE_EffectInstanceByName(m_szPrimaryActionMuzzleflash); + } + if(m_szSecondaryActionMuzzleflash[0]) + { + m_iMuzzleFlash2 = SPE_EffectInstanceByName(m_szSecondaryActionMuzzleflash); + } } } @@ -154,10 +161,8 @@ void CBaseTool::primaryAction(BOOL st) { SPE_EffectSetEnable(m_iMuzzleFlash, true); } - if(ID_VALID(m_iSoundAction1)) - { - SSCore_SndInstancePlay3d(m_iSoundAction1, false, false, &getPos()); - } + SAFE_CALL(m_pSoundAction1, setWorldPos, getPos()); + SAFE_CALL(m_pSoundAction1, play); //((CPlayer*)m_pOwner)->is diff --git a/source/game/BaseTool.h b/source/game/BaseTool.h index a1b51ff61..144911221 100644 --- a/source/game/BaseTool.h +++ b/source/game/BaseTool.h @@ -121,8 +121,8 @@ protected: ID m_iMuzzleFlash; ID m_iMuzzleFlash2; - ID m_iSoundAction1; - ID m_iSoundAction2; + IXSoundEmitter *m_pSoundAction1 = NULL; + IXSoundEmitter *m_pSoundAction2 = NULL; const char * m_szPrimaryActionSound; const char * m_szSecondaryActionSound; diff --git a/source/game/BaseWeapon.cpp b/source/game/BaseWeapon.cpp index 2af4c1c19..48e6217cf 100644 --- a/source/game/BaseWeapon.cpp +++ b/source/game/BaseWeapon.cpp @@ -104,14 +104,7 @@ CBaseWeapon::CBaseWeapon(CEntityManager * pMgr): m_pMag(NULL), m_fireMode(FIRE_MODE_SINGLE), m_iFireModes(0), - - m_idSndDraw(-1), - m_idSndHolster(-1), - m_idSndShoot(-1), - m_idSndEmpty(-1), - m_idSndReload(-1), - m_idSndSwitch(-1), - + m_iCapacity(1), m_iCurrentLoad(0), @@ -131,33 +124,49 @@ CBaseWeapon::CBaseWeapon(CEntityManager * pMgr): m_bIsWeapon = true; } +CBaseWeapon::~CBaseWeapon() +{ + mem_release(m_pSndDraw); + mem_release(m_pSndHolster); + mem_release(m_pSndShoot); + mem_release(m_pSndEmpty); + mem_release(m_pSndReload); + mem_release(m_pSndSwitch); +} + void CBaseWeapon::onPostLoad() { BaseClass::onPostLoad(); - if(m_szSndDraw[0]) - { - m_idSndDraw = SSCore_SndCreate3dInst(m_szSndDraw, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndHolster[0]) - { - m_idSndHolster = SSCore_SndCreate3dInst(m_szSndHolster, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndShoot[0]) + IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID)); + if(pSound) { - m_idSndShoot = SSCore_SndCreate3dInst(m_szSndShoot, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndEmpty[0]) - { - m_idSndEmpty = SSCore_SndCreate3dInst(m_szSndEmpty, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndReload[0]) - { - m_idSndReload = SSCore_SndCreate3dInst(m_szSndReload, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndSwitch[0]) - { - m_idSndSwitch = SSCore_SndCreate3dInst(m_szSndSwitch, SX_SOUND_CHANNEL_GAME, 100); + IXSoundLayer *pGameLayer = pSound->findLayer("xGame"); + + if(m_szSndDraw[0]) + { + m_pSndDraw = pGameLayer->newSoundPlayer(m_szSndDraw, SOUND_SPACE_3D); + } + if(m_szSndHolster[0]) + { + m_pSndHolster = pGameLayer->newSoundPlayer(m_szSndHolster, SOUND_SPACE_3D); + } + if(m_szSndShoot[0]) + { + m_pSndShoot = pGameLayer->newSoundEmitter(m_szSndShoot, SOUND_SPACE_3D); + } + if(m_szSndEmpty[0]) + { + m_pSndEmpty = pGameLayer->newSoundPlayer(m_szSndEmpty, SOUND_SPACE_3D); + } + if(m_szSndReload[0]) + { + m_pSndReload = pGameLayer->newSoundPlayer(m_szSndReload, SOUND_SPACE_3D); + } + if(m_szSndSwitch[0]) + { + m_pSndSwitch = pGameLayer->newSoundPlayer(m_szSndSwitch, SOUND_SPACE_3D); + } } } @@ -292,10 +301,8 @@ void CBaseWeapon::reload() } else { - if(ID_VALID(m_idSndReload)) - { - SSCore_SndInstancePlay3d(m_idSndReload, false, false, &getPos()); - } + SAFE_CALL(m_pSndReload, setWorldPos, getPos()); + SAFE_CALL(m_pSndReload, play); } CHUDcontroller * pHUD = ((CBaseCharacter*)getOwner())->getHUDcontroller(); @@ -318,10 +325,8 @@ void CBaseWeapon::setFireMode(FIRE_MODE mode) if((m_iFireModes & mode) && canUse()) { m_fireMode = mode; - if(ID_VALID(m_idSndSwitch)) - { - SSCore_SndInstancePlay3d(m_idSndSwitch, false, false, &getPos()); - } + SAFE_CALL(m_pSndSwitch, setWorldPos, getPos()); + SAFE_CALL(m_pSndSwitch, play); } } @@ -450,10 +455,9 @@ void CBaseWeapon::taskShoot(float dt) } else { - if(ID_VALID(m_idSndEmpty)) - { - SSCore_SndInstancePlay3d(m_idSndEmpty, false, false, &getPos()); - } + SAFE_CALL(m_pSndEmpty, setWorldPos, getPos()); + SAFE_CALL(m_pSndEmpty, play); + if(ID_VALID(m_idTaskShoot)) { CLEAR_INTERVAL(m_idTaskShoot); @@ -468,10 +472,8 @@ void CBaseWeapon::taskShoot(float dt) { SPE_EffectSetEnable(m_iMuzzleFlash, true); } - if(ID_VALID(m_idSndShoot)) - { - SSCore_SndInstancePlay3d(m_idSndShoot, false, false, &getPos()); - } + SAFE_CALL(m_pSndShoot, setWorldPos, getPos()); + SAFE_CALL(m_pSndShoot, play); //((CPlayer*)m_pOwner)->is diff --git a/source/game/BaseWeapon.h b/source/game/BaseWeapon.h index 362f076db..fbd1dcc3b 100644 --- a/source/game/BaseWeapon.h +++ b/source/game/BaseWeapon.h @@ -62,6 +62,7 @@ class CBaseWeapon: public CBaseTool DECLARE_PROPTABLE(); public: DECLARE_CONSTRUCTOR(); + ~CBaseWeapon(); virtual void onPostLoad(); virtual void primaryAction(BOOL st); @@ -129,19 +130,19 @@ protected: int m_iCutoffCurrent; // Sounds - const char * m_szSndDraw; - const char * m_szSndHolster; - const char * m_szSndShoot; - const char * m_szSndEmpty; - const char * m_szSndReload; - const char * m_szSndSwitch; - - ID m_idSndDraw; - ID m_idSndHolster; - ID m_idSndShoot; - ID m_idSndEmpty; - ID m_idSndReload; - ID m_idSndSwitch; + const char *m_szSndDraw; + const char *m_szSndHolster; + const char *m_szSndShoot; + const char *m_szSndEmpty; + const char *m_szSndReload; + const char *m_szSndSwitch; + + IXSoundPlayer *m_pSndDraw = NULL; + IXSoundPlayer *m_pSndHolster = NULL; + IXSoundEmitter *m_pSndShoot = NULL; + IXSoundPlayer *m_pSndEmpty = NULL; + IXSoundPlayer *m_pSndReload = NULL; + IXSoundPlayer *m_pSndSwitch = NULL; // Shooting float m_fEffectiveDistance; diff --git a/source/game/GameData.cpp b/source/game/GameData.cpp index 3d9cf94a9..a8d93d1db 100644 --- a/source/game/GameData.cpp +++ b/source/game/GameData.cpp @@ -9,7 +9,6 @@ See the license in LICENSE //#include "Ragdoll.h" -#include <score/sxscore.h> #include <input/sxinput.h> #include "Tracer.h" diff --git a/source/game/GameStates.cpp b/source/game/GameStates.cpp index 993ab09c5..49f53eaf6 100644 --- a/source/game/GameStates.cpp +++ b/source/game/GameStates.cpp @@ -3,7 +3,6 @@ #include "GameData.h" #include "Baseline.h" -#include <score/sxscore.h> #include <input/sxinput.h> #include "Editable.h" @@ -125,16 +124,13 @@ void CIngameGameState::activate() ID idTimerRender = Core_RIntGet(G_RI_INT_TIMER_GAME); Core_TimeWorkingSet(idTimerRender, true); - SSCore_ChannelPlay(SX_SOUND_CHANNEL_GAME); +// SSCore_ChannelPlay(SX_SOUND_CHANNEL_GAME); SSInput_SetEnable(true); SPhysics_EnableSimulation(); Core_0ConsoleExecCmd("game_time_running 1"); - if(GameData::m_pGameLayer) - { - GameData::m_pGameLayer->play(true); - } + SAFE_CALL(GameData::m_pGameLayer, play, true); } void CIngameGameState::deactivate() @@ -146,14 +142,11 @@ void CIngameGameState::deactivate() ID idTimerRender = Core_RIntGet(G_RI_INT_TIMER_GAME); Core_TimeWorkingSet(idTimerRender, false); - SSCore_ChannelStop(SX_SOUND_CHANNEL_GAME); +// SSCore_ChannelStop(SX_SOUND_CHANNEL_GAME); SSInput_SetEnable(false); SPhysics_DisableSimulation(); - if(GameData::m_pGameLayer) - { - GameData::m_pGameLayer->play(false); - } + SAFE_CALL(GameData::m_pGameLayer, play, false); if(*dev_reset_world_on_run) { diff --git a/source/game/NPCZombie.cpp b/source/game/NPCZombie.cpp index 95ea45e22..a021c3732 100644 --- a/source/game/NPCZombie.cpp +++ b/source/game/NPCZombie.cpp @@ -5,7 +5,6 @@ See the license in LICENSE ***********************************************************/ #include "NPCZombie.h" -#include "score/sxscore.h" #include "GameData.h" #include "BaseTool.h" @@ -33,10 +32,14 @@ CNPCZombie::CNPCZombie(CEntityManager * pMgr) : { //m_fSpeedWalk = 0.07f; //m_fSpeedRun = 0.12f; - - m_idSndIdle = SSCore_SndCreate3d("mobs/zombie/zombie_idle_16.ogg", SX_SOUND_CHANNEL_GAME, 0, 30); - m_idSndIdle2 = SSCore_SndCreate3d("mobs/zombie/zombie_idle_17.ogg", SX_SOUND_CHANNEL_GAME, 0, 30); - m_idSndDeath = SSCore_SndCreate3d("mobs/zombie/zombie_die_1.ogg", SX_SOUND_CHANNEL_GAME, 0, 45); + IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID)); + if(pSound) + { + IXSoundLayer *pGameLayer = pSound->findLayer("xGame"); + m_pSndIdle = pGameLayer->newSoundPlayer("mobs/zombie/zombie_idle_16.ogg", SOUND_SPACE_3D); + m_pSndIdle2 = pGameLayer->newSoundPlayer("mobs/zombie/zombie_idle_17.ogg", SOUND_SPACE_3D); + m_pSndDeath = pGameLayer->newSoundPlayer("mobs/zombie/zombie_die_1.ogg", SOUND_SPACE_3D); + } m_pActiveTool = (CBaseTool*)CREATE_ENTITY("wpn_zombie_hands", m_pMgr); m_pActiveTool->setOwner(this); @@ -50,11 +53,15 @@ CNPCZombie::CNPCZombie(CEntityManager * pMgr) : CNPCZombie::~CNPCZombie() { REMOVE_ENTITY(m_pActiveTool); + + mem_release(m_pSndIdle); + mem_release(m_pSndIdle2); + mem_release(m_pSndDeath); } void CNPCZombie::onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor) { - SSCore_SndPlay(m_idSndDeath); + SAFE_CALL(m_pSndDeath, play); BaseClass::onDeath(pAttacker, pInflictor); @@ -67,9 +74,9 @@ void CNPCZombie::onSync() { BaseClass::onSync(); - SSCore_SndSetPosWorld(m_idSndIdle, &getPos()); - SSCore_SndSetPosWorld(m_idSndIdle2, &getPos()); - SSCore_SndSetPosWorld(m_idSndDeath, &getPos()); + SAFE_CALL(m_pSndIdle, setWorldPos, getPos()); + SAFE_CALL(m_pSndIdle2, setWorldPos, getPos()); + SAFE_CALL(m_pSndDeath, setWorldPos, getPos()); } void CNPCZombie::rotateThink(float dt) diff --git a/source/game/NPCZombie.h b/source/game/NPCZombie.h index f113766d7..42b26a47a 100644 --- a/source/game/NPCZombie.h +++ b/source/game/NPCZombie.h @@ -53,9 +53,9 @@ protected: //virtual void initPhysics(); void randWalk(); - ID m_idSndIdle; - ID m_idSndIdle2; - ID m_idSndDeath; + IXSoundPlayer *m_pSndIdle = NULL; + IXSoundPlayer *m_pSndIdle2 = NULL; + IXSoundPlayer *m_pSndDeath = NULL; NPC_STATE_DANGER m_stateDanger; float3_t m_vLastDangerPos; diff --git a/source/game/PropBreakable.cpp b/source/game/PropBreakable.cpp index 16ea3986b..5334f3b5f 100644 --- a/source/game/PropBreakable.cpp +++ b/source/game/PropBreakable.cpp @@ -29,13 +29,23 @@ END_PROPTABLE() REGISTER_ENTITY(CPropBreakable, prop_breakable); +CPropBreakable::~CPropBreakable() +{ + mem_release(m_pSndBreak); +} + void CPropBreakable::onPostLoad() { BaseClass::onPostLoad(); - if(m_szSndBreak[0]) + IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID)); + if(pSound) { - m_idSndBreak = SSCore_SndCreate3dInst(m_szSndBreak, SX_SOUND_CHANNEL_GAME, 100); + IXSoundLayer *pGameLayer = pSound->findLayer("xGame"); + if(m_szSndBreak[0]) + { + m_pSndBreak = pGameLayer->newSoundPlayer(m_szSndBreak, SOUND_SPACE_3D); + } } } @@ -47,10 +57,10 @@ void CPropBreakable::breakInput(inputdata_t * pInputdata) void CPropBreakable::onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor) { FIRE_OUTPUT(m_onBroken, pInflictor); - if(ID_VALID(m_idSndBreak)) - { - SSCore_SndInstancePlay3d(m_idSndBreak, false, false, &getPos()); - } + + SAFE_CALL(m_pSndBreak, setWorldPos, getPos()); + SAFE_CALL(m_pSndBreak, play); + if(m_szModelFile) { int len = (int)strlen(m_szModelFile); diff --git a/source/game/PropBreakable.h b/source/game/PropBreakable.h index 21e43d845..5209a0c52 100644 --- a/source/game/PropBreakable.h +++ b/source/game/PropBreakable.h @@ -1,12 +1,12 @@ /*********************************************************** -Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 See the license in LICENSE ***********************************************************/ /*! \file -���������� ������ +Разбиваемй объект */ #ifndef __PROP_BREAKABLE_H @@ -14,7 +14,7 @@ See the license in LICENSE #include "PropDynamic.h" -/*! ����������� ������ +/*! Разбиваемый объект \ingroup cbaseanimating */ class CPropBreakable: public CPropDynamic @@ -23,6 +23,7 @@ class CPropBreakable: public CPropDynamic DECLARE_PROPTABLE(); public: DECLARE_TRIVIAL_CONSTRUCTOR(); + ~CPropBreakable(); virtual void onPostLoad(); void onDeath(CBaseEntity *pAttacker, CBaseEntity *pInflictor); @@ -32,7 +33,7 @@ protected: output_t m_onBroken; const char * m_szSndBreak; - ID m_idSndBreak = -1; + IXSoundPlayer *m_pSndBreak = NULL; }; #endif diff --git a/source/game/PropDoor.cpp b/source/game/PropDoor.cpp index 47aaffa68..e07700ea4 100644 --- a/source/game/PropDoor.cpp +++ b/source/game/PropDoor.cpp @@ -75,6 +75,10 @@ CPropDoor::CPropDoor(CEntityManager *pMgr):BaseClass(pMgr) CPropDoor::~CPropDoor() { releasePhysics(); + + mem_release(m_pSndClose); + mem_release(m_pSndOpen); + mem_release(m_pSndLocked); } void CPropDoor::onPostLoad() @@ -84,17 +88,23 @@ void CPropDoor::onPostLoad() BaseClass::onPostLoad(); - if(m_szSndClose[0]) - { - m_idSndClose = SSCore_SndCreate3dInst(m_szSndClose, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndOpen[0]) + IXSoundSystem *pSound = (IXSoundSystem*)(Core_GetIXCore()->getPluginManager()->getInterface(IXSOUNDSYSTEM_GUID)); + if(pSound) { - m_idSndOpen = SSCore_SndCreate3dInst(m_szSndOpen, SX_SOUND_CHANNEL_GAME, 100); - } - if(m_szSndLocked[0]) - { - m_idSndLocked = SSCore_SndCreate3dInst(m_szSndLocked, SX_SOUND_CHANNEL_GAME, 100); + IXSoundLayer *pGameLayer = pSound->findLayer("xGame"); + + if(m_szSndClose[0]) + { + m_pSndClose = pGameLayer->newSoundPlayer(m_szSndClose, SOUND_SPACE_3D); + } + if(m_szSndOpen[0]) + { + m_pSndOpen = pGameLayer->newSoundPlayer(m_szSndOpen, SOUND_SPACE_3D); + } + if(m_szSndLocked[0]) + { + m_pSndLocked = pGameLayer->newSoundPlayer(m_szSndLocked, SOUND_SPACE_3D); + } } } @@ -103,10 +113,9 @@ void CPropDoor::inputOpen(inputdata_t * pInputdata) if(m_isLocked) { FIRE_OUTPUT(m_onUseLocked, pInputdata->pInflictor); - if(ID_VALID(m_idSndLocked)) - { - SSCore_SndInstancePlay3d(m_idSndLocked, false, false, &getPos()); - } + + SAFE_CALL(m_pSndLocked, setWorldPos, getPos()); + SAFE_CALL(m_pSndLocked, play); return; } if(m_bState) @@ -121,10 +130,9 @@ void CPropDoor::inputOpen(inputdata_t * pInputdata) m_pInflictor = pInputdata->pInflictor; FIRE_OUTPUT(m_onOpen, pInputdata->pInflictor); - if(ID_VALID(m_idSndOpen)) - { - SSCore_SndInstancePlay3d(m_idSndOpen, false, false, &getPos()); - } + + SAFE_CALL(m_pSndOpen, setWorldPos, getPos()); + SAFE_CALL(m_pSndOpen, play); m_isOpening = true; m_idThinkInterval = SET_INTERVAL(think, 0); @@ -134,10 +142,9 @@ void CPropDoor::inputClose(inputdata_t * pInputdata) if(m_isLocked) { FIRE_OUTPUT(m_onUseLocked, pInputdata->pInflictor); - if(ID_VALID(m_idSndLocked)) - { - SSCore_SndInstancePlay3d(m_idSndLocked, false, false, &getPos()); - } + + SAFE_CALL(m_pSndLocked, setWorldPos, getPos()); + SAFE_CALL(m_pSndLocked, play); return; } if(!m_bState) @@ -158,10 +165,9 @@ void CPropDoor::inputClose(inputdata_t * pInputdata) m_pInflictor = pInputdata->pInflictor; FIRE_OUTPUT(m_onClose, pInputdata->pInflictor); - if(ID_VALID(m_idSndClose)) - { - SSCore_SndInstancePlay3d(m_idSndClose, false, false, &getPos()); - } + + SAFE_CALL(m_pSndClose, setWorldPos, getPos()); + SAFE_CALL(m_pSndClose, play); m_isClosing = true; m_idThinkInterval = SET_INTERVAL(think, 0); diff --git a/source/game/PropDoor.h b/source/game/PropDoor.h index 959d7dda4..28ce7e953 100644 --- a/source/game/PropDoor.h +++ b/source/game/PropDoor.h @@ -1,12 +1,12 @@ /*********************************************************** -Copyright � Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 +Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 See the license in LICENSE ***********************************************************/ /*! \file -����� +Дверь */ #ifndef __PROP_DOOR_H @@ -20,12 +20,12 @@ See the license in LICENSE #define DOOR_AUTOCLOSE ENT_FLAG_3 #define DOOR_FORCE ENT_FLAG_4 -//! ������� ����������� ��� ����� +//! базовое направление для двери #define DOOR_BASE_DIR float3(0, 0, -1.0f) #define DOOR_MAX_PENETRATION_DEPTH 0.16f -/*! ����� +/*! Дверь \ingroup cbaseanimating */ class CPropDoor: public CPropDynamic @@ -39,7 +39,7 @@ public: void onUse(CBaseEntity *pUser); - //! ������������� ��������� � ���� + //! Устанавливает положение в мире void setPos(const float3 & pos); protected: @@ -74,11 +74,11 @@ protected: float m_fBlockDamage = 100.0f; const char * m_szSndClose; - ID m_idSndClose = -1; + IXSoundPlayer *m_pSndClose = NULL; const char * m_szSndOpen; - ID m_idSndOpen = -1; + IXSoundPlayer *m_pSndOpen = NULL; const char * m_szSndLocked; - ID m_idSndLocked = -1; + IXSoundPlayer *m_pSndLocked = NULL; bool m_isLocked = false; diff --git a/source/game/SoundPlayer.h b/source/game/SoundPlayer.h index 0fbea81ce..550095ee1 100644 --- a/source/game/SoundPlayer.h +++ b/source/game/SoundPlayer.h @@ -12,7 +12,6 @@ See the license in LICENSE #define __SOUND_PLAYER_H #include "PointEntity.h" -#include <xcommon/IXSoundSystem.h> //########################################################################## diff --git a/source/game/ZombieHands.cpp b/source/game/ZombieHands.cpp index 1d13869ba..40f43f633 100644 --- a/source/game/ZombieHands.cpp +++ b/source/game/ZombieHands.cpp @@ -5,11 +5,11 @@ #include "Tracer.h" /*! \skydocent wpn_zombie_hands -���� ����� +Руки зомби */ BEGIN_PROPTABLE(CZombieHands) - //! ��������� ���� + //! Наносимый урон DEFINE_FIELD_FLOAT(m_fDamage, PDFF_NOEDIT | PDFF_NOEXPORT, "damage", "", EDITOR_NONE) END_PROPTABLE() @@ -49,10 +49,8 @@ void CZombieHands::taskShoot(float dt) pOwner->playActivity("ACT_SHOOT", 200); pOwner->playActivityNext("ACT_IDLE", 200); - if(ID_VALID(m_idSndShoot)) - { - SSCore_SndInstancePlay3d(m_idSndShoot, false, false, &getPos()); - } + SAFE_CALL(m_pSndShoot, setWorldPos, getPos()); + SAFE_CALL(m_pSndShoot, play); m_idActualShootTimeout = SET_TIMEOUT(actualShoot, 0.6f); } diff --git a/source/game/proptable.cpp b/source/game/proptable.cpp index a90a51a65..c203467d4 100644 --- a/source/game/proptable.cpp +++ b/source/game/proptable.cpp @@ -94,6 +94,7 @@ void output_t::fire(CBaseEntity *pInflictor, CBaseEntity *pActivator, inputdata_ data.pInflictor = pInflictor; for(int i = 0; i < iOutCount; ++i) { + data.type = PDF_NONE; if(pOutputs[i].fDelay == 0.0f && !pOutputs[i].useRandomDelay) { for(int j = 0; j < pOutputs[i].iOutCount; ++j) diff --git a/source/gdefines.h b/source/gdefines.h index f0dc5fd81..1bac62753 100644 --- a/source/gdefines.h +++ b/source/gdefines.h @@ -133,6 +133,8 @@ struct IBaseObject #define ID_VALID(id) ((id) >= 0) +#define SAFE_CALL(obj, fn, ...) if(obj){obj->fn(__VA_ARGS__);} + #ifndef IFACEBASEOBJECT #define IFACEBASEOBJECT diff --git a/source/score/CallBackOgg.cpp b/source/score/CallBackOgg.cpp deleted file mode 100644 index da236f7fa..000000000 --- a/source/score/CallBackOgg.cpp +++ /dev/null @@ -1,43 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -#pragma once - -//чтение файла -size_t read_ogg(void *ptr, size_t size, size_t nmemb, void *datasource) -{ - FILE* f = (FILE*)datasource; - return fread(ptr, 1, size * nmemb, f); -} - -//закртытие файла -int close_ogg(void* datasource) -{ - FILE* f = (FILE*) datasource; - fclose(f); - return 0; -} - -//позиционирование -int seek_ogg(void *datasource, ogg_int64_t offset, int whence) -{ - FILE* f = (FILE*)datasource; - switch (whence) - { - case SEEK_SET: return fseek(f, offset, SEEK_SET); break; - case SEEK_CUR: return fseek(f, offset, SEEK_CUR); break; - case SEEK_END: return fseek(f, offset, SEEK_END); break; - default: return -1; - } - return 1; -} - -//размер файла -long tell_ogg(void* datasource) -{ - FILE* f = (FILE*)datasource; - return ftell(f); -} diff --git a/source/score/sound.cpp b/source/score/sound.cpp deleted file mode 100644 index 14c8c1446..000000000 --- a/source/score/sound.cpp +++ /dev/null @@ -1,1805 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -#include "sound.h" - -//############################################################################ - -size_t OggCallbackRead(void *ptr, size_t size, size_t nmemb, void *datasource) -{ - FILE* f = (FILE*)datasource; - return fread(ptr, 1, size * nmemb, f); -} - -int OggCallbackClose(void* datasource) -{ - FILE* f = (FILE*)datasource; - fclose(f); - return 0; -} - -int OggCallbackSeek(void *datasource, ogg_int64_t offset, int whence) -{ - FILE* f = (FILE*)datasource; - switch (whence) - { - case SEEK_SET: return fseek(f, offset, SEEK_SET); - case SEEK_CUR: return fseek(f, offset, SEEK_CUR); - case SEEK_END: return fseek(f, offset, SEEK_END); - default: return -1; - } - return 1; -} - -long OggCallbackTell(void* datasource) -{ - FILE* f = (FILE*)datasource; - return ftell(f); -} - -//############################################################################ - -CSoundManager::CSoundManager() -{ - m_pDeviceSound = 0; - m_pPrimaryBuffer = 0; - - for (int i = 0; i < SOUND_CHANNELS_COUNT; ++i) - m_aChannels[i] = SOUND_CHANNEL_NONE; -} - -CSoundManager::~CSoundManager() -{ - clear(); - mem_release_del(m_pPrimaryBuffer); - mem_release_del(m_pDeviceSound); -} - -void CSoundManager::clear() -{ - for(UINT i = 0; i < m_aSounds.size(); ++i) - { - mem_delete(m_aSounds[i]); - } -} - -CSoundManager::CSound::CSound() -{ - ZeroMemory(this, sizeof(CSoundManager::CSound)); - m_id = SOUND_FAIL_ID; - m_fVolume = 1.f; -} - -CSoundManager::CSound::~CSound() -{ - if (m_pStream) - fclose(m_pStream); - - //mem_release_del(m_pSoundBuffer); - if (m_pVorbisFile) - { - ov_clear(m_pVorbisFile); - mem_delete(m_pVorbisFile); - } -} - -//########################################################################## - -CSoundManager::СSoundKit::СSoundKit() -{ - m_szName[0] = 0; - m_idChannel = SOUND_FAIL_ID; - m_is3D = false; - m_fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT; -} - -CSoundManager::СSoundKit::~СSoundKit() -{ - -} - -ID CSoundManager::sndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible) -{ - // список звуков подлежащаих загрузке - СSoundKit *pSndKit = new СSoundKit(); - pSndKit->m_idChannel = idChannel; - pSndKit->m_is3D = is3D; - pSndKit->m_fDistAudible = fDistAudible; - sprintf(pSndKit->m_szName, "%s", szName); - - m_aSoundKits.push_back(pSndKit); - - return m_aSoundKits.size() - 1; -} - -ID CSoundManager::sndkitCreateFromList(const char *szName, ID idChannel, Array<String> aStrings, bool is3D, float fDistAudible, float fVolume) -{ - СSoundKit *pSndKit = new СSoundKit(); - pSndKit->m_idChannel = idChannel; - pSndKit->m_is3D = is3D; - pSndKit->m_fDistAudible = fDistAudible; - sprintf(pSndKit->m_szName, "%s", szName); - m_aSoundKits.push_back(pSndKit); - ID idSndKit = m_aSoundKits.size() - 1; - - String sFileData; - float fDistAudibleData = -2.f; - float fVolumeData = -2.f; - Array<UINT> aDelaysData; - - for (int i = 0, il = aStrings.size(); i < il; ++i) - { - aDelaysData.clearFast(); - fDistAudibleData = -2.f; - fVolumeData = -2.f; - - if (SndGetDataFromStr(aStrings[i].c_str(), sFileData, fDistAudibleData, fVolumeData, aDelaysData)) - { - if (fDistAudibleData == -2.f) - fDistAudibleData = -1.f; - - if (fVolumeData == -2.f) - fVolumeData = fVolume; - - sndkitAddSound(idSndKit, sFileData.c_str(), fDistAudibleData, fVolumeData, (aDelaysData.size() > 0 ? &(aDelaysData[0]) : 0), aDelaysData.size()); - } - else - sndkitAddSound(idSndKit, StrTrim(aStrings[i].c_str()).c_str(), pSndKit->m_fDistAudible, fVolume); - } - - return idSndKit; -} - -void CSoundManager::sndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume, UINT *pArrDelay, int iSizeArrDelay) -{ - SOUND_SNDKIT_PRECOND(idSndKit, _VOID); - - СSoundKit *pSndKit = m_aSoundKits[idSndKit]; - - ID idSnd = SOUND_FAIL_ID; - - if (pSndKit->m_is3D) - idSnd = soundCreate3dInst(szFile, pSndKit->m_idChannel, (fDistAudible > 0 ? fDistAudible : pSndKit->m_fDistAudible)); - else - idSnd = soundCreate2dInst(szFile, pSndKit->m_idChannel); - - СSoundKit::CSoundKitObject oSndKitObj; - oSndKitObj.m_id = idSnd; - oSndKitObj.m_fVolume = fVolume; - - for (int i = 0, il = iSizeArrDelay; i < il; ++i) - { - oSndKitObj.m_aDelays.push_back(pArrDelay[i]); - } - - pSndKit->m_aSounds.push_back(oSndKitObj); -} - - -ID CSoundManager::sndkitGetID(const char *szName) -{ - for (int i = 0, il = m_aSoundKits.size(); i < il; ++i) - { - if (stricmp(m_aSoundKits[i]->m_szName, szName) == 0) - return i; - } - - return SOUND_FAIL_ID; -} - -ID CSoundManager::sndkitGetChannel(ID idSndKit) -{ - SOUND_SNDKIT_PRECOND(idSndKit, SOUND_FAIL_ID); - - return m_aSoundKits[idSndKit]->m_idChannel; -} - - -void CSoundManager::sndkitGetName(ID idSndKit, char *szName) -{ - SOUND_SNDKIT_PRECOND(idSndKit, _VOID); - - strcpy(szName, m_aSoundKits[idSndKit]->m_szName); -} - - -void CSoundManager::sndkitDelete(ID idSndKit) -{ - SOUND_SNDKIT_PRECOND(idSndKit, _VOID); - - СSoundKit *pSndKit = m_aSoundKits[idSndKit]; - - for (int i = 0, il = pSndKit->m_aSounds.size(); i < il; ++i) - { - soundDelete(pSndKit->m_aSounds[i].m_id); - } - - mem_delete(m_aSoundKits[idSndKit]); -} - - -void CSoundManager::sndkitDeleteAll() -{ - for (int i = 0, il = m_aSoundKits.size(); i < il; ++i) - { - sndkitDelete(i); - } -} - - -uint64_t CSoundManager::sndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos, float fVolume, float fPan) -{ - SOUND_SNDKIT_PRECOND(idSndKit, SOUND_FAIL_ID); - - СSoundKit *pSndKit = m_aSoundKits[idSndKit]; - - // если канал проигрывается - SOUND_CHANNEL_PLAYING(pSndKit->m_idChannel, ((id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK) ? id2 : SOUND_FAIL_ID)); - - // если id2 валиден и инстанс проигрывается - if ((id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK) && soundInstancePlaying(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2))) - return id2; - - // если id2 валиден то освобождаем инстанс - if (id2 != SOUND_SNDKIT_INSTANCE_BLOCK && id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK) - soundInstanceFree(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2)); - - ID idRand = rand() % (pSndKit->m_aSounds.size()); - ID idSndInstance = -1; - - UINT *pArr = 0; - int iSizeArr = pSndKit->m_aSounds[idRand].m_aDelays.size(); - - if (iSizeArr > 0) - pArr = &(pSndKit->m_aSounds[idRand].m_aDelays[0]); - - if (pSndKit->m_is3D) - { - if (!pPos) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved call function playing 3d sound without position", GEN_MSG_LOCATION); - return SOUND_FAIL_ID; - } - - idSndInstance = soundInstancePlay(pSndKit->m_aSounds[idRand].m_id, id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK, false, pArr, iSizeArr, pPos, (fVolume < 0 ? pSndKit->m_aSounds[idRand].m_fVolume : fVolume)); - } - else - idSndInstance = soundInstancePlay(pSndKit->m_aSounds[idRand].m_id, id2 != SOUND_SNDKIT_INSTANCE_NOTBLOCK, false, pArr, iSizeArr, 0, (fVolume < 0 ? pSndKit->m_aSounds[idRand].m_fVolume : fVolume), fPan); - - /*if (idSndInstance > 0) - { - CSound* snd = m_aSounds[pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id]; - SOUND_SNDINSTANCE_BUSY busy = snd->m_aInstances[SOUND_DECODE2ID_LO(id2)].m_busy; - int qwerty = 0; - }*/ - - //ibReport(REPORT_MSG_LEVEL_NOTICE, "idSndInstance = %d\n", idSndInstance); - return SOUND_ENCODE2ID(idRand, idSndInstance); -} - - -void CSoundManager::sndkitStop(ID idSndKit, uint64_t id2) -{ - SOUND_SNDKIT_PRECOND(idSndKit, _VOID); - - if (id2 == SOUND_SNDKIT_INSTANCE_BLOCK) - return; - - СSoundKit *pSndKit = m_aSoundKits[idSndKit]; - - soundInstanceStop(pSndKit->m_aSounds[SOUND_DECODE2ID_HI(id2)].m_id, SOUND_DECODE2ID_LO(id2)); -} - -//########################################################################## - -void CSoundManager::channelAdd(ID idChannel, bool isPlaying) -{ - SOUND_CHANNEL_PRECOND(idChannel, _VOID); - - if (m_aChannels[idChannel] == SOUND_CHANNEL_NONE) - m_aChannels[idChannel] = isPlaying; -} - -bool CSoundManager::channelExists(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, false); - - return (m_aChannels[idChannel] != SOUND_CHANNEL_NONE); -} - -int CSoundManager::channelGetSndCount(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, SOUND_CHANNEL_NONE); - - int iCount = 0; - for (int i = 0, il = m_aSounds.size(); i < il; ++i) - { - if (m_aSounds[i]->m_idChannel == idChannel) - ++iCount; - } - - return iCount; -} - -void CSoundManager::channelPlay(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, _VOID); - - for (int i = 0, il = m_aSounds.size(); i < il; ++i) - { - if (m_aSounds[i] && m_aSounds[i]->m_idChannel == idChannel) - { - channelSndPlay(idChannel, i); - } - } - - m_aChannels[idChannel] = SOUND_CHANNEL_PLAY; -} - -bool CSoundManager::channelPlaying(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, false); - - return m_aChannels[idChannel]; -} - -void CSoundManager::channelStop(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, _VOID); - - for (int i = 0, il = m_aSounds.size(); i < il; ++i) - { - if (m_aSounds[i] && m_aSounds[i]->m_idChannel == idChannel) - { - channelSndStop(idChannel, i); - } - } - - m_aChannels[idChannel] = SOUND_CHANNEL_STOP; -} - -void CSoundManager::channelPlayOnly(ID idChannel) -{ - SOUND_CHANNEL_PRECOND(idChannel, _VOID); - - for (int i = 0, il = m_aSounds.size(); i < il; ++i) - { - if (m_aSounds[i]) - { - if (m_aSounds[i]->m_idChannel == idChannel) - { - channelSndPlay(idChannel, i); - } - else - { - channelSndStop(idChannel, i); - } - } - } -} - -void CSoundManager::soundResumePlayDelay(CSoundBase *pSndBase) -{ - if (!pSndBase || !(pSndBase->m_isPlayDelay)) - return; - - //если ключ валиден - if (pSndBase->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay) - { - //если текущее значение задержка - if (pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay) - pSndBase->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSndBase->oPlayDelay.m_uiPlayDelayStart; - else - pSndBase->m_pSoundBuffer->Play(0, 0, 0); - } - //иначе ключ невалиден, просто доигрываем - else - pSndBase->m_pSoundBuffer->Play(0, 0, 0); -} - -void CSoundManager::channelSndPlay(ID idChannel, ID idSound) -{ - if (idSound < m_aSounds.size() && idSound >= 0 && m_aSounds[idSound] && m_aSounds[idSound]->m_idChannel == idChannel) - { - CSound *pSnd = m_aSounds[idSound]; - DWORD dwStatus = 0; - - if (!(pSnd->m_isPlayDelay) && SUCCEEDED(pSnd->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_state == SOUND_OBJSTATE_PLAY) - pSnd->m_pSoundBuffer->Play(0, 0, (pSnd->m_uiStreamSize || pSnd->m_isLooping ? DSBPLAY_LOOPING : 0)); - //если воспроизведение с задержками - else if (pSnd->m_isPlayDelay && pSnd->m_state == SOUND_OBJSTATE_PLAY) - soundResumePlayDelay(pSnd); - - - for (int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k) - { - //TODO: доделать восстановление проигрывания с задержками для инстансов - - if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PAUSE) - { - pSnd->m_aInstances[k].m_state = SOUND_OBJSTATE_PLAY; - - if (!(pSnd->m_isPlayDelay)) - pSnd->m_aInstances[k].m_pSoundBuffer->Play(0, 0, (pSnd->m_aInstances[k].m_isLooping ? DSBPLAY_LOOPING : 0)); - else - soundResumePlayDelay(&(pSnd->m_aInstances[k])); - } - } - } -} - -void CSoundManager::channelSndStop(ID idChannel, ID idSound) -{ - if (idSound < m_aSounds.size() && idSound >= 0 && m_aSounds[idSound] && m_aSounds[idSound]->m_idChannel == idChannel) - { - CSound *pSnd = m_aSounds[idSound]; - - if (pSnd->m_isPlayDelay) - { - if (pSnd->oPlayDelay.m_iCurrPlayDelay >= 0 && pSnd->oPlayDelay.m_aPlayDelay.size() > pSnd->oPlayDelay.m_iCurrPlayDelay && pSnd->oPlayDelay.m_aPlayDelay[pSnd->oPlayDelay.m_iCurrPlayDelay].m_isDelay) - pSnd->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSnd->oPlayDelay.m_uiPlayDelayStart; - } - - pSnd->m_pSoundBuffer->Stop(); - DWORD dwStatus = 0; - CSoundInstance *pSndInst = 0; - - for (int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k) - { - pSndInst = &(pSnd->m_aInstances[k]); - dwStatus = 0; - - if (pSndInst->m_state == SOUND_OBJSTATE_PLAY && SUCCEEDED(pSndInst->m_pSoundBuffer->GetStatus(&dwStatus)) && (dwStatus & DSBSTATUS_PLAYING)) - { - pSndInst->m_pSoundBuffer->Stop(); - pSndInst->m_state = SOUND_OBJSTATE_PAUSE; - } - - if (pSndInst->m_isPlayDelay) - { - if (pSndInst->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndInst->oPlayDelay.m_aPlayDelay.size() > pSndInst->oPlayDelay.m_iCurrPlayDelay && pSndInst->oPlayDelay.m_aPlayDelay[pSndInst->oPlayDelay.m_iCurrPlayDelay].m_isDelay) - pSndInst->oPlayDelay.m_uiPlayDelayStart = GetTickCount() - pSndInst->oPlayDelay.m_uiPlayDelayStart; - } - } - } -} - -//########################################################################## - -void CSoundManager::init(HWND hwnd) -{ - if (FAILED(DirectSoundCreate8(NULL, &m_pDeviceSound, NULL))) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound device", GEN_MSG_LOCATION); - return;// SOUND_INIT_ERR_INIT; - } - - if (FAILED(m_pDeviceSound->SetCooperativeLevel(hwnd, DSSCL_EXCLUSIVE))) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create cooperative level", GEN_MSG_LOCATION); - return;// SOUND_INIT_ERR_CL; - } - - DSBUFFERDESC dsbd; - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); - - dsbd.dwSize = sizeof(DSBUFFERDESC); - dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLVOLUME; - dsbd.dwBufferBytes = 0; - dsbd.lpwfxFormat = 0; - - if (FAILED(m_pDeviceSound->CreateSoundBuffer(&dsbd, &m_pPrimaryBuffer, NULL))) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create primary buffer", GEN_MSG_LOCATION); - return;// SOUND_INIT_ERR_PRIM_BUF; - } - - WAVEFORMATEX wfex; - ZeroMemory(&wfex, sizeof(WAVEFORMATEX)); - - wfex.wFormatTag = WAVE_FORMAT_PCM; - wfex.nChannels = SOUND_G_CHANELS_COUNT; - wfex.nSamplesPerSec = SOUND_G_BITS_PER_SEC; - wfex.wBitsPerSample = SOUND_G_BITS_PER_SAMPLE; - wfex.nBlockAlign = (wfex.wBitsPerSample / 8) * wfex.nChannels; - wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign; - - if (FAILED(m_pPrimaryBuffer->SetFormat(&wfex))) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not init format", GEN_MSG_LOCATION); - return;// SOUND_INIT_ERR_SET_FORMAT; - } - - m_pPrimaryBuffer->SetVolume(0); - m_pPrimaryBuffer->Play(0, 0, DSBPLAY_LOOPING); -} - -// - -SOUND_FILEFORMAT CSoundManager::fileFormat(const char* file) -{ - FILE *fp; - - if (!(fp = fopen(file, "rb"))) - return SOUND_FILEFORMAT_UNKNOWN; - - CSoundWaveHeader Hdr; - fseek(fp, 0, SEEK_SET); - fread(&Hdr, 1, sizeof(CSoundWaveHeader), fp); - - if (memcmp(Hdr.RiffSig, "RIFF", 4) == 0 || memcmp(Hdr.Sig, "WAVE", 4) == 0 || memcmp(Hdr.FormatSig, "fmt ", 4) == 0) - { - fclose(fp); - return SOUND_FILEFORMAT_WAV; - } - - if (strcmp(fp->_base, "OggS") == 0) - { - fclose(fp); - return SOUND_FILEFORMAT_OGG; - } - - fclose(fp); - - return SOUND_FILEFORMAT_UNKNOWN; -} - -void CSoundManager::setMainVolume(float fVolume) -{ - m_pPrimaryBuffer->SetVolume(lerpf(-10000, 0, fVolume)); -} - -//############################################################################# - -void CSoundManager::load(CSound* snd, const char* fpath, SOUND_FILEFORMAT fmt) -{ - if (fmt == SOUND_FILEFORMAT_OGG) - loadOGG(snd, fpath); - else if (fmt == SOUND_FILEFORMAT_WAV) - loadWAV(snd, fpath); -} - -void CSoundManager::loadWAV(CSound* snd, const char* fpath) -{ - CSoundWaveHeader Hdr; - snd->m_pStream = fopen(fpath, "rb"); - - fseek(snd->m_pStream, 0, SEEK_SET); - fread(&Hdr, 1, sizeof(CSoundWaveHeader), snd->m_pStream); - - snd->m_uiSizeFull = (Hdr.ChunkSize + (sizeof(char)* 4 + sizeof(int32_t))) - sizeof(CSoundWaveHeader); - - /*if (snd->m_uiStreamSize == 0) - Hdr.DataSize = snd->m_uiSizeFull; - else - Hdr.DataSize = snd->m_uiStreamSize;*/ - - if (snd->m_uiStreamSize > 0) - Hdr.DataSize = snd->m_uiStreamSize; - - if (!(snd->m_pSoundBuffer = soundBufferCreate(&Hdr))) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->m_szRPath); - return; - } - - fseek(snd->m_pStream, sizeof(CSoundWaveHeader), SEEK_SET); - - soundDataWAVLoad(snd->m_pSoundBuffer, 0, snd->m_pStream, Hdr.DataSize, 0); - - snd->m_iLengthSec = snd->m_uiStreamSize / (Hdr.BytesPerSec); - snd->m_iChannelsCount = Hdr.Channels; - snd->m_iSampleRate = Hdr.SampleRate; - snd->m_iBitsPerSample = Hdr.BitsPerSample; - snd->m_uiBytesPerSec = ((snd->m_iBitsPerSample / 8) * snd->m_iChannelsCount) * snd->m_iSampleRate; - - if (snd->m_uiStreamSize == 0) - { - fclose(snd->m_pStream); - } - else - { - snd->m_uiSplit1Size = snd->m_uiStreamSize / 4; - snd->m_uiSplit2Size = snd->m_uiSplit1Size * 2; - snd->m_uiSplit3Size = snd->m_uiSplit1Size * 3; - - snd->m_isWork1 = false; - snd->m_isWork2 = false; - snd->m_isWork3 = false; - snd->m_isWork4 = false; - - snd->m_isStarting = true; - - snd->m_iRePlayCount = 0; - double tmpCRPE = double(snd->m_uiSizeFull) / double(snd->m_uiStreamSize); - float Count = 0; - - while (1) - { - if (tmpCRPE > Count && tmpCRPE < Count + 1) - { - snd->m_iRePlayEndCount = Count + 1; - break; - } - else if (tmpCRPE == Count) - { - snd->m_iRePlayEndCount = Count; - break; - } - Count++; - } - } -} - -IDirectSoundBuffer8* CSoundManager::soundBufferCreate(CSoundWaveHeader* hdr) -{ - IDirectSoundBuffer *DSB; - IDirectSoundBuffer8 *m_pSoundBuffer; - DSBUFFERDESC dsbd; - WAVEFORMATEX wfex; - - //устанавливаем формат воспроизведени§ - ZeroMemory(&wfex, sizeof(WAVEFORMATEX)); - wfex.wFormatTag = WAVE_FORMAT_PCM; - wfex.nChannels = hdr->Channels; - wfex.nSamplesPerSec = hdr->SampleRate; - wfex.wBitsPerSample = hdr->BitsPerSample; - wfex.nBlockAlign = wfex.wBitsPerSample / 8 * wfex.nChannels; - wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign; - - //создаем звуковой буфер, использу¤ данные заголовка - ZeroMemory(&dsbd, sizeof(DSBUFFERDESC)); - dsbd.dwSize = sizeof(DSBUFFERDESC); - dsbd.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_CTRLFREQUENCY | DSBCAPS_LOCSOFTWARE; - dsbd.dwBufferBytes = hdr->DataSize; - dsbd.lpwfxFormat = &wfex; - if (FAILED(m_pDeviceSound->CreateSoundBuffer(&dsbd, &DSB, NULL))) - return NULL; - - if (FAILED(DSB->QueryInterface(IID_IDirectSoundBuffer8, (void**)&m_pSoundBuffer))) - { - DSB->Release(); - return NULL; - } - - return m_pSoundBuffer; -} - -void CSoundManager::soundDataWAVLoad(IDirectSoundBuffer8* m_pSoundBuffer, int LockPos, FILE* data, int Size, UINT flag) -{ - BYTE *Ptr1, *Ptr2; - DWORD Size1, Size2; - - if (!Size) - return; - - if (FAILED(m_pSoundBuffer->Lock(LockPos, Size, (void**)&Ptr1, &Size1, (void**)&Ptr2, &Size2, flag))) - return; - - fread(Ptr1, 1, Size1, data); - if (Ptr2) - fread(Ptr2, 1, Size2, data); - - m_pSoundBuffer->Unlock(Ptr1, Size1, Ptr2, Size2); -} - -///////////////////////////////////////////////////////////////////////////// - -void CSoundManager::loadOGG(CSound* snd, const char* fpath) -{ - OggVorbis_File ogg; - - snd->m_pStream = fopen(fpath, "rb"); - - if (snd->m_pStream == NULL) - return; - - if (ov_fopen(fpath, &ogg)) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading [%s]", GEN_MSG_LOCATION, snd->m_szRPath); - return; - } - - snd->m_pVorbisFile = new OggVorbis_File; - - ov_callbacks cb; - cb.close_func = OggCallbackClose; - cb.read_func = OggCallbackRead; - cb.seek_func = OggCallbackSeek; - cb.tell_func = OggCallbackTell; - - ov_open_callbacks(snd->m_pStream, snd->m_pVorbisFile, 0, 0, cb); - - vorbis_info *vi = ov_info(&ogg, -1); - - if (!vi) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - error reading (info) [%s]", GEN_MSG_LOCATION, snd->m_szRPath); - return; - } - - snd->m_iLengthSec = float(ov_pcm_total(snd->m_pVorbisFile, -1)) / float(vi->rate); - snd->m_iChannelsCount = vi->channels; - snd->m_iSampleRate = vi->rate; - snd->m_iBitsPerSample = SOUND_OGG_BITS_PER_SAMPLE; - snd->m_uiBytesPerSec = ((snd->m_iBitsPerSample / 8) * snd->m_iChannelsCount) * snd->m_iSampleRate; - snd->m_uiSizeFull = ov_pcm_total(snd->m_pVorbisFile, -1) * 2 * vi->channels; - - CSoundWaveHeader hdr; - hdr.Channels = vi->channels; - hdr.SampleRate = vi->rate; - hdr.BitsPerSample = SOUND_OGG_BITS_PER_SAMPLE; - - if (snd->m_uiStreamSize == 0) - hdr.DataSize = snd->m_uiSizeFull; - else - hdr.DataSize = snd->m_uiStreamSize; - - snd->m_pSoundBuffer = soundBufferCreate(&hdr); - - if (!snd->m_pSoundBuffer) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - could not create sound buffer [%s]", GEN_MSG_LOCATION, snd->m_szRPath); - return; - } - - soundDataOGGLoad(snd->m_pVorbisFile, snd->m_pSoundBuffer, 0, hdr.DataSize, 0); - - if (snd->m_uiStreamSize == 0) - { - fclose(snd->m_pStream); - ov_clear(&ogg); - ov_clear(snd->m_pVorbisFile); - mem_delete(snd->m_pVorbisFile); - snd->m_pVorbisFile = 0; - } - else - { - snd->m_uiSplit1Size = snd->m_uiStreamSize / 4; - snd->m_uiSplit2Size = snd->m_uiSplit1Size * 2; - snd->m_uiSplit3Size = snd->m_uiSplit1Size * 3; - - snd->m_isWork1 = false; - snd->m_isWork2 = false; - snd->m_isWork3 = false; - snd->m_isWork4 = false; - - snd->m_isStarting = true; - - snd->m_iRePlayCount = 0; - double tmpCRPE = double(snd->m_uiSizeFull) / double(snd->m_uiStreamSize); - float Count = 0; - - while (1) - { - if (tmpCRPE > Count && tmpCRPE < Count + 1) - { - snd->m_iRePlayEndCount = Count + 1; - break; - } - else if (tmpCRPE == Count) - { - snd->m_iRePlayEndCount = Count; - break; - } - Count++; - } - } - //return SOUND_OK; -} - -void CSoundManager::soundDataOGGLoad(OggVorbis_File* VorbisFile, IDirectSoundBuffer8 *m_pSoundBuffer, int LockPos, int Size, UINT flag) -{ - char *Ptr1, *Ptr2; - DWORD Size1, Size2; - - if (!Size) - return; - - if (FAILED(m_pSoundBuffer->Lock(LockPos, Size, (void**)&Ptr1, &Size1, (void**)&Ptr2, &Size2, flag))) - return; - - DWORD total_read = 0; - long bites_read; - int current_section = 0; - - while (total_read < Size1) - { - bites_read = ov_read(VorbisFile, Ptr1 + total_read, Size1 - total_read, 0, SOUND_OGG_BITS_PER_SAMPLE_WORD, 1, ¤t_section); - - //конец файла - if (bites_read == 0) - break; - - if (bites_read > 0) - { - total_read += bites_read; - } - else if (bites_read == OV_EINVAL) - { - //ошибка при декодировании, нужно поставить заглушку - LibReport(REPORT_MSG_LEVEL_WARNING,"OV_EINVAL"); - } - else - break; - } - - - if (Ptr2) - { - total_read = 0; - while (total_read < Size2) - { - bites_read = ov_read(VorbisFile, Ptr2 + total_read, Size2 - total_read, 0, SOUND_OGG_BITS_PER_SAMPLE_WORD, 1, ¤t_section); - - if (bites_read == 0) - break; - - if (bites_read > 0) - { - total_read += bites_read; - } - else if (bites_read == OV_EINVAL) - { - //ошибка при декодировании, нужно поставить заглушку - LibReport(REPORT_MSG_LEVEL_WARNING, "OV_EINVAL"); - } - else - break; - } - } - - m_pSoundBuffer->Unlock(Ptr1, Size1, Ptr2, Size2); -} - -//############################################################################# - -ID CSoundManager::soundCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream) -{ - if (!szFile) - return SOUND_FAIL_ID; - - String sFileData = szFile; - float fDistAudibleData = -1.f; - float fVolumeData = -1.f; - Array<UINT> aDelaysData; - - SndGetDataFromStr(szFile, sFileData, fDistAudibleData, fVolumeData, aDelaysData); - - char fullpath[SOUND_MAX_SIZE_STDPATH + SOUND_MAX_SIZE_PATH]; - sprintf(fullpath, "%s%s", Core_RStringGet(G_RI_STRING_PATH_GS_SOUNDS), sFileData.c_str()); - - if (!FileExistsFile(fullpath)) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - file not found [%s]", GEN_MSG_LOCATION, fullpath); - return SOUND_FAIL_ID; - } - - SOUND_FILEFORMAT fmt = fileFormat(fullpath); - - if (fmt == SOUND_FILEFORMAT_UNKNOWN) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unknown format [%s]", GEN_MSG_LOCATION, sFileData.c_str()); - return SOUND_FAIL_ID; - } - - channelAdd(idChannel); - - CSound *pSnd = new CSound(); - - if (fDistAudibleData > 0.f) - pSnd->m_fDistAudible = fDistAudibleData; - - if (fVolumeData > -1.f) - pSnd->m_fVolume = fVolumeData; - - strcpy(pSnd->m_szRPath, szFile); - pSnd->m_format = fmt; - - pSnd->m_uiStreamSize = 0; - if (uiSizeStream > 0) - { - if (uiSizeStream < SOUND_MIN_SIZE_STREAM) - pSnd->m_uiStreamSize = SOUND_MIN_SIZE_STREAM; - else - pSnd->m_uiStreamSize = uiSizeStream; - } - - if (uiSizeStream == 0 && aDelaysData.size() > 0) - { - soundInitPlayDelay(pSnd, &(aDelaysData[0]), aDelaysData.size()); - } - - load(pSnd, fullpath, fmt); - - DWORD dwFrec; - pSnd->m_pSoundBuffer->GetFrequency(&dwFrec); - pSnd->m_uiFrecOrigin = dwFrec; - pSnd->m_id = addSound(pSnd); - pSnd->m_idChannel = idChannel; - pSnd->m_iCountLoad = 1; - - return pSnd->m_id; -} - -ID CSoundManager::soundCreate3d(const char *file, ID idChannel, UINT size_stream, float dist) -{ - ID idSnd = soundCreate2d(file, idChannel, size_stream); - CSound* snd = 0; - - if (idSnd < 0) - return idSnd; - - snd = m_aSounds[idSnd]; - - if (snd->m_fDistAudible <= 0.f) - snd->m_fDistAudible = dist; - - snd->m_is3d = true; - snd->m_fShiftPan = SOUND_SHIFTPAN_3D; - snd->m_idChannel = idChannel; - - return idSnd; -} - -ID CSoundManager::soundCreate2dInst(const char *file, ID idChannel) -{ - ID idSnd = soundFind2dInst(file, idChannel); - - if (idSnd >= 0) - { - ++(m_aSounds[idSnd]->m_iCountLoad); - return idSnd; - } - - idSnd = soundCreate2d(file, idChannel); - - char szStr[SOUND_MAX_SIZE_FULLPATH]; - szStr[0] = 0; - SOUND_CREATE_NAME(szStr, idChannel, file); - - m_a2dInst[szStr] = idSnd; - m_aSounds[idSnd]->m_isInst = true; - m_aSounds[idSnd]->m_idChannel = idChannel; - return idSnd; -} - -ID CSoundManager::soundCreate3dInst(const char *file, ID idChannel, float dist) -{ - ID idSnd = soundFind3dInst(file, idChannel); - - if (idSnd >= 0) - { - ++(m_aSounds[idSnd]->m_iCountLoad); - return idSnd; - } - - idSnd = soundCreate3d(file, idChannel, 0, dist); - - char szStr[SOUND_MAX_SIZE_FULLPATH]; - szStr[0] = 0; - SOUND_CREATE_NAME(szStr, idChannel, file); - - m_a3dInst[szStr] = idSnd; - m_aSounds[idSnd]->m_isInst = true; - m_aSounds[idSnd]->m_idChannel = idChannel; - - return idSnd; -} - -ID CSoundManager::soundFind2dInst(const char *file, ID idChannel) -{ - char szStr[SOUND_MAX_SIZE_FULLPATH]; - szStr[0] = 0; - SOUND_CREATE_NAME(szStr, idChannel, file); - - ID id = SOUND_FAIL_ID; - const AssotiativeArray<AAStringNR, ID, false, 16>::Node* pNode = 0; - if (m_a2dInst.KeyExists(szStr, &pNode)) - id = *(pNode->Val); - - return id; -} - -ID CSoundManager::soundFind3dInst(const char *file, ID idChannel) -{ - char szStr[SOUND_MAX_SIZE_FULLPATH]; - szStr[0] = 0; - SOUND_CREATE_NAME(szStr, idChannel, file); - - ID id = SOUND_FAIL_ID; - const AssotiativeArray<AAStringNR, ID, false, 16>::Node* pNode = 0; - if (m_a3dInst.KeyExists(szStr, &pNode)) - id = *(pNode->Val); - - return id; -} - -ID CSoundManager::soundInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume, float fPan) -{ - SOUND_PRECOND(idSound, SOUND_FAIL_ID); - - CSound *pSnd = m_aSounds[idSound]; - - SOUND_CHANNEL_PLAYING(pSnd->m_idChannel, SOUND_FAIL_ID); - - if (pSnd->m_uiStreamSize > 0) - { - LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance for streaming [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath); - return SOUND_FAIL_ID; - } - - if (pSnd->m_is3d && !pPos) - { - LibReport(REPORT_MSG_LEVEL_WARNING, "%s - not send position for 3d sound instance [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath); - return SOUND_FAIL_ID; - } - - if (!(pSnd->m_is3d) && pPos) - { - LibReport(REPORT_MSG_LEVEL_WARNING, "%s - uresolved send position for 2d sound instance [%s]", GEN_MSG_LOCATION, pSnd->m_szRPath); - return SOUND_FAIL_ID; - } - - ID idInstance = -1; - for (int i = 0; i < pSnd->m_aInstances.size(); ++i) - { - if (pSnd->m_aInstances[i].m_busy == SOUND_SNDINSTANCE_BUSY_FREE) - { - idInstance = i; - break; - } - } - - if (idInstance < 0) - { - IDirectSoundBuffer* tsb; - IDirectSoundBuffer8* tsb8; - m_pDeviceSound->DuplicateSoundBuffer(pSnd->m_pSoundBuffer, &tsb); - if (!tsb) - { - LibReport(REPORT_MSG_LEVEL_WARNING, "%s - can not create sound instance [%s], this is big problem", GEN_MSG_LOCATION, pSnd->m_szRPath); - return SOUND_FAIL_ID; - } - tsb->QueryInterface(IID_IDirectSoundBuffer8, (void**)&tsb8); - pSnd->m_aInstances.push_back(CSoundInstance(tsb8, pSnd->m_uiBytesPerSec, (pPos ? &float3_t(*pPos) : 0), SOUND_SNDINSTANCE_BUSY_TEMP)); - idInstance = pSnd->m_aInstances.size() - 1; - } - - if (idInstance >= 0) - { - if (isBlocked || isLooping) - pSnd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_LOCKED; - else - pSnd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_TEMP; - - //если установлены задержки воспроизведения - if (pArrDelay && iSizeArrDelay > 0 || iSizeArrDelay < 0) - soundInitPlayDelay(&(pSnd->m_aInstances[idInstance]), pArrDelay, iSizeArrDelay); - - pSnd->m_aInstances[idInstance].m_fVolume = saturatef(fVolume); - - //если 3д звук - if (pSnd->m_is3d && pPos) - { - pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_aInstances[idInstance].m_fVolume * Snd3dComVolume((*pPos), m_vOldViewPos, pSnd->m_fDistAudible))); - pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetPan(Snd3dComPan((*pPos), m_vOldViewPos, m_vOldViewDir, pSnd->m_fDistAudible, pSnd->m_fShiftPan)); - } - //иначе фоновый - else - { - pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_aInstances[idInstance].m_fVolume)); - pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetPan((fPan > 0) ? (10000 - (fPan * 100)) - 10000 : 10000 - (10000 + (fPan * 100))); - } - - pSnd->m_aInstances[idInstance].m_pSoundBuffer->SetCurrentPosition(0); - pSnd->m_aInstances[idInstance].m_isLooping = isLooping; - - if (!(pArrDelay && iSizeArrDelay > 0)) - pSnd->m_aInstances[idInstance].m_pSoundBuffer->Play(0, 0, ((pSnd->m_aInstances[idInstance].m_isLooping) ? DSBPLAY_LOOPING : 0)); - - pSnd->m_aInstances[idInstance].m_state = SOUND_OBJSTATE_PLAY; - - return idInstance; - } - - return SOUND_FAIL_ID; -} - -bool CSoundManager::soundInstancePlaying(ID idSound, ID idInstance) -{ - SOUND_PRECOND(idSound, false); - - CSound* snd = m_aSounds[idSound]; - - if (idInstance >= 0) - { - /*DWORD dwStatus; - snd->m_aInstances[idInstance].m_pSoundBuffer->GetStatus(&dwStatus); - return (dwStatus & DSBSTATUS_PLAYING);*/ - return (snd->m_aInstances[idInstance].m_state != SOUND_OBJSTATE_STOP); - } - - return false; -} - -void CSoundManager::soundInstanceStop(ID idSound, ID idInstance) -{ - SOUND_PRECOND(idSound, _VOID); - - CSound* snd = m_aSounds[idSound]; - - if (idInstance >= 0) - { - snd->m_aInstances[idInstance].m_isLooping = false; - snd->m_aInstances[idInstance].m_pSoundBuffer->Stop(); - snd->m_aInstances[idInstance].m_state = SOUND_OBJSTATE_STOP; - } -} - -void CSoundManager::soundInstanceFree(ID idSound, ID idInstance) -{ - SOUND_PRECOND(idSound, _VOID); - - CSound* snd = m_aSounds[idSound]; - - if (idInstance >= 0) - { - if (snd->m_aInstances[idInstance].m_busy == SOUND_SNDINSTANCE_BUSY_LOCKED) - snd->m_aInstances[idInstance].m_busy = SOUND_SNDINSTANCE_BUSY_TEMP; - } -} - -ID CSoundManager::addSound(CSound* snd) -{ - for (int i = 0, l = m_aSounds.size(); i < l; ++i) - { - if (m_aSounds[i] == 0) - { - m_aSounds[i] = snd; - return i; - } - } - - m_aSounds.push_back(snd); - - return m_aSounds.size() - 1; -} - -bool CSoundManager::soundIsInit(ID id) -{ - return ((ID)m_aSounds.size() > id && m_aSounds[id] != 0); -} - -void CSoundManager::soundDelete(ID id) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - --(snd->m_iCountLoad); - - if (snd->m_iCountLoad > 0) - return; - - if (snd->m_isInst) - { - char szStr[SOUND_MAX_SIZE_FULLPATH]; - szStr[0] = 0; - SOUND_CREATE_NAME(szStr, snd->m_idChannel, snd->m_szRPath); - - if (snd->m_is3d) - m_a3dInst.erase(szStr); - else - m_a2dInst.erase(szStr); - } - mem_delete(m_aSounds[id]); -} - -//############################################################################# - -void CSoundManager::soundPlay(ID id, bool isLooping, UINT *pArrDelay, int iSizeArrDelay) -{ - SOUND_PRECOND(id, _VOID); - - CSound *pSnd = m_aSounds[id]; - - if (pSnd->m_uiStreamSize != 0 && pArrDelay && iSizeArrDelay > 0) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved play delay for streming playing, file %s", GEN_MSG_LOCATION, pSnd->m_szRPath); - return; - } - - if (!m_aChannels[pSnd->m_idChannel]) - return; - - if (pArrDelay && iSizeArrDelay > 0 || iSizeArrDelay < 0) - soundInitPlayDelay(pSnd, pArrDelay, iSizeArrDelay); - - pSnd->m_isLooping = isLooping; - - if (pSnd->m_pSoundBuffer) - { - if (pArrDelay && iSizeArrDelay > 0) - pSnd->m_pSoundBuffer->SetCurrentPosition(0); - else - pSnd->m_pSoundBuffer->Play(0, 0, (pSnd->m_uiStreamSize || pSnd->m_isLooping ? DSBPLAY_LOOPING : 0)); - - pSnd->m_state = SOUND_OBJSTATE_PLAY; - } -} - -void CSoundManager::soundInitPlayDelay(CSoundBase *pSndbase, UINT *pArrDelay, int iSizeArrDelay) -{ - if (!pSndbase) - return; - - if (iSizeArrDelay < 0) - { - if (pSndbase->oPlayDelay.m_aPlayDelay.size() <= 0) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - previous delay data not init", GEN_MSG_LOCATION); - } - - pSndbase->oPlayDelay.m_iCurrPlayDelay = 0; - pSndbase->m_isPlayDelay = true; - return; - } - - if (pArrDelay == 0 || iSizeArrDelay == 0) - return; - - pSndbase->oPlayDelay.m_aPlayDelay.clearFast(); - pSndbase->oPlayDelay.m_iCurrPlayDelay = 0; - pSndbase->m_isPlayDelay = true; - pSndbase->oPlayDelay.m_uiPlayDelayStart = GetTickCount(); - - bool isEven = true; - for (int i = 0, il = iSizeArrDelay; i < il; ++i) - { - pSndbase->oPlayDelay.m_aPlayDelay.push_back(CPlayDelay::CTimeDelay(pArrDelay[i], isEven)); - isEven = !isEven; - } -} - -void CSoundManager::soundPause(ID id) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - - if (!m_aChannels[snd->m_idChannel]) - return; - - if (snd->m_pSoundBuffer) - { - snd->m_pSoundBuffer->Stop(); - snd->m_state = SOUND_OBJSTATE_PAUSE; - } -} - -void CSoundManager::soundStop(ID id) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - - if (!m_aChannels[snd->m_idChannel]) - return; - - if (snd->m_pSoundBuffer) - { - snd->m_pSoundBuffer->Stop(); - snd->m_pSoundBuffer->SetCurrentPosition(0); - snd->m_state = SOUND_OBJSTATE_STOP; - snd->m_isLooping = false; - snd->m_isPlayDelay = false; - } -} - -void CSoundManager::soundSetState(ID id, SOUND_OBJSTATE state) -{ - SOUND_PRECOND(id, _VOID); - - if (state == SOUND_OBJSTATE_PLAY) - soundPlay(id); - else if (state == SOUND_OBJSTATE_PAUSE) - soundPause(id); - else if (state == SOUND_OBJSTATE_STOP) - soundStop(id); -} - -SOUND_OBJSTATE CSoundManager::soundGetState(ID id) -{ - SOUND_PRECOND(id, SOUND_OBJSTATE_STOP); - - CSound* snd = m_aSounds[id]; - return snd->m_state; -} - -void CSoundManager::soundSetPosPlay(ID id, UINT pos) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - - DWORD PosInBytes = 0; - if (snd->m_pSoundBuffer) - { - PosInBytes = pos * (snd->m_uiBytesPerSec / 1000); - - if (snd->m_uiStreamSize) - { - WORD HowCountRePlay = 0; - for (WORD i = 0; i <= snd->m_iRePlayEndCount; i++) - { - if ((i * snd->m_uiStreamSize <= PosInBytes && (i + 1) * snd->m_uiStreamSize >= PosInBytes) || i * snd->m_uiStreamSize == PosInBytes) - { - HowCountRePlay = i; - break; - } - } - - //wav - if (snd->m_format == SOUND_FILEFORMAT_WAV) - fseek(snd->m_pStream, sizeof(CSoundWaveHeader)+(HowCountRePlay * snd->m_uiStreamSize), SEEK_SET); - //ogg - else if (snd->m_format == SOUND_FILEFORMAT_OGG) - ov_pcm_seek(snd->m_pVorbisFile, (HowCountRePlay * snd->m_uiStreamSize) / (2 * snd->m_iChannelsCount)); - - DWORD SizeCountRePlay = PosInBytes - (snd->m_uiStreamSize * HowCountRePlay); - - reLoadSplit(id, 0, snd->m_uiStreamSize); - - snd->m_iRePlayCount = HowCountRePlay; - snd->m_pSoundBuffer->SetCurrentPosition(SizeCountRePlay); - - for (WORD i = 0; i<4; i++) - { - if (SizeCountRePlay >= snd->m_uiSplit1Size * i && SizeCountRePlay < snd->m_uiSplit1Size * (i + 1)) - { - snd->m_iSplitActive = i + 1; - break; - } - } - - if (snd->m_iSplitActive > 1) - snd->m_isStarting = false; - else - snd->m_isStarting = true; - - if (snd->m_iSplitActive - 2 > 0 && snd->m_iSplitActive - 2 < 5) - { - for (WORD i = 0; i<snd->m_iSplitActive - 2; i++) - reLoadSplit(id, snd->m_uiSplit1Size*i, snd->m_uiSplit1Size); - } - - snd->m_isWork1 = snd->m_isWork2 = snd->m_isWork3 = snd->m_isWork4 = false; - } - else - snd->m_pSoundBuffer->SetCurrentPosition(PosInBytes); - } -} - -UINT CSoundManager::soundGetPosPlay(ID id) -{ - SOUND_PRECOND(id, 0); - - CSound* snd = m_aSounds[id]; - DWORD dwPosBuff, dwBytes, dwPos = 0; - if (snd->m_pSoundBuffer) - { - snd->m_pSoundBuffer->GetCurrentPosition(&dwPosBuff, 0); - - if (snd->m_uiStreamSize) - dwBytes = snd->m_iRePlayCount * snd->m_uiStreamSize + dwPosBuff; - else - dwBytes = dwPosBuff; - - dwPos = dwBytes / (snd->m_uiBytesPerSec / 1000); - } - return dwPos; -} - -void CSoundManager::soundSetVolume(ID id, float fVolume) -{ - SOUND_PRECOND(id, _VOID); - - CSound *pSnd = m_aSounds[id]; - pSnd->m_fVolume = saturatef(fVolume); - - if (pSnd->m_pSoundBuffer) - { - int iVolume = -10000 + (pSnd->m_fVolume * 10000); - - if (!pSnd->m_is3d) - pSnd->m_pSoundBuffer->SetVolume(iVolume); - } -} - -float CSoundManager::soundGetVolume(ID id) -{ - SOUND_PRECOND(id, 0); - - CSound *pSnd = m_aSounds[id]; - return pSnd->m_fVolume; -} - - -void CSoundManager::soundSetPan(ID id, float fPan) -{ - SOUND_PRECOND(id, _VOID); - - CSound *pSnd = m_aSounds[id]; - - if (pSnd->m_is3d) - return; - - pSnd->m_fPan = clampf(fPan,-1.f,1.f); - - if (pSnd->m_pSoundBuffer) - { - long lValue = (pSnd->m_fPan > 0) ? (10000 - (pSnd->m_fPan * 100)) - 10000 : 10000 - (10000 + (pSnd->m_fPan * 100)); - - pSnd->m_pSoundBuffer->SetPan(lValue); - } -} - -float CSoundManager::soundGetPan(ID id) -{ - SOUND_PRECOND(id, 0); - - CSound *pSnd = m_aSounds[id]; - - if (pSnd->m_is3d) - return 0; - - return pSnd->m_fPan; -} - - -void CSoundManager::soundSetFreqCurr(ID id, UINT value) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - if (snd->m_pSoundBuffer) - snd->m_pSoundBuffer->SetFrequency(value); -} - -UINT CSoundManager::soundGetFreqCurr(ID id) -{ - SOUND_PRECOND(id, 0); - - CSound* snd = m_aSounds[id]; - static DWORD Value = 0; - if (snd->m_pSoundBuffer) - snd->m_pSoundBuffer->GetFrequency(&Value); - return Value; -} - -UINT CSoundManager::soundGetFreqOrigin(ID id) -{ - SOUND_PRECOND(id, 0); - - CSound* snd = m_aSounds[id]; - if (snd->m_pSoundBuffer) - return snd->m_uiFrecOrigin; - - return 0; -} - -void CSoundManager::soundSetPosWorld(ID id, const float3* pos) -{ - SOUND_PRECOND(id, _VOID); - if (pos) - m_aSounds[id]->m_vPosition = *pos; -} - -void CSoundManager::soundGetPosWorld(ID id, float3* pos) -{ - SOUND_PRECOND(id, _VOID); - if (pos) - *pos = m_aSounds[id]->m_vPosition; -} - -int CSoundManager::soundGetLengthSec(ID id) -{ - SOUND_PRECOND(id, 0); - - return m_aSounds[id]->m_iLengthSec; -} - -UINT CSoundManager::soundGetBytesPerSec(ID id) -{ - SOUND_PRECOND(id, 0); - - return m_aSounds[id]->m_uiBytesPerSec; -} - -UINT CSoundManager::soundGetSize(ID id) -{ - SOUND_PRECOND(id, 0); - - return m_aSounds[id]->m_uiSizeFull; -} - -void CSoundManager::soundGetFile(ID id, char* path) -{ - SOUND_PRECOND(id, _VOID); - - if(path) - strcpy(path,m_aSounds[id]->m_szRPath); -} - - -float CSoundManager::soundGetDistAudible(ID id) -{ - SOUND_PRECOND(id, 0); - - return m_aSounds[id]->m_fDistAudible; -} - -void CSoundManager::soundSetDistAudible(ID id, float value) -{ - SOUND_PRECOND(id, _VOID); - - m_aSounds[id]->m_fDistAudible = value; -} - -//############################################################################# - -void CSoundManager::reLoadSplit(ID id, UINT Pos, UINT Size) -{ - SOUND_PRECOND(id, _VOID); - - CSound* snd = m_aSounds[id]; - if (snd->m_pSoundBuffer) - { - //wav - if (snd->m_format == SOUND_FILEFORMAT_WAV) - soundDataWAVLoad(snd->m_pSoundBuffer, Pos, snd->m_pStream, Size, 0); - //ogg - else if (snd->m_format == SOUND_FILEFORMAT_OGG) - { - soundDataOGGLoad(snd->m_pVorbisFile, snd->m_pSoundBuffer, Pos, Size, 0); - } - } -} - -void CSoundManager::UpdatePlayDelay(CSoundBase *pSndBase) -{ - if (!pSndBase) - return; - - DWORD dwStatus = 0; - - //если вопроизведение с задержками - if (pSndBase->m_isPlayDelay) - { - if (pSndBase->m_state == SOUND_OBJSTATE_PLAY && pSndBase->m_isLooping && pSndBase->oPlayDelay.m_iCurrPlayDelay == -1 && SUCCEEDED(pSndBase->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING)) - { - pSndBase->oPlayDelay.m_iCurrPlayDelay = 0; - pSndBase->oPlayDelay.m_uiPlayDelayStart = 0; - pSndBase->m_pSoundBuffer->SetCurrentPosition(0); - pSndBase->m_pSoundBuffer->Play(0, 0, 0); - } - - dwStatus = 0; - - DWORD dwCurrPos = 0; - - pSndBase->m_pSoundBuffer->GetCurrentPosition(&dwCurrPos, 0); - dwCurrPos = dwCurrPos / (pSndBase->m_uiBytesPerSec / 1000); - - //если текущий ключ в массиве задержек валиден - if (pSndBase->oPlayDelay.m_iCurrPlayDelay >= 0 && pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay) - { - if ( - //если текущий ключ в массиве это не задержка и текущая время воспроизведения больше либо равно установленному - (!(pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay) && dwCurrPos >= pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_uiTime) || - - //если текущий ключ в массиве это задержка и время с засечки уже превысило установленное значение либо равно ему - (pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay && (GetTickCount() - pSndBase->oPlayDelay.m_uiPlayDelayStart) >= pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_uiTime) - ) - { - //инкрементируем текущий ключ - ++(pSndBase->oPlayDelay.m_iCurrPlayDelay); - - //если следующий ключ валиден - if (pSndBase->oPlayDelay.m_aPlayDelay.size() > pSndBase->oPlayDelay.m_iCurrPlayDelay) - { - //если задержка - if (pSndBase->oPlayDelay.m_aPlayDelay[pSndBase->oPlayDelay.m_iCurrPlayDelay].m_isDelay) - { - //естанавливаем и засекаем время - pSndBase->m_pSoundBuffer->Stop(); - pSndBase->oPlayDelay.m_uiPlayDelayStart = GetTickCount(); - } - else - { - //воспроизводим и обнуляем засечку - pSndBase->m_pSoundBuffer->Play(0, 0, 0); - pSndBase->oPlayDelay.m_uiPlayDelayStart = 0; - } - } - //иначе ключ в массиве задержек невалиден - else - { - //воспроизводим остаток и обнуляем данные настроек - pSndBase->m_pSoundBuffer->Play(0, 0, 0); - - if (!(pSndBase->m_isLooping)) - pSndBase->m_isPlayDelay = false; - - pSndBase->oPlayDelay.m_iCurrPlayDelay = -1; - pSndBase->oPlayDelay.m_uiPlayDelayStart = 0; - } - } - } - } -} - -void CSoundManager::update(const float3* viewpos, const float3* viewdir) -{ - int tmpSoundsPlayCount = 0; - int tmpSoundsLoadCount = 0; - - CSound *pSnd = 0; - DWORD dwStatus = 0; - for(UINT i = 0; i < m_aSounds.size(); ++i) - { - pSnd = m_aSounds[i]; - - //если есть звук и его канал вопроизводится - if (pSnd && m_aChannels[pSnd->m_idChannel]) - { - //если вопроизведение с задержками - if (pSnd->m_state == SOUND_OBJSTATE_PLAY && pSnd->m_uiStreamSize == 0 && pSnd->m_isPlayDelay) - { - UpdatePlayDelay((CSoundBase*)pSnd); - } - - dwStatus = 0; - - //если звук воспроизводится без задержек и буфер уже не прогирывается а состояние звука "проигрывается" тогда выключаем звук - if (!pSnd->m_isPlayDelay && SUCCEEDED(pSnd->m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_state == SOUND_OBJSTATE_PLAY) - soundSetState(i, SOUND_OBJSTATE_STOP); - - ++tmpSoundsLoadCount; - if(pSnd->m_state == SOUND_OBJSTATE_PLAY) - ++tmpSoundsPlayCount; - - //если анализируемый звук 3d - if(pSnd->m_is3d && pSnd->m_pSoundBuffer && viewpos && viewdir) - { - //устанавливаем ему параметры воспроизведения - pSnd->m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_fVolume * Snd3dComVolume(pSnd->m_vPosition, (*viewpos), pSnd->m_fDistAudible))); - pSnd->m_pSoundBuffer->SetPan(Snd3dComPan(pSnd->m_vPosition, (*viewpos), (*viewdir), pSnd->m_fDistAudible, pSnd->m_fShiftPan)); - - //если есть инстансы - if(pSnd->m_aInstances.size() > 0) - { - //проходимся по всему массиву инстансов и устанавливаем параметры воспроизведения - for(int k = 0, l = pSnd->m_aInstances.size(); k < l; ++k) - { - pSnd->m_pSoundBuffer->SetVolume(lerpf(-10000, 0, pSnd->m_fVolume * Snd3dComVolume(pSnd->m_aInstances[k].m_vPos, (*viewpos), pSnd->m_fDistAudible))); - pSnd->m_pSoundBuffer->SetPan(Snd3dComPan(pSnd->m_aInstances[k].m_vPos, (*viewpos), (*viewdir), pSnd->m_fDistAudible, pSnd->m_fShiftPan)); - } - } - } - - for(int k = 0, kl = pSnd->m_aInstances.size(); k < kl; ++k) - { - //нужно ли это здесь? - /*if (pSnd->m_aInstances[k].m_state != SOUND_OBJSTATE_PLAY) - continue;*/ - - //если вопроизведение с задержками - if (pSnd->m_aInstances[k].m_isPlayDelay) - { - if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PLAY) - UpdatePlayDelay(&(pSnd->m_aInstances[k])); - } - //иначе не установлено что звук воспроизводится с задержками - else - { - //обрабатываем состояния - dwStatus = 0; - - //если буфер не проигрывается и состояние инстанса "временно блокирован", тогда освобождаем инстанс - if (SUCCEEDED(pSnd->m_aInstances[k].m_pSoundBuffer->GetStatus(&dwStatus)) && !(dwStatus & DSBSTATUS_PLAYING) && pSnd->m_aInstances[k].m_busy != SOUND_SNDINSTANCE_BUSY_LOCKED) - pSnd->m_aInstances[k].m_busy = SOUND_SNDINSTANCE_BUSY_FREE; - - //если буфер инстанса не проигрывается а состояние инстанса "проигрывается", тогда устанавливаем состояние "непроигрывается" - if (pSnd->m_aInstances[k].m_state == SOUND_OBJSTATE_PLAY && !(dwStatus & DSBSTATUS_PLAYING)) - pSnd->m_aInstances[k].m_state = SOUND_OBJSTATE_STOP; - } - } - - if(pSnd->m_uiStreamSize && pSnd->m_pSoundBuffer != 0) - { - DWORD pos; - pSnd->m_pSoundBuffer->GetCurrentPosition(&pos, 0); - - if (pos >= pSnd->m_uiSplit1Size && pos < pSnd->m_uiSplit2Size && !pSnd->m_isWork2) - { - reLoadSplit(i, 0, pSnd->m_uiSplit1Size); - pSnd->m_isWork2 = true; - pSnd->m_isWork1 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false; - pSnd->m_iSplitActive = 2; - } - else if (pos >= pSnd->m_uiSplit2Size && pos < pSnd->m_uiSplit3Size && !pSnd->m_isWork3) - { - pSnd->m_isWork3 = true; - pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork4 = false; - reLoadSplit(i, pSnd->m_uiSplit1Size, pSnd->m_uiSplit1Size); - pSnd->m_iSplitActive = 3; - } - else if (pos >= pSnd->m_uiSplit3Size && pos < pSnd->m_uiStreamSize && !pSnd->m_isWork4) - { - pSnd->m_isWork4 = true; - pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork3 = false; - reLoadSplit(i, pSnd->m_uiSplit2Size, pSnd->m_uiSplit1Size); - pSnd->m_iSplitActive = 4; - } - else if (pos < pSnd->m_uiSplit1Size && !pSnd->m_isWork1) - { - pSnd->m_isWork1 = true; - pSnd->m_isWork2 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false; - if(!pSnd->m_isStarting) - { - reLoadSplit(i, pSnd->m_uiSplit3Size, pSnd->m_uiSplit1Size); - pSnd->m_iRePlayCount++; - } - pSnd->m_iSplitActive = 1; - pSnd->m_isStarting = false; - } - - - if(pSnd->m_iRePlayCount + 1 == pSnd->m_iRePlayEndCount) - { - if(pSnd->m_uiSizeFull <= (pSnd->m_uiStreamSize * pSnd->m_iRePlayCount + pos)) - { - if(!pSnd->m_isLooping) - soundStop(i); - - //wav - if(pSnd->m_format == SOUND_FILEFORMAT_WAV) - fseek(pSnd->m_pStream, sizeof(CSoundWaveHeader), SEEK_SET); - //ogg - else if(pSnd->m_format == SOUND_FILEFORMAT_OGG) - ov_pcm_seek(pSnd->m_pVorbisFile, 0); - - reLoadSplit(i, 0, pSnd->m_uiStreamSize); - - pSnd->m_pSoundBuffer->SetCurrentPosition(0); - - pSnd->m_iRePlayCount = 0; - pSnd->m_isStarting = true; - - pSnd->m_isWork1 = false; pSnd->m_isWork2 = false; pSnd->m_isWork3 = false; pSnd->m_isWork4 = false; - } - } - } - } - } - - m_iSoundsPlayCount = tmpSoundsPlayCount; - m_iSoundsLoadCount = tmpSoundsLoadCount; - - m_vOldViewPos = *viewpos; - m_vOldViewDir = *viewdir; -} - -int CSoundManager::soundsGetPlayCount() -{ - return m_iSoundsPlayCount; -} - -int CSoundManager::soundsGetLoadCount() -{ - return m_iSoundsLoadCount; -} diff --git a/source/score/sound.h b/source/score/sound.h deleted file mode 100644 index adf7d2bd1..000000000 --- a/source/score/sound.h +++ /dev/null @@ -1,639 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -#ifndef __SOUND_H -#define __SOUND_H - -#pragma comment(lib, "dxguid.lib") -#pragma comment(lib, "dsound.lib") -#ifdef _DEBUG -#pragma comment(lib, "libogg_static_d.lib") -#pragma comment(lib, "libvorbis_static_d.lib") -#pragma comment(lib, "libvorbisfile_d.lib") -#else -#pragma comment(lib, "libogg_static.lib") -#pragma comment(lib, "libvorbis_static.lib") -#pragma comment(lib, "libvorbisfile.lib") -#endif -#include <gdefines.h> -#include <windows.h> -#include <mmsystem.h> -#include <dsound.h> -#include <stdint.h> -#include <vorbis/codec.h> -#include <vorbis/vorbisfile.h> -#include <common/aastring.h> -#include <common/array.h> -#include <common/string.h> -#include <common/string_utils.h> -#include <common/file_utils.h> -#include <common/assotiativearray.h> -#include "sxscore.h" - -//########################################################################## - -/*! проверка допустимости id звука, в случае провала вылет */ -#define SOUND_PRECOND(id, retval) \ -if ((UINT)id >= m_aSounds.size() || id < 0 || !(m_aSounds[id]))\ -{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved address to sound %d", GEN_MSG_LOCATION, id); return retval; } - -/*! создание имени звука (нужно для разделения между каналами */ -#define SOUND_CREATE_NAME(szStr, szFile, idChannel) sprintf(szStr, "%d|%s", idChannel, szFile); - -/*! проверка допустимости id канала, в случае провала вылет */ -#define SOUND_CHANNEL_PRECOND(id, retval) \ -if (!(id >= 0 && id < SOUND_CHANNELS_COUNT)) \ -{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved id channel %d", GEN_MSG_LOCATION, id); return retval; } - -/*! проверка проигрываемости канала */ -#define SOUND_CHANNEL_PLAYING(id, retval) \ -if (m_aChannels[id] != 1) \ -{return retval; } - -/*! проверка допустимости id набора звуков, в случае провала вылет */ -#define SOUND_SNDKIT_PRECOND(id, retval) \ -if (!(id >= 0 && (UINT)id < m_aSoundKits.size() && m_aSoundKits[id])) \ -{LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved id sound kit %d", GEN_MSG_LOCATION, id); return retval; } - -//########################################################################## - -//! просчет громкости звука, пределы [0, 1] -inline float Snd3dComVolume( - const float3 &vSndPos, //!< позиция звука - const float3 &vViewPos, //!< позиция слушателя - const float fDistAudible //!< дистанция слышимости - ) -{ - float fVolume = 1.f - (SMVector3Distance(vSndPos, vViewPos) / fDistAudible);// *(-10000); - - return saturatef(fVolume); -} - -//! просчет смещения звука между ушами слушателя -inline int Snd3dComPan( - const float3 &vSndPos, //!< позиция звука - const float3 &vViewPos, //!< позиция слушателя - const float3 &vViewDir, //!< направление взгляда слушателя - const float fDistAudible, //!< дистанция слышимости - const float fShiftPan //!< коэфициент смещения между ушами слушателя - ) -{ - float fDist = SMVector3Distance(vSndPos, vViewPos); - float3 fVec = vViewPos + vViewDir; - - float str = (vSndPos.x - vViewPos.x)*(vSndPos.z - fVec.z) - (vSndPos.z - vViewPos.z)*(vSndPos.x - fVec.x); - return ((str * (fDist / fDistAudible)) * fShiftPan * float(-10000)); -} - -//! парсинг строки szSrcStr на составляющие элементы (если есть): путь до звука и параметры воспроизведения -inline bool SndGetDataFromStr(const char *szSrcStr, String &sFile, float &fDistAudible, float &fVolume, Array<UINT> &aDelays) -{ - bool existsData = false; - - Array<String> aStrConfig = StrExplode(szSrcStr, " ", false); - - if (aStrConfig[0].length() == 0) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - invalid file", GEN_MSG_LOCATION); - return false; - } - - sFile = StrTrim(aStrConfig[0].c_str()); - - if (aStrConfig.size() >= 2) - { - if (aStrConfig[1][0] == 'd' || aStrConfig[1][0] == 'v') - existsData = true; - - if (aStrConfig[1][0] == 'd') - sscanf(aStrConfig[1].c_str() + 1, "%f", &fDistAudible); - else if (aStrConfig[1][0] == 'v') - sscanf(aStrConfig[1].c_str() + 1, "%f", &fVolume); - } - - if (aStrConfig.size() >= 3) - { - if (aStrConfig[2][0] == 'd' && fDistAudible > -2.f) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved double instruction for 'distance of audibility'", GEN_MSG_LOCATION); - return false; - } - - if (aStrConfig[2][0] == 'v' && fVolume > -2.f) - { - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - unresolved double instruction for 'volume'", GEN_MSG_LOCATION); - return false; - } - - if (aStrConfig[2][0] == 'd' || aStrConfig[2][0] == 'v') - existsData = true; - - if (aStrConfig[2][0] == 'd') - sscanf(aStrConfig[2].c_str() + 1, "%f", &fDistAudible); - else if (aStrConfig[2][0] == 'v') - sscanf(aStrConfig[2].c_str() + 1, "%f", &fVolume); - } - - for (int k = 3, kl = aStrConfig.size(); k < kl; ++k) - { - String str = aStrConfig[k]; - aDelays.push_back(aStrConfig[k].toUnsLongInt()); - } - - if (aDelays.size() > 0) - existsData = true; - - return existsData; -} - -//########################################################################## - -/*! \name Обработчики ogg -@{*/ - -//! чтение файла -size_t OggCallbackRead(void *ptr, size_t size, size_t nmemb, void *datasource); - -//! закртытие файла -int OggCallbackClose(void* datasource); - -//! позиционирование -int OggCallbackSeek(void *datasource, ogg_int64_t offset, int whence); - -//! размер файла -long OggCallbackTell(void* datasource); - -//!@} - -//########################################################################## - -//структура для загрузки wave файла -struct CSoundWaveHeader -{ - char RiffSig[4]; - int32_t ChunkSize; - char Sig[4]; - char FormatSig[4]; - int32_t FormatChunkSize; - int16_t FormatTag; - int16_t Channels; - int32_t SampleRate; - int32_t BytesPerSec; - int16_t BlockAlign; - int16_t BitsPerSample; - char DataSig[4]; - int32_t DataSize; -}; - -//########################################################################## - -//! менеджер звуков -class CSoundManager -{ -public: - CSoundManager(); - ~CSoundManager(); - - SX_ALIGNED_OP_MEM - - void clear(); - - void init(HWND hWnd); - - void setMainVolume(float fVolume); - - //! структура данных для воспроизведения с задержками - struct CPlayDelay - { - CPlayDelay() - { - m_iCurrPlayDelay = 0; - m_uiPlayDelayStart = 0; - } - - //! структура для хранения данных о текущей настройке проигрывания - struct CTimeDelay - { - CTimeDelay(){ m_uiTime = 0; m_isDelay = false; } - CTimeDelay(UINT uiTime, bool isDelay) - { - m_uiTime = uiTime; m_isDelay = isDelay; - } - - //! время в млсек - UINT m_uiTime; - - //! это время задержки в проигрывании или нет? - bool m_isDelay; - }; - - //! массив настроек прогирывания - Array<CTimeDelay> m_aPlayDelay; - - //! текущий индекс в #m_aPlayDelay - int m_iCurrPlayDelay; - - //! стартовое время задержки в млсек (если засекали время) - UINT m_uiPlayDelayStart; - - }; - - //! структура данных базового понятия звука - struct CSoundBase - { - CSoundBase() - { - m_pSoundBuffer = 0; m_state = SOUND_OBJSTATE_STOP; m_isLooping = false; m_isPlayDelay = false; m_uiBytesPerSec = 0; m_fVolume = 1.f; m_fPan = 0; - } - - ~CSoundBase() - { - mem_release(m_pSoundBuffer); - } - - //! звуковой буфер инстанса - IDirectSoundBuffer8 *m_pSoundBuffer; - - //! количество байт в секунде - UINT m_uiBytesPerSec; - - //! состояние воспроизведения - SOUND_OBJSTATE m_state; - - //! зацикливать ли воспроизведение - bool m_isLooping; - - //! используется ли воспроизведение с задержками - bool m_isPlayDelay; - - //! объект с данными проигрывания - CPlayDelay oPlayDelay; - - //! громкость [0, 1] - float m_fVolume; - - //! смещение между ушами слушателя [-1, 1] - float m_fPan; - }; - - //! структура данных инстанса звука - struct CSoundInstance : public CSoundBase - { - CSoundInstance(){ m_pSoundBuffer = 0; m_uiBytesPerSec = 0; m_busy = SOUND_SNDINSTANCE_BUSY_FREE; m_state = SOUND_OBJSTATE_STOP; m_isPlayDelay = false; } - CSoundInstance(IDirectSoundBuffer8 *pBuffer, UINT uiBytesPerSec, const float3_t *vPos, SOUND_SNDINSTANCE_BUSY busy) - { - m_pSoundBuffer = pBuffer; - m_uiBytesPerSec = uiBytesPerSec; - if (vPos) - m_vPos = *vPos; - m_busy = busy; - m_state = SOUND_OBJSTATE_STOP; - m_isPlayDelay = false; - } - - //! позиция воспроизведения (если надо) - float3_t m_vPos; - - //! занят ли инстанс в данный момент #SOUND_SNDINSTANCE_BUSY - SOUND_SNDINSTANCE_BUSY m_busy; - }; - - //! расширенное понятие звука - struct CSound : public CSoundBase - { - CSound(); - ~CSound(); - SX_ALIGNED_OP_MEM - - //! путь загруженного звука - char m_szRPath[SOUND_MAX_SIZE_PATH]; - - //! идентификатор (номер в общем массиве звуков) - ID m_id; - - //! канал - ID m_idChannel; - - //! 3д воспроизвдеение звука? - bool m_is3d; - - /*! количество загрузок звука, в основном сделано для инстансовых, если один и тот же звук загружался несколько раз то он будет загружен единожды, но счетчик будет показывать колиество, - и звук удалиться только тогда когда последний объект его удалит - */ - int m_iCountLoad; - - //! изменение позиционирования звука, на сколько будет смещен звук при поворотах камеры к источнику звука, чем ближе к объекту тем меньше разница в позиционировании при поворотах - float m_fShiftPan; - - //! дистанция слышимости - float m_fDistAudible; - - //! разрешено ли создавать инстансы звука (false по дефолту) - bool m_isInst; - - //! потом чтения файла - FILE *m_pStream; - - //! поток для декодирования ogg - OggVorbis_File *m_pVorbisFile; - - //! массив инстансов - Array<CSoundInstance> m_aInstances; - - //! формат файла - SOUND_FILEFORMAT m_format; - - //! полный размер в байтах (для wav исключая заголовочную структуру) - UINT m_uiSizeFull; - - //! позиция источника звука (если используется без инстансов, хотя устанавливается главному и при инстансах) - float3 m_vPosition; - - //сброс громкости при отдалении на метр, т.е. count_volume = volume - dist * Damping % - //float Damping; - - //! оригинальная частота - UINT m_uiFrecOrigin; - - //! размер потока в байтах - UINT m_uiStreamSize; - - //! длина звука в секундах - int m_iLengthSec; - - //! количество каналов - int m_iChannelsCount; - - //! частота дискретизации - int m_iSampleRate; - - //! количество бит в сэмпле - int m_iBitsPerSample; - - //размеры сплитов потока - UINT m_uiSplit1Size; - UINT m_uiSplit2Size; - UINT m_uiSplit3Size; - - //заглушки для работы апдейта на каждый сплит в отдельности - bool m_isWork1; - bool m_isWork2; - bool m_isWork3; - bool m_isWork4; - - //! воспроизведение только началось? (для потока) - bool m_isStarting; - - //! номер текущего активного сплита - int m_iSplitActive; - - //! сколько раз был полностью перезагружен поток - int m_iRePlayCount; - - //! сколько раз нужно полностью перезагрузить поток чтоб дойти до конца - int m_iRePlayEndCount; - }; - - //********************************************************************** - - //! набор звуков, для случайного воспроизведения звуков из массива однотипных звуков - struct СSoundKit - { - СSoundKit(); - ~СSoundKit(); - - //! имя набора - char m_szName[SOUND_MAX_SIZE_SNDKIT_NAME]; - - //! объект набора - struct CSoundKitObject - { - //! идентификатор звука - ID m_id; - - //! массив задержек - Array<UINT> m_aDelays; - - //! громкость звука [0,1] - float m_fVolume; - }; - - //! массив звуков - Array<CSoundKitObject> m_aSounds; - - //! канал набора звуков - ID m_idChannel; - - //! 3d (true) или 2d (false) набор? - bool m_is3D; - - //! общая дистанция слышимости для 3д звуков - float m_fDistAudible; - }; - - //! создать набор - ID sndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT); - - ID sndkitCreateFromList(const char *szName, ID idChannel, Array<String> aStrings, bool is3D, float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT, float fVolume = 1.f); - - //! добавить звук в набор, если fDistAudible < 0 то будут задействованы настройки самого набора - void sndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume = 1.f, UINT *pArrDelay = 0, int iSizeArrDelay = 0); - - //! получить id по имени набора - ID sndkitGetID(const char *szName); - - //! получить номер канала - ID sndkitGetChannel(ID idSndKit); - - //! получить имя по id набора - void sndkitGetName(ID idSndKit, char *szName); - - //! удалить набор - void sndkitDelete(ID idSndKit); - - //! удалить все наборы - void sndkitDeleteAll(); - - /*! проиграть случайный звук - \note если набор 3д звуков, то позиция обязательна - \note id2 должен принимать либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука - если инстанс воспроизводимого звука заблокирован, то он не будет использоваться другими пока владелец его не разблокирует - \return возвращает упакованные значения порядкового номера звука (в массиве набора) в 32 старших битах и id инстанса звука в 32 младших битах - */ - uint64_t sndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos = 0, float fVolume = -1.f, float fPan = 0.f); - - //! остановить проигрывание звуков в наборе - void sndkitStop(ID idSndKit, uint64_t id2); - - //********************************************************************** - - //! добавить канал - void channelAdd(ID idChannel, bool isPlaying = false); - - //! существует ил канал - bool channelExists(ID idChannel); - - //! количество звуков в канале - int channelGetSndCount(ID idChannel); - - //! проигрывать звуки канала - void channelPlay(ID idChannel); - - //! проигрывается ли канал? - bool channelPlaying(ID idChannel); - - //! остановить проигрывание звуков канала - void channelStop(ID idChannel); - - //! проигрывать звуки только этого канала - void channelPlayOnly(ID idChannel); - - //! воспроизвести звук канала (используется внутри функций каналов для воспроизведения каналов) - void channelSndPlay(ID idChannel, ID idSound); - - //! остановить звук канала (используется внутри функций каналов для воспроизведения каналов) - void channelSndStop(ID idChannel, ID idSound); - - //********************************************************************** - - ID soundCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream = 0); - ID soundCreate3d(const char *szFile, ID idChannel, UINT uiSizeStream, float fDist); - - ID soundCreate2dInst(const char *szFile, ID idChannel); - ID soundCreate3dInst(const char *szFile, ID idChannel, float fDist); - - ID soundFind2dInst(const char *szFile, ID idChannel); - ID soundFind3dInst(const char *szFile, ID idChannel); - - /*! воспроизведение инстанса звука, если нужны задержки то надо их указывать в pArrDelay и iSizeArrDelay, иначе в обоих 0, - если нужен 3д звук (если это на самом деле 3д звук) то надо указать pPos, иначе 0 и будет 2д, для 2д по желанию можно указать громкость iVolume и смещение между ушами iPan - */ - ID soundInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume = 1.f, float fPan = 0.f); - - bool soundInstancePlaying(ID idSound, ID idInstance); - void soundInstanceStop(ID idSound, ID idInstance); - void soundInstanceFree(ID idSound, ID idInstance); - - bool soundIsInit(ID idSound); - void soundDelete(ID idSound); - - //! проиграть - void soundPlay(ID idSound, bool isLooping = false, UINT *pArrDelay = 0, int iSizeArrDelay = 0); - - //! инициализация масисва задержек для воспроизведения звука, если указать iSizeArrDelay = -1 тогда будут задействованы прошлые настройки - void soundInitPlayDelay(CSoundBase *pSndbase, UINT *pArrDelay, int iSizeArrDelay); - - //! продолжить воспроизведение (с задержками) остановленного звука - void soundResumePlayDelay(CSoundBase *pSndBase); - - //! приостановить - void soundPause(ID idSound); - - //! остановить - void soundStop(ID idSound); - - void soundSetState(ID idSound, SOUND_OBJSTATE state); - SOUND_OBJSTATE soundGetState(ID idSound); - - //текащая позиция проигрывания - void soundSetPosPlay(ID idSound, UINT uiPos); - UINT soundGetPosPlay(ID idSound); - - //громкость - void soundSetVolume(ID idSound, float fVolume); - float soundGetVolume(ID idSound); - - //позиционирование между динамиками - void soundSetPan(ID idSound, float fPan); - float soundGetPan(ID idSound); - - //частота - void soundSetFreqCurr(ID idSound, UINT uiFrec); - UINT soundGetFreqCurr(ID idSound); - UINT soundGetFreqOrigin(ID idSound); - - void soundSetPosWorld(ID idSound, const float3 *pPos); - void soundGetPosWorld(ID idSound, float3 *pPos); - - - //длина в секундах - int soundGetLengthSec(ID idSound); - - //байт в секунде - UINT soundGetBytesPerSec(ID idSound); - - //размер в байтах PCM данных - UINT soundGetSize(ID idSound); - - //путь до звукового файла - void soundGetFile(ID idSound, char *szPath); - - float soundGetDistAudible(ID idSound); - void soundSetDistAudible(ID idSound, float fDistAudible); - - void UpdatePlayDelay(CSoundBase *pSndBase); - - void update(const float3 *pViewPos, const float3 *pViewDir); - - SOUND_FILEFORMAT fileFormat(const char *szFile); - - int soundsGetPlayCount(); - int soundsGetLoadCount(); - -private: - - void load(CSound *pSnd, const char *szPath, SOUND_FILEFORMAT fmt); - - void loadWAV(CSound *pSnd, const char *szPath); - - void loadOGG(CSound *pSnd, const char *szPath); - - IDirectSoundBuffer8* soundBufferCreate(CSoundWaveHeader *pHeader); - - void soundDataWAVLoad(IDirectSoundBuffer8 *pBuffer, int iLockPos, FILE *pData, int iSize, UINT uiFlag = 0); - void soundDataOGGLoad(OggVorbis_File *pVorbisFile, IDirectSoundBuffer8 *pBuffer, int iLockPos, int iSize, UINT uiFlag); - - void reLoadSplit(ID id, UINT Pos, UINT Size); - - ID addSound(CSound *pSnd); - - //********************************************************************** - - //! массив со всеми звуковыми объектами - Array<CSound*> m_aSounds; - - //! ассоциативный массив всех 2д звуков arr[name] = id; - AssotiativeArray<AAStringNR, ID, false, 16> m_a2dInst; - - //! ассоциативный массив всех 3д звуков arr[name] = id; - AssotiativeArray<AAStringNR, ID, false, 16> m_a3dInst; - - //! массив наборов звуков - Array<СSoundKit*> m_aSoundKits; - - //! массив каналов - int m_aChannels[SOUND_CHANNELS_COUNT]; - - //! звуковое устройство - IDirectSound8 *m_pDeviceSound; - - //! первичный буфер - IDirectSoundBuffer *m_pPrimaryBuffer; - - //! количество проигрываемых звуков - int m_iSoundsPlayCount; - - //! количество загруженных звуков (с учетом как проигрывающихся так и простаивающих) - int m_iSoundsLoadCount; - - //! предыдущая позиция наблюдателя - float3 m_vOldViewPos; - - //! предыдущее направление взгляда наблюдателя - float3 m_vOldViewDir; -}; - -#endif diff --git a/source/score/sxscore.cpp b/source/score/sxscore.cpp deleted file mode 100644 index f22d61938..000000000 --- a/source/score/sxscore.cpp +++ /dev/null @@ -1,548 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -#define SXSCORE_VERSION 1 - -#include "sxscore.h" -#include "sound.h" - -#if !defined(DEF_STD_REPORT) -#define DEF_STD_REPORT -report_func g_fnReportf = DefReport; -#endif - -CSoundManager *g_pManagerSound = 0; - -#define SCORE_PRECOND(retval) if(!g_pManagerSound){LibReport(-1, "%s - sxsound is not init", GEN_MSG_LOCATION); return retval;} - -//########################################################################## - -SX_LIB_API long SSCore_0GetVersion() -{ - return SXSCORE_VERSION; -} - -SX_LIB_API void SSCore_Dbg_Set(report_func rf) -{ - g_fnReportf = rf; -} - -SX_LIB_API void SSCore_0Create(const char *szName, HWND hWnd, bool isUnic) -{ - if (szName && strlen(szName) > 1) - { - if (isUnic) - { - HANDLE hMutex = CreateMutex(NULL, FALSE, szName); - if (GetLastError() == ERROR_ALREADY_EXISTS) - { - CloseHandle(hMutex); - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - none unic name", GEN_MSG_LOCATION); - } - else - { - g_pManagerSound = new CSoundManager(); - g_pManagerSound->init(hWnd); - } - } - else - { - g_pManagerSound = new CSoundManager(); - g_pManagerSound->init(hWnd); - } - } - else - LibReport(REPORT_MSG_LEVEL_ERROR, "%s - not init argument [name]", GEN_MSG_LOCATION); -} - -SX_LIB_API void SSCore_AKill() -{ - mem_delete(g_pManagerSound); -} - -//############################################################################# - -SX_LIB_API void SSCore_Clear() -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->clear(); -} - - -SX_LIB_API void SSCore_Update(const float3 *pViewPos, const float3 *pViewDir) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->update(pViewPos, pViewDir); -} - -SX_LIB_API void SSCore_SetMainVolume(float fVolume) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->setMainVolume(fVolume); -} - -SX_LIB_API int SSCore_SndsGetCountPlay() -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundsGetPlayCount(); -} - -SX_LIB_API int SSCore_SndsGetCountLoad() -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundsGetLoadCount(); -} - -//########################################################################## - -SX_LIB_API void SSCore_ChannelAdd(ID idChannel, bool isPlaying) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->channelAdd(idChannel, isPlaying); -} - -SX_LIB_API bool SSCore_ChannelExists(ID idChannel) -{ - SCORE_PRECOND(false); - - return g_pManagerSound->channelExists(idChannel); -} - -SX_LIB_API int SSCore_ChannelGetSndCount(ID idChannel) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->channelGetSndCount(idChannel); -} - -SX_LIB_API void SSCore_ChannelPlay(ID idChannel) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->channelPlay(idChannel); -} - -SX_LIB_API void SSCore_ChannelPlayOnly(ID idChannel) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->channelPlayOnly(idChannel); -} - -SX_LIB_API bool SSCore_ChannelPlaying(ID idChannel) -{ - SCORE_PRECOND(false); - - return g_pManagerSound->channelPlaying(idChannel); -} - -SX_LIB_API void SSCore_ChannelStop(ID idChannel) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->channelStop(idChannel); -} - -//########################################################################## - -SX_LIB_API ID SSCore_SndCreate2d(const char *szFile, ID idChannel, UINT uiSizeStream) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundCreate2d(szFile, idChannel, uiSizeStream); -} - -SX_LIB_API ID SSCore_SndCreate3d(const char *szFile, ID idChannel, UINT uiSizeStream, float fDist) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundCreate3d(szFile, idChannel, uiSizeStream, fDist); -} - -SX_LIB_API ID SSCore_SndCreate2dInst(const char *szFile, ID idChannel) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundCreate2dInst(szFile, idChannel); -} - -SX_LIB_API ID SSCore_SndCreate3dInst(const char *szFile, ID idChannel, float fDist) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundCreate3dInst(szFile, idChannel, fDist); -} - -SX_LIB_API ID SSCore_SndFind2dInst(const char *szFile, ID idChannel) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundFind2dInst(szFile, idChannel); -} - -SX_LIB_API ID SSCore_SndFind3dInst(const char *szFile, ID idChannel) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundFind3dInst(szFile, idChannel); -} - - -SX_LIB_API ID SSCore_SndInstancePlay(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos, float fVolume, float fPan) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos, fVolume, fPan); -} - -/*SX_LIB_API ID SSCore_SndInstancePlay2d(ID idSound, bool isBlocked, bool isLooping, int iVolume, int iPan) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, 0, 0, 0, iVolume, iPan); -} - -SX_LIB_API ID SSCore_SndInstancePlayDelay2d(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, int iVolume, int iPan) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, 0, iVolume, iPan); -} - -SX_LIB_API ID SSCore_SndInstancePlay3d(ID idSound, bool isBlocked, bool isLooping, const float3 *pPos) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, 0, 0, pPos); -} - -SX_LIB_API ID SSCore_SndInstancePlayDelay3d(ID idSound, bool isBlocked, bool isLooping, UINT *pArrDelay, int iSizeArrDelay, const float3 *pPos) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->soundInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos); -}*/ - - -SX_LIB_API bool SSCore_SndInstancePlaying(ID idSound, ID idInstance) -{ - SCORE_PRECOND(false); - - return g_pManagerSound->soundInstancePlaying(idSound, idInstance); -} - -SX_LIB_API void SSCore_SndInstanceStop(ID idSound, ID idInstance) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundInstanceStop(idSound, idInstance); -} - -SX_LIB_API void SSCore_SndInstanceFree(ID idSound, ID idInstance) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundInstanceStop(idSound, idInstance); -} - - -SX_LIB_API bool SSCore_SndIsInit(ID idSound) -{ - SCORE_PRECOND(false); - - return g_pManagerSound->soundIsInit(idSound); -} - -SX_LIB_API void SSCore_SndDelete(ID idSound) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundDelete(idSound); -} - - -SX_LIB_API void SSCore_SndPlay(ID idSound, bool isLooping, UINT *pArrDelay, int iSizeArrDelay) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundPlay(idSound, isLooping, pArrDelay, iSizeArrDelay); -} - -/*SX_LIB_API void SSCore_SndPlayDelay(ID idSound, bool isLooping, UINT *pArrDelay, int iSizeArrDelay) -{ - SCORE_PRECOND(_VOID);*/ - - /*Array<UINT> aValues; - - UINT uiCurrVal = 0; - va_list va; - va_start(va, isLooping); - - uiCurrVal = va_arg(va, UINT); - while (uiCurrVal > 0) - { - aValues.push_back(uiCurrVal); - uiCurrVal = va_arg(va, UINT); - } - - va_end(va);*/ - - /*g_pManagerSound->soundPlayDelay(idSound, isLooping, pArrDelay, iSizeArrDelay); -}*/ - -SX_LIB_API void SSCore_SndPause(ID idSound) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundPause(idSound); -} - -SX_LIB_API void SSCore_SndStop(ID idSound) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundStop(idSound); -} - - -SX_LIB_API void SSCore_SndSetState(ID idSound, SOUND_OBJSTATE state) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetState(idSound, state); -} - -SX_LIB_API SOUND_OBJSTATE SSCore_SndGetState(ID idSound) -{ - SCORE_PRECOND(SOUND_OBJSTATE_STOP); - - return g_pManagerSound->soundGetState(idSound); -} - -SX_LIB_API void SSCore_SndSetPosPlay(ID idSound, UINT uiPosMls) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetPosPlay(idSound, uiPosMls); -} - -SX_LIB_API UINT SSCore_SndGetPosPlay(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetPosPlay(idSound); -} - - -SX_LIB_API void SSCore_SndSetVolume(ID idSound, float fVolume) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetVolume(idSound, fVolume); -} - -SX_LIB_API float SSCore_SndGetVolume(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetVolume(idSound); -} - - -SX_LIB_API void SSCore_SndSetPan(ID idSound, float fValue) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetPan(idSound, fValue); -} - -SX_LIB_API float SSCore_SndGetPan(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetPan(idSound); -} - - -SX_LIB_API void SSCore_SndSetCurrFreq(ID idSound, UINT fValue) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetFreqCurr(idSound, fValue); -} - -SX_LIB_API UINT SSCore_SndGetCurrFreq(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetFreqCurr(idSound); -} - -SX_LIB_API UINT SSCore_SndGetOriginFreq(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetFreqOrigin(idSound); -} - -SX_LIB_API void SSCore_SndSetPosWorld(ID idSound, const float3 *pPos) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetPosWorld(idSound, pPos); -} - -SX_LIB_API void SSCore_SndGetPosWorld(ID idSound, float3 *pPos) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundGetPosWorld(idSound, pPos); -} - - -SX_LIB_API int SSCore_SndGetLengthSec(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetLengthSec(idSound); -} - -SX_LIB_API UINT SSCore_SndGetBytesPerSec(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetBytesPerSec(idSound); -} - -SX_LIB_API UINT SSCore_SndGetSize(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetSize(idSound); -} - -SX_LIB_API void SSCore_SndGetFile(ID idSound, char *szPath) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundGetFile(idSound, szPath); -} - - -SX_LIB_API float SSCore_SndGetDistAudible(ID idSound) -{ - SCORE_PRECOND(0); - - return g_pManagerSound->soundGetDistAudible(idSound); -} - -SX_LIB_API void SSCore_SndSetDistAudible(ID idSound, float fValue) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->soundSetDistAudible(idSound, fValue); -} - -//########################################################################## - -SX_LIB_API ID SSCore_SndkitCreate(const char *szName, ID idChannel, bool is3D, float fDistAudible) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->sndkitCreate(szName, idChannel, is3D, fDistAudible); -} - -SX_LIB_API ID SSCore_SndkitCreateFromList(const char *szName, ID idChannel, bool is3D, float fDistAudible, float fVolume, const char *szFileOrList, ...) -{ - SCORE_PRECOND(-1); - - Array<String> aStrings; - // если в первой строке есть запятые тогда будем парсить строку - if (strstr(szFileOrList, ",")) - { - aStrings = StrExplode(szFileOrList, ","); - } - // иначе считываем все строчные аргументы - else if (szFileOrList) - { - const char *szStrCurr = 0; - va_list va; - va_start(va, szFileOrList); - - szStrCurr = szFileOrList; - while (szStrCurr) - { - aStrings.push_back(szStrCurr); - szStrCurr = va_arg(va, const char *); - } - - va_end(va); - } - - return g_pManagerSound->sndkitCreateFromList(szName, idChannel, aStrings, is3D, fDistAudible, fVolume); -} - -SX_LIB_API void SSCore_SndkitAddSound(ID idSndKit, const char *szFile, float fDistAudible, float fVolume, UINT *pArrDelay, int iSizeArrDelay) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->sndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay); -} - -SX_LIB_API uint64_t SSCore_SndkitPlay(ID idSndKit, uint64_t id2, const float3 *pPos, float fVolume, float fPan) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->sndkitPlay(idSndKit, id2, pPos, fVolume, fPan); -} - -SX_LIB_API void SSCore_SndkitStop(ID idSndKit, uint64_t id2) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->sndkitStop(idSndKit, id2); -} - -SX_LIB_API ID SSCore_SndkitGetID(const char *szName) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->sndkitGetID(szName); -} - -SX_LIB_API ID SSCore_SndkitGetChannel(ID idSndKit) -{ - SCORE_PRECOND(-1); - - return g_pManagerSound->sndkitGetChannel(idSndKit); -} - -SX_LIB_API void SSCore_SndkitGetName(ID idSndKit, char *szName) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->sndkitGetName(idSndKit, szName); -} - -SX_LIB_API void SSCore_SndkitDelete(ID idSndKit) -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->sndkitDelete(idSndKit); -} - -SX_LIB_API void SSCore_SndkitDeleteAll() -{ - SCORE_PRECOND(_VOID); - - g_pManagerSound->sndkitDeleteAll(); -} \ No newline at end of file diff --git a/source/score/sxscore.h b/source/score/sxscore.h deleted file mode 100644 index c9f5ebdd5..000000000 --- a/source/score/sxscore.h +++ /dev/null @@ -1,507 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -/*! -\file -Заголовочный файл sxscore - звукового ядра -*/ - -/*! \defgroup sxscore sxscore - звуковое ядро - - \note Звуковое ядро работает на технологиях: - - "DirectInput8" - - "Ogg Vorbis" (загрузка ogg файлов). - \note Загружаемые звуки wav и ogg формата (автоматическое определение и загрузка нужных данных). - \note Поддерживаются 2d и 3d звуки, полная загрузка и потоковое воспроизвдение. - \note Также для полностью загруженных (не потоковое воспроизведение) доступно воспроизвдение инстансов (копий), без выделения дополнительной равноценной памяти, и без дополнительных возможностей управления инстансом. -Однако источник выдачи инстансов должен быть создан одной из функций #SSCore_SndInstancePlay2d #SSCore_SndInstancePlay3d - \note Идентификация звука происходит на основании его числового идентификатора выдаваемого создаваемыми функциями (#SSCore_SndCreate2d/#SSCore_SndCreate2dInst #SSCore_SndCreate3d/#SSCore_SndCreate3dInst) и является константной, идентификатор является порядковым номером - \note каждый звук, который проигрывается не потоково, может проигрываться с задержками - \note каждый звук может загружаться с настройками прямо в строке, при этом настройки в строке будут приоритетными, формат строки следующий: -путь_до_файла_без_пробелов dдистанция_слышимости_в_метрах vгромкость_от_0_до_1 задержка_перед_проигрыванием_в_млсек задержка2_в_млсек ... \n -данные громкости и дальности должны быть первыми (но между собой у них нет правила), и только после них идут задержки \n -на пример: messages/artefact_lead.ogg d100 v1.0 300 300 300 \n -парсинг строки осуществляется на основании пробелов, то есть в имени файла недопустимы пробелы -@{*/ - -#ifndef __SXSCORE_H -#define __SXSCORE_H - -#if 1 - -#define SSCore_SndInstancePlay3d(...) -#define SSCore_SndPlay(...) -#define SSCore_SndCreate3dInst(...) (-1) -#define SSCore_SndCreate3d(...) (-1) -#define SSCore_SndSetPosWorld(...) -#define SSCore_ChannelPlay(...) -#define SSCore_ChannelStop(...) - - -#else -#include <gdefines.h> -#include <GRegisterIndex.h> - -#if defined(_DEBUG) -#pragma comment(lib, "sxcore_d.lib") -#else -#pragma comment(lib, "sxcore.lib") -#endif - -#undef SX_LIB_API -#define SX_LIB_API extern "C" __declspec (dllimport) -#include <core/sxcore.h> - -#ifdef SX_DLL -#undef SX_LIB_API -#define SX_LIB_API extern "C" __declspec (dllexport) -#endif - -//########################################################################## - -/*! \name Стандартные функции библиотеки -@{*/ - -//! возвращает версию подсистемы геометрии -SX_LIB_API long SSCore_0GetVersion(); - -//! установить новую функцию вывода сообщений -SX_LIB_API void SSCore_Dbg_Set(report_func fnFunc); - -//! инициализация подсистемы -SX_LIB_API void SSCore_0Create( - const char *szName, //!< имя - HWND hWnd, //!< хэндл окна к которому привязывается звук - bool isUnic = true //!< должна ли подсистема быть уникальной по имени - ); - -//! уничтожение подсистемы -SX_LIB_API void SSCore_AKill(); - -//!@} -#endif -//############################################################################# - -/*! размер абсолюного пути до директории с файлами */ -#define SOUND_MAX_SIZE_STDPATH 256 - -/*! размер относительного пути до файла со звуком */ -#define SOUND_MAX_SIZE_PATH 128 - -/*! размер полного пути до файла со звуком */ -#define SOUND_MAX_SIZE_FULLPATH (SOUND_MAX_SIZE_STDPATH + SOUND_MAX_SIZE_PATH) - -/*! минимально возможный размер потока для воспроизведения */ -#define SOUND_MIN_SIZE_STREAM (1024*64 ) - -/*! ошибочный идентификатор */ -#define SOUND_FAIL_ID -1 - - -/*! коэффициент смещения между ушами слушателя для 3d звуков */ -#define SOUND_SHIFTPAN_3D 0.1f - -/*! дистанция слышимости по умолчанию, в метрах */ -#define SOUND_DIST_AUDIBLE_DEFAULT 100 - - -/*! максимальное количество каналов */ -#define SOUND_CHANNELS_COUNT 100 - - -/*! упаковка двух int32_t в uint64_t */ -#define SOUND_ENCODE2ID(id1, id2)( (((uint64_t)((uint32_t)id1))<<32) | (uint32_t)id2 ) - -/*! извлечение первого int32_t из uint64_t из старших битов */ -#define SOUND_DECODE2ID_HI(id)( (int32_t)(uint32_t)(((uint64_t)id) >> 32) ) - -/*! извлечение первого int32_t из uint64_t из младших битов */ -#define SOUND_DECODE2ID_LO(id)( (int32_t)(uint32_t)(((uint64_t)id) & 0xFFFFFFFF) ) - - -/*! масимальная длина имени набора звуков */ -#define SOUND_MAX_SIZE_SNDKIT_NAME 128 - -/*! блокировать инстанс набора */ -#define SOUND_SNDKIT_INSTANCE_BLOCK -1 - -/*! не блокировать инстанс набора */ -#define SOUND_SNDKIT_INSTANCE_NOTBLOCK -2 - -//************************************************************************** - -/*! \name Данные для первичного буфера -@{*/ - -/*! количество каналов */ -#define SOUND_G_CHANELS_COUNT 2 - -/*! количество бит в секунду */ -#define SOUND_G_BITS_PER_SEC 48000 - -/*! количество бит в семпле */ -#define SOUND_G_BITS_PER_SAMPLE 32 - -//!@} - -/*! количество бит на сэмпл для ogg, возможно 8 или 16 */ -#define SOUND_OGG_BITS_PER_SAMPLE 16 - -/*! тип количества бит на сэмпл для ogg, 1 - для 8 бит, 2 - для 16 */ -#define SOUND_OGG_BITS_PER_SAMPLE_WORD SOUND_OGG_BITS_PER_SAMPLE/8 - -//############################################################################# - -//! форматы звукрвых файлов -enum SOUND_FILEFORMAT -{ - SOUND_FILEFORMAT_UNKNOWN, //!< не известный формат - SOUND_FILEFORMAT_WAV, //!< wave формат - SOUND_FILEFORMAT_OGG, //!< ogg формат -}; - -//! состояния воспроизведения звукового объекта -enum SOUND_OBJSTATE -{ - SOUND_OBJSTATE_STOP, //!< остановлен - SOUND_OBJSTATE_PAUSE, //!< приостановлен - SOUND_OBJSTATE_PLAY, //!< проигрывается -}; - -//! остояние занятости инстансов -enum SOUND_SNDINSTANCE_BUSY -{ - SOUND_SNDINSTANCE_BUSY_FREE, /*!< свободный */ - SOUND_SNDINSTANCE_BUSY_TEMP, /*!< времено занятый */ - SOUND_SNDINSTANCE_BUSY_LOCKED, /*!< заблокированный владельцем */ -}; - -//! значения каналов -enum SOUND_CHANNEL -{ - SOUND_CHANNEL_NONE = -1, /*!< значение не инициализованного канала */ - SOUND_CHANNEL_STOP = 0, /*!< значение не проигрывающегося в данный момент канала */ - SOUND_CHANNEL_PLAY = 1, /*!< значение проигрывающегося в данный момент канала */ -}; - -//############################################################################# -#if 0 -//! очистка всего списка звуков (полное их удаление) -SX_LIB_API void SSCore_Clear(); - -//! обновление состояний всех звуков -SX_LIB_API void SSCore_Update( - const float3 *pViewPpos,//!< текущая позиция наблюдателя - const float3 *pViewDir //!< текущее направление взгляда - ); - -//! установка общей громкости -SX_LIB_API void SSCore_SetMainVolume(float fVolume); - -//! количество проигрываемых на данный момент звуков -SX_LIB_API int SSCore_SndsGetCountPlay(); - -//! количество загруженных на данный момент звуков -SX_LIB_API int SSCore_SndsGetCountLoad(); - -//########################################################################## - -//! добавить канал -SX_LIB_API void SSCore_ChannelAdd(ID idChannel, bool isPlaying = false); - -//! существует ли канал -SX_LIB_API bool SSCore_ChannelExists(ID idChannel); - -//! количество звуков в канале -SX_LIB_API int SSCore_ChannelGetSndCount(ID idChannel); - -//! проигрывать звуки канала -SX_LIB_API void SSCore_ChannelPlay(ID idChannel); - -//! проигрывать звуки только этого канала -SX_LIB_API void SSCore_ChannelPlayOnly(ID idChannel); - -//! проигрывается ли канал? -SX_LIB_API bool SSCore_ChannelPlaying(ID idChannel); - -//! остановить проигрывание звуков канала -SX_LIB_API void SSCore_ChannelStop(ID idChannel); - -//############################################################################### - -//! загрузка 2d (фонового) звука -SX_LIB_API ID SSCore_SndCreate2d( - const char *szFile, //!< путь до файла, относительно стандартного - ID idChannel, //!< идентификатор канала - UINT uiSizeStream = 0 //!< размер потока в байтах для потокового воспроизведения, если 0 тогда полностью грузить в память - ); - -//! загрузка 3d звука -SX_LIB_API ID SSCore_SndCreate3d( - const char *szFile, //!< путь до файла, относительно стандартного - ID idChannel, //!< идентификатор канала - UINT uiSizeStream, //!< размер потока в байтах для потокового воспроизведения, если 0 тогда полностью грузить в память - float fDist //!< радиус слышимости в метрах - ); - -//############################################################################### - -//! загрузка 2d звукового файла и пометка его как объект выдающий инстансы, аргументы аналогичны #SSCore_SndCreate2d -SX_LIB_API ID SSCore_SndCreate2dInst(const char *szFile, ID idChannel); - -//! загрузка 3d звукового файла и пометка его как объект выдающий инстансы, аргументы аналогичны #SSCore_SndCreate3d -SX_LIB_API ID SSCore_SndCreate3dInst(const char *szFile, ID idChannel, float fDist); - -//************************************************************************** - -//! поиск 2d звука (выдающего инстансы) по относительному пути загрузки,возвращает его ID (в случае успеха) иначе <0 -SX_LIB_API ID SSCore_SndFind2dInst(const char *szFile, ID idChannel); - -//! поиск 3d звука (выдающего инстансы) по относительному пути загрузки,возвращает его ID (в случае успеха) иначе <0 -SX_LIB_API ID SSCore_SndFind3dInst(const char *szFile, ID idChannel); - -//************************************************************************** - -/*! воспроизведение инстанса звука, если нужны задержки то надо их указывать в pArrDelay и iSizeArrDelay, иначе в обоих 0, если указать iSizeArrDelay = -1 тогда будут задействованы предыдущие настройки -если нужен 3д звук (если это на самом деле 3д звук) то надо указать pPos, иначе 0 и будет 2д, для 2д по желанию можно указать громкость iVolume и смещение между ушами iPan -*/ -SX_LIB_API ID SSCore_SndInstancePlay( - ID idSound, //!< идентификатор звука - bool isBlocked, //!< блокировать ли файл? если true то вернет id который будет занят до тех пор пока его не освободит владалец через #SSCore_SndInstanceFree - bool isLooping, //!< зацикливать ли воспроизведение звука? если да то звук будет заблокирован, а возвращенный id будет приндалежать вызывавшему и именно он несет ответсвенность за остановку и освобождение инстанса - UINT *pArrDelay, //!< массив задержек в млсек, первое значение задержка перед воспроизведением - int iSizeArrDelay, //!< размер #pArrDelay - const float3 *pPos, //!< если это 3д звук то позиция обязательна, если 2д то нужно указать NULL - float fVolume = 1.f, //!< громкость [0, 1] - float fPan = 0.f //!< смещение между ушами [-1, 1] - ); - -//! воспроизведение инстанса 2d звука, аргументы аналогичны #SSCore_SndInstancePlay -#define SSCore_SndInstancePlay2d(idSound, isBlocked, isLooping, iVolume, iPan) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, 0, 0, 0, iVolume, iPan)) - -//! воспроизведение инстанса 2d звука с задержками, аргументы аналогичны #SSCore_SndInstancePlay -#define SSCore_SndInstancePlayDelay2d(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, iVolume, iPan) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, 0, iVolume, iPan)) - -//! воспроизведение инстанса 3d звука, аргументы аналогичны #SSCore_SndInstancePlay -#define SSCore_SndInstancePlay3d(idSound, isBlocked, isLooping, pPos) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, 0, 0, pPos)) - -//! воспроизведение инстанса 3d звука с задержками, аргументы аналогичны #SSCore_SndInstancePlay -#define SSCore_SndInstancePlayDelay3d(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos) (SSCore_SndInstancePlay(idSound, isBlocked, isLooping, pArrDelay, iSizeArrDelay, pPos)) - -//************************************************************************** - -//! проигрывается ли инстанс звука с id idInstance -SX_LIB_API bool SSCore_SndInstancePlaying( - ID idSound, //!< идентификатор звука - ID idInstance //!< идентификатор инстанса звука который был возвращен функцией #SSCore_SndInstancePlay2d или #SSCore_SndInstancePlay3d - ); - -//! остановка инстанса звука с id idInstance -SX_LIB_API void SSCore_SndInstanceStop(ID idSound, ID idInstance); - -//! освобождает инстанс звука с id idInstance, будет иметь статус занятости #SOUND_SNDINSTANCE_BUSY_TEMP если был #SOUND_SNDINSTANCE_BUSY_LOCKED, а при следующем обновлении если инстанс не проигрывается статус поменяется на #SOUND_SNDINSTANCE_BUSY_FREE -SX_LIB_API void SSCore_SndInstanceFree(ID idSound, ID idInstance); - -//############################################################################### - -//! инициализирован ли звук с идентификатором id -SX_LIB_API bool SSCore_SndIsInit(ID idSound); - -//! удалить звук по его id -SX_LIB_API void SSCore_SndDelete(ID idSound); - -//############################################################################### - -//! воспроизвести звук, isLooping зацикливать ли воспроизведение -SX_LIB_API void SSCore_SndPlay( - ID idSound, //!< идентификатор звука - bool isLooping = false, //!< зацикливать ли воспроизведение? - UINT *pArrDelay = 0, //!< массив задержек в млсек, первое значение задержка перед воспроизведением - int iSizeArrDelay = 0 //!< размер массива pArrDelay, если указать iSizeArrDelay = -1 тогда будут задействованы предыдущие настройки - ); - -//! приостановить -SX_LIB_API void SSCore_SndPause(ID idSound); - -//! остановить -SX_LIB_API void SSCore_SndStop(ID idSound); - - -//! устанавливает состояние проигрывания звука -SX_LIB_API void SSCore_SndSetState(ID idSound, SOUND_OBJSTATE state); - -//! возвращает состояние проигрывания звука на данный момент -SX_LIB_API SOUND_OBJSTATE SSCore_SndGetState(ID idSound); - -//************************************************************************** - -//! устанавить позицию проигрывания -SX_LIB_API void SSCore_SndSetPosPlay( - ID idSound, //!< идентификатор звука - UINT uiPosMls //!< значение позиции в млсек - ); - -//! возвращает позицию проигрывания -SX_LIB_API UINT SSCore_SndGetPosPlay(ID idSound); - -//! устанавить громкость -SX_LIB_API void SSCore_SndSetVolume( - ID idSound, //!< идентификатор звука - float fVolume //!< значение громкости [0, 1] - ); - -//! возвращает громкость [0, 1] -SX_LIB_API float SSCore_SndGetVolume(ID idSound); - -//! установка позиционирования между ушами -SX_LIB_API void SSCore_SndSetPan( - ID idSound, //!< идентификатор звука - float fValue //!< значение позиционирования [-1, 1] - ); - -//! возвращает позиционирование между ушами [-1, 1] -SX_LIB_API float SSCore_SndGetPan(ID idSound); - - -//! установка частоты воспроизведения -SX_LIB_API void SSCore_SndSetCurrFreq(ID idSound, UINT uiValue); - -//! возвращает текущую частоту воспроизведения -SX_LIB_API UINT SSCore_SndGetCurrFreq(ID idSound); - -//! возвращает оригинальную частоту воспроизведения -SX_LIB_API UINT SSCore_SndGetOriginFreq(ID idSound); - - -//! установка мировой позиции звука (только для 3d звуков) -SX_LIB_API void SSCore_SndSetPosWorld(ID idSound, const float3 *pPos); - -//! возвращает мировую позицию звука (только для 3d звуков) -SX_LIB_API void SSCore_SndGetPosWorld(ID idSound, float3 *pPos); - - -//! длина в секундах -SX_LIB_API int SSCore_SndGetLengthSec(ID idSound); - -//! количество байт в секунде -SX_LIB_API UINT SSCore_SndGetBytesPerSec(ID idSound); - -//! размер в байтах PCM данных -SX_LIB_API UINT SSCore_SndGetSize(ID idSound); - -//! относительный путь до звукового файла -SX_LIB_API void SSCore_SndGetFile(ID idSound, char *szPath); - - -//! возвращает дистанцию слышимости -SX_LIB_API float SSCore_SndGetDistAudible(ID idSound); - -//! установка дистанции слышимости в метрах -SX_LIB_API void SSCore_SndSetDistAudible(ID idSound, float fVfalue); - -//!@} - -//############################################################################### - -/*! \name Наборы звуков для воспроизведения случайного звука из набора - \note Все звуки создаются инстансовыми -@{*/ - -//! создать набор звуков -SX_LIB_API ID SSCore_SndkitCreate( - const char *szName, //!< имя набора - ID idChannel, //!< id канала - bool is3D, //!< набор 3д звуков? - float fDistAudible = SOUND_DIST_AUDIBLE_DEFAULT //!< дистанция слышимости - ); - -//! загрузить список звуков (с настройками) из строки либо из строк -SX_LIB_API ID SSCore_SndkitCreateFromList( - const char *szName, //!< имя набора - ID idChannel, //!< id канала - bool is3D, //!< набор 3д звуков? - float fDistAudible, //!< дистанция слышимости - float fVolume, //!< громкость [0, 1] - const char *szFileOrList, //!< строка с первым файлом и настройками (последующие аргументы учитываются), либо строка со всеми файлами (через запятую) и настройками (последующие аргументы не учитываются) - ... //!< если #szFileOrList один файл тогда здесь должны быть строки с файлами до звуков (с настройками) - ); - -//************************************************************************** - -//! добавить звук в набор -SX_LIB_API void SSCore_SndkitAddSound( - ID idSndKit, //!< id набора - const char *szFile, //!< путь к файлу звука - float fDistAudible, //!< дистанция слышимости для 3d звуков, для 2d можно просто 0, если < 0 тогда установит то значение которое было передано в #SSCore_SndkitCreate - float fVolume = 1.f, //!< громскость [0, 1] - UINT *pArrDelay = 0, //!< массив задержек - int iSizeArrDelay = 0 //!< количество элементов в #pArrDelay - ); - -//! добавить в набор 2d звук -#define SSCore_SndkitAddSound2d(idSndKit, szFile, fVolume) (SSCore_SndkitAddSound(idSndKit, szFile, 0, fVolume, 0, 0)) - -//! добавить в набор 2d звук с задержками при воспроизведении -#define SSCore_SndkitAddSoundDelay2d(idSndKit, szFile, fVolume, pArrDelay, iSizeArrDelay) (SSCore_SndkitAddSound(idSndKit, szFile, 0, fVolume, pArrDelay, iSizeArrDelay)) - -//! добавить в набор 3d звук -#define SSCore_SndkitAddSound3d(idSndKit, szFile, fDistAudible, fVolume) (SSCore_SndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, 0, 0)) - -//! добавить в набор 3d звук с задержками при воспроизведении -#define SSCore_SndkitAddSoundDelay3d(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay) (SSCore_SndkitAddSound(idSndKit, szFile, fDistAudible, fVolume, pArrDelay, iSizeArrDelay)) - -//************************************************************************** - -/*! проиграть случайны звук - \note если набор 3д звуков, то позиция обязательна - \note id2 должен принимать либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука -если инстанс воспроизводимого звука заблокирован, то он не будет использоваться другими пока владелец его не разблокирует -если было передано упакованное значение, и инстанс уже отыграл свое, значит он разблокируется и будет воспроизведен другой инстанс и заблокируется - \return возвращает упакованные значения порядкового номера звука (в массиве набора) в 32 старших битах и id инстанса звука в 32 младших битах -*/ -SX_LIB_API uint64_t SSCore_SndkitPlay( - ID idSndKit, //!< id набора - uint64_t id2, //!< либо #SOUND_SNDKIT_INSTANCE_BLOCK либо #SOUND_SNDKIT_INSTANCE_NOTBLOCK либо должен быть упакованным значением идентификаторов заблокированного инстанса звука - const float3 *pPos = 0, //!< если 3d, позиция звука в пространстве - float fVolume = -1.f, //!< громкость [0, 1], если <0 тогда будет использовано ранее заданное значение - float fPan = 0.f //!< если 2d, смещение между ушами [-1, 1] - ); - -//! проиграть случайны звук из 2d набора, аргументы аналогичны #SSCore_SndkitPlay -#define SSCore_SndkitPlay2d(idSndKit, id2, fVolume, fPan) (SSCore_SndkitPlay(idSndKit, id2, 0, fVolume, fPan)) - -//! проиграть случайны звук из 3d набора, аргументы аналогичны #SSCore_SndkitPlay -#define SSCore_SndkitPlay3d(idSndKit, id2, pPos) (SSCore_SndkitPlay(idSndKit, id2, pPos)) - -//! остановить проигрывание звуков в наборе -SX_LIB_API void SSCore_SndkitStop( - ID idSndKit, //!< id набора - uint64_t id2 //!< результат SSCore_SndkitPlay если параметр id2 имел значение отличное от #SOUND_SNDKIT_INSTANCE_NOTBLOCK - ); - -//************************************************************************** - -//! получить id по имени набора -SX_LIB_API ID SSCore_SndkitGetID(const char *szName); - -//! получить номер канала -SX_LIB_API ID SSCore_SndkitGetChannel(ID idSndKit); - -//! получить имя по id набора -SX_LIB_API void SSCore_SndkitGetName(ID idSndKit, char *szName); - -//! удалить набор -SX_LIB_API void SSCore_SndkitDelete(ID idSndKit); - -//! удалить все наборы -SX_LIB_API void SSCore_SndkitDeleteAll(); - -//!@} -#endif - -#endif - -//!@} sxscore diff --git a/source/score/sxscore_dll.cpp b/source/score/sxscore_dll.cpp deleted file mode 100644 index a34ff74f6..000000000 --- a/source/score/sxscore_dll.cpp +++ /dev/null @@ -1,24 +0,0 @@ - -/*********************************************************** -Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018 -See the license in LICENSE -***********************************************************/ - -#include <windows.h> - -BOOL APIENTRY DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - -- GitLab