ASAPCabinetFE
 
Loading...
Searching...
No Matches
asset_manager.h
1#ifndef ASSET_MANAGER_H
2#define ASSET_MANAGER_H
3
4#include "tables/itable_loader.h"
5#include "tables/table_data.h"
6#include "sound/isound_manager.h"
7#include "render/ivideo_player.h"
9#include "texture_cache.h"
10#include "video_player_cache.h"
11#include "title_renderer.h"
12#include <SDL.h>
13#include <SDL_ttf.h>
14#include <memory>
15#include <vector>
16
17class IConfigService;
18class IWindowManager;
19
21public:
22 AssetManager(SDL_Renderer* playfield, SDL_Renderer* backglass, SDL_Renderer* dmd, SDL_Renderer* topper, TTF_Font* f, ISoundManager* soundManager);
23 ~AssetManager() override = default;
24
25 SDL_Texture* getPlayfieldTexture() override { return playfieldTexture; }
26 SDL_Texture* getWheelTexture(SDL_Renderer* renderer) override {
27 if (renderer == playfieldRenderer) return playfieldWheelTexture;
28 if (renderer == backglassRenderer) return backglassWheelTexture;
29 if (renderer == dmdRenderer) return dmdWheelTexture;
30 if (renderer == topperRenderer) return topperWheelTexture;
31 return nullptr;
32 }
33 SDL_Texture* getBackglassTexture() override { return backglassTexture; }
34 SDL_Texture* getDmdTexture() override { return dmdTexture; }
35 SDL_Texture* getTopperTexture() override { return topperTexture; }
36 SDL_Texture* getTitleTexture(SDL_Renderer* renderer) override {
37 if (renderer == playfieldRenderer) return playfieldTitleTexture;
38 if (renderer == backglassRenderer) return backglassTitleTexture;
39 if (renderer == dmdRenderer) return dmdTitleTexture;
40 if (renderer == topperRenderer) return topperTitleTexture;
41 return nullptr;
42 }
43 IVideoPlayer* getPlayfieldVideoPlayer() override { return playfieldVideoPlayer.get(); }
44 IVideoPlayer* getBackglassVideoPlayer() override { return backglassVideoPlayer.get(); }
45 IVideoPlayer* getDmdVideoPlayer() override { return dmdVideoPlayer.get(); }
46 IVideoPlayer* getTopperVideoPlayer() override { return topperVideoPlayer.get(); }
47 IConfigService* getSettingsManager() override { return configManager_; }
48 SDL_Rect getTitleRect() override { return titleRenderer_->getTitleRect(); }
49 void setTitlePosition(int x, int y) override { titleRenderer_->setTitlePosition(x, y); }
50 void setFont(TTF_Font* font) override { titleRenderer_->setFont(font); }
51 void reloadTitleTexture(const std::string& title, SDL_Color color, SDL_Rect& titleRect) override;
52 void reloadAssets(IWindowManager* windowManager, TTF_Font* font, const std::vector<TableData>& tables, size_t index) override;
53 void setSettingsManager(IConfigService* cm) override;
54 void loadTableAssets(size_t index, const std::vector<TableData>& tables) override;
55 void clearOldVideoPlayers() override;
56 void cleanupVideoPlayers() override;
57 void setSoundManager(ISoundManager* soundManager) override;
58 void playTableMusic(size_t index, const std::vector<TableData>& tables) override;
59 void applyVideoAudioSettings() override;
60 void clearVideoCache();
61 void clearTextureCache();
62
63 SDL_Renderer* getPlayfieldRenderer() { return playfieldRenderer; }
64 SDL_Renderer* getBackglassRenderer() { return backglassRenderer; }
65 SDL_Renderer* getDMDRenderer() { return dmdRenderer; }
66 SDL_Renderer* getTopperRenderer() { return topperRenderer; }
67 void setPlayfieldRenderer(SDL_Renderer* renderer) { playfieldRenderer = renderer; }
68 void setBackglassRenderer(SDL_Renderer* renderer) { backglassRenderer = renderer; }
69 void setDMDRenderer(SDL_Renderer* renderer) { dmdRenderer = renderer; }
70 void setTopperRenderer(SDL_Renderer* renderer) { topperRenderer = renderer; }
71
72private:
73 struct WindowAssetInfo {
74 SDL_Renderer* renderer;
75 SDL_Texture*& texture;
76 SDL_Texture*& wheelTexture;
77 SDL_Texture*& titleTexture;
78 std::unique_ptr<IVideoPlayer>& videoPlayer;
79 std::string& imagePath;
80 std::string& wheelImagePath;
81 std::string& videoPath;
82 int& mediaWidth;
83 int& mediaHeight;
84 bool show;
85 const char* name;
86 const std::string& tableImage;
87 const std::string& tableVideo;
88 };
89
90 SDL_Texture* playfieldTexture;
91 SDL_Texture* playfieldWheelTexture;
92 SDL_Texture* playfieldTitleTexture;
93 SDL_Texture* backglassTexture;
94 SDL_Texture* backglassWheelTexture;
95 SDL_Texture* backglassTitleTexture;
96 SDL_Texture* dmdTexture;
97 SDL_Texture* dmdWheelTexture;
98 SDL_Texture* dmdTitleTexture;
99 SDL_Texture* topperTexture;
100 SDL_Texture* topperWheelTexture;
101 SDL_Texture* topperTitleTexture;
102 std::unique_ptr<IVideoPlayer> playfieldVideoPlayer;
103 std::unique_ptr<IVideoPlayer> backglassVideoPlayer;
104 std::unique_ptr<IVideoPlayer> dmdVideoPlayer;
105 std::unique_ptr<IVideoPlayer> topperVideoPlayer;
106 SDL_Renderer* playfieldRenderer;
107 SDL_Renderer* backglassRenderer;
108 SDL_Renderer* dmdRenderer;
109 SDL_Renderer* topperRenderer;
110 ISoundManager* soundManager_;
111 std::string currentPlayfieldVideoPath_;
112 std::string currentBackglassVideoPath_;
113 std::string currentDmdVideoPath_;
114 std::string currentTopperVideoPath_;
115 IConfigService* configManager_;
116 std::unique_ptr<ITableLoader> tableLoader_;
117 std::string currentPlayfieldImagePath_;
118 std::string currentPlayfieldWheelImagePath_;
119 std::string currentBackglassImagePath_;
120 std::string currentBackglassWheelImagePath_;
121 std::string currentDmdImagePath_;
122 std::string currentDmdWheelImagePath_;
123 std::string currentTopperImagePath_;
124 std::string currentTopperWheelImagePath_;
125 int currentPlayfieldMediaWidth_ = 0;
126 int currentPlayfieldMediaHeight_ = 0;
127 int currentBackglassMediaWidth_ = 0;
128 int currentBackglassMediaHeight_ = 0;
129 int currentDmdMediaWidth_ = 0;
130 int currentDmdMediaHeight_ = 0;
131 int currentTopperMediaWidth_ = 0;
132 int currentTopperMediaHeight_ = 0;
133
134 std::unique_ptr<TextureCache> textureCache_;
135 std::unique_ptr<VideoPlayerCache> videoPlayerCache_;
136 std::unique_ptr<TitleRenderer> titleRenderer_;
137};
138
139#endif // ASSET_MANAGER_H
Definition asset_manager.h:20
void setTitlePosition(int x, int y) override
Sets the title's position on the display.
Definition asset_manager.h:49
SDL_Texture * getTopperTexture() override
Retrieves the texture used for the topper display.
Definition asset_manager.h:35
SDL_Texture * getBackglassTexture() override
Retrieves the texture used for the backglass.
Definition asset_manager.h:33
void setSoundManager(ISoundManager *soundManager) override
Sets the sound manager for audio playback.
Definition asset_manager.cpp:47
IVideoPlayer * getDmdVideoPlayer() override
Retrieves the video player associated with the dot matrix display (DMD).
Definition asset_manager.h:45
void reloadTitleTexture(const std::string &title, SDL_Color color, SDL_Rect &titleRect) override
Reloads the title texture using a new title string and color, updating the title rectangle accordingl...
Definition asset_manager.cpp:74
SDL_Texture * getWheelTexture(SDL_Renderer *renderer) override
Retrieves the texture used for the wheel for a specific renderer.
Definition asset_manager.h:26
void setFont(TTF_Font *font) override
Sets the current font for text rendering.
Definition asset_manager.h:50
void playTableMusic(size_t index, const std::vector< TableData > &tables) override
Plays table-specific music.
Definition asset_manager.cpp:52
IConfigService * getSettingsManager() override
Retrieves the configuration service that manages application settings.
Definition asset_manager.h:47
void cleanupVideoPlayers() override
Cleans up video players, releasing allocated resources appropriately.
Definition asset_manager.cpp:400
IVideoPlayer * getTopperVideoPlayer() override
Retrieves the video player associated with the topper display.
Definition asset_manager.h:46
IVideoPlayer * getBackglassVideoPlayer() override
Retrieves the video player associated with the backglass.
Definition asset_manager.h:44
void reloadAssets(IWindowManager *windowManager, TTF_Font *font, const std::vector< TableData > &tables, size_t index) override
Reloads all relevant assets with updated settings, fonts, and table data.
Definition asset_manager.cpp:83
SDL_Rect getTitleRect() override
Retrieves the rectangle that specifies the title's position and dimensions (x, y, width,...
Definition asset_manager.h:48
void setSettingsManager(IConfigService *cm) override
Sets the configuration service (settings manager) responsible for application settings.
Definition asset_manager.cpp:66
SDL_Texture * getDmdTexture() override
Retrieves the texture used for the dot matrix display (DMD).
Definition asset_manager.h:34
void loadTableAssets(size_t index, const std::vector< TableData > &tables) override
Loads assets for a specific table based on its index and associated table data.
Definition asset_manager.cpp:180
IVideoPlayer * getPlayfieldVideoPlayer() override
Retrieves the video player associated with the playfield.
Definition asset_manager.h:43
void applyVideoAudioSettings() override
Applies audio settings to all active video players.
Definition asset_manager.cpp:143
SDL_Texture * getTitleTexture(SDL_Renderer *renderer) override
Retrieves the texture used for the title for a specific renderer.
Definition asset_manager.h:36
void clearOldVideoPlayers() override
Clears any existing video players to free resources before initializing new ones.
Definition asset_manager.cpp:395
SDL_Texture * getPlayfieldTexture() override
Retrieves the texture used for the playfield.
Definition asset_manager.h:25
The IAssetManager interface provides methods to manage and access various assets used in the applicat...
Definition iasset_manager.h:36
Interface for configuration services (forward declaration).
Definition iconfig_service.h:30
Interface for managing sound operations.
Definition isound_manager.h:14
Interface for a video player.
Definition ivideo_player.h:19
Interface for managing SDL windows and renderers.
Definition iwindow_manager.h:27
Defines the IAssetManager interface for managing assets in ASAPCabinetFE.
Defines the TableData struct for storing VPX table metadata and media paths.