test_audio_integration.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include "game/audio/AudioEventHandler.h"
  2. #include "game/audio/AudioSystem.h"
  3. #include "game/core/component.h"
  4. #include "game/core/event_manager.h"
  5. #include "game/core/world.h"
  6. #include "game/systems/selection_system.h"
  7. #include <QCoreApplication>
  8. #include <QTimer>
  9. #include <iostream>
  10. int main(int argc, char *argv[]) {
  11. QCoreApplication app(argc, argv);
  12. std::cout << "=== Audio Event Integration Test ===" << std::endl;
  13. std::cout << "\n1. Initializing Audio System..." << std::endl;
  14. auto &audioSystem = AudioSystem::getInstance();
  15. if (!audioSystem.initialize()) {
  16. std::cerr << "Failed to initialize audio system!" << std::endl;
  17. return 1;
  18. }
  19. std::cout << " ✓ Audio System initialized" << std::endl;
  20. std::cout << "\n2. Creating World and Systems..." << std::endl;
  21. Engine::Core::World world;
  22. Game::Systems::SelectionSystem selectionSystem;
  23. std::cout << " ✓ World and SelectionSystem created" << std::endl;
  24. std::cout << "\n3. Initializing Audio Event Handler..." << std::endl;
  25. Game::Audio::AudioEventHandler handler(&world);
  26. if (!handler.initialize()) {
  27. std::cerr << "Failed to initialize audio event handler!" << std::endl;
  28. return 1;
  29. }
  30. std::cout << " ✓ Audio Event Handler initialized" << std::endl;
  31. std::cout << "\n4. Loading placeholder audio resources..." << std::endl;
  32. audioSystem.loadSound("archer_voice", "assets/audio/voices/archer_voice.wav");
  33. audioSystem.loadSound("knight_voice", "assets/audio/voices/knight_voice.wav");
  34. audioSystem.loadSound("spearman_voice",
  35. "assets/audio/voices/spearman_voice.wav");
  36. audioSystem.loadMusic("peaceful", "assets/audio/music/peaceful.wav");
  37. audioSystem.loadMusic("combat", "assets/audio/music/combat.wav");
  38. std::cout << " ✓ Audio resources loaded" << std::endl;
  39. std::cout << "\n5. Configuring unit type mappings..." << std::endl;
  40. handler.loadUnitVoiceMapping("archer", "archer_voice");
  41. handler.loadUnitVoiceMapping("knight", "knight_voice");
  42. handler.loadUnitVoiceMapping("spearman", "spearman_voice");
  43. handler.loadAmbientMusic(Engine::Core::AmbientState::PEACEFUL, "peaceful");
  44. handler.loadAmbientMusic(Engine::Core::AmbientState::COMBAT, "combat");
  45. std::cout << " ✓ Mappings configured" << std::endl;
  46. std::cout << "\n6. Creating test units..." << std::endl;
  47. auto *archerEntity = world.createEntity();
  48. auto *archerUnit = archerEntity->addComponent<Engine::Core::UnitComponent>();
  49. archerUnit->unitType = "archer";
  50. archerUnit->health = 100;
  51. archerUnit->maxHealth = 100;
  52. auto *knightEntity = world.createEntity();
  53. auto *knightUnit = knightEntity->addComponent<Engine::Core::UnitComponent>();
  54. knightUnit->unitType = "knight";
  55. knightUnit->health = 150;
  56. knightUnit->maxHealth = 150;
  57. std::cout << " ✓ Created archer (ID: " << archerEntity->getId()
  58. << ") and knight (ID: " << knightEntity->getId() << ")"
  59. << std::endl;
  60. std::cout << "\n7. Testing unit selection with voice playback..."
  61. << std::endl;
  62. std::cout << " - Selecting archer..." << std::endl;
  63. selectionSystem.selectUnit(archerEntity->getId());
  64. std::cout
  65. << " ✓ Archer selected (should trigger archer_voice sound playback)"
  66. << std::endl;
  67. std::cout << " - Selecting knight..." << std::endl;
  68. selectionSystem.selectUnit(knightEntity->getId());
  69. std::cout
  70. << " ✓ Knight selected (should trigger knight_voice sound playback)"
  71. << std::endl;
  72. std::cout << "\n8. Testing ambient state changes..." << std::endl;
  73. std::cout << " - Changing to COMBAT state..." << std::endl;
  74. Engine::Core::EventManager::instance().publish(
  75. Engine::Core::AmbientStateChangedEvent(
  76. Engine::Core::AmbientState::COMBAT,
  77. Engine::Core::AmbientState::PEACEFUL));
  78. std::cout << " ✓ State changed (should trigger combat music)" << std::endl;
  79. std::cout << " - Changing back to PEACEFUL state..." << std::endl;
  80. Engine::Core::EventManager::instance().publish(
  81. Engine::Core::AmbientStateChangedEvent(
  82. Engine::Core::AmbientState::PEACEFUL,
  83. Engine::Core::AmbientState::COMBAT));
  84. std::cout << " ✓ State changed (should trigger peaceful music)"
  85. << std::endl;
  86. std::cout << "\n9. Verifying event statistics..." << std::endl;
  87. auto unitSelectedStats = Engine::Core::EventManager::instance().getStats(
  88. std::type_index(typeid(Engine::Core::UnitSelectedEvent)));
  89. std::cout << " ✓ UnitSelectedEvent subscribers: "
  90. << unitSelectedStats.subscriberCount << std::endl;
  91. std::cout << " ✓ UnitSelectedEvent published: "
  92. << unitSelectedStats.publishCount << " times" << std::endl;
  93. auto ambientStats = Engine::Core::EventManager::instance().getStats(
  94. std::type_index(typeid(Engine::Core::AmbientStateChangedEvent)));
  95. std::cout << " ✓ AmbientStateChangedEvent subscribers: "
  96. << ambientStats.subscriberCount << std::endl;
  97. std::cout << " ✓ AmbientStateChangedEvent published: "
  98. << ambientStats.publishCount << " times" << std::endl;
  99. std::cout << "\n10. Shutting down..." << std::endl;
  100. handler.shutdown();
  101. audioSystem.shutdown();
  102. std::cout << " ✓ All systems shutdown" << std::endl;
  103. std::cout << "\n=== All integration tests passed! ===" << std::endl;
  104. std::cout << "\nNote: Audio playback may not be audible in headless "
  105. "environments."
  106. << std::endl;
  107. QTimer::singleShot(0, &app, &QCoreApplication::quit);
  108. return app.exec();
  109. }