- added support for faction preview videos (take precedence over preview texture)

This commit is contained in:
Mark Vejvoda 2012-05-25 23:00:36 +00:00
parent 660d702e97
commit ead7c316e5
4 changed files with 123 additions and 12 deletions

View File

@ -62,6 +62,7 @@ MenuStateConnectedGame::MenuStateConnectedGame(Program *program, MainMenu *mainM
broadcastServerSettingsDelayTimer=0;
lastGameSettingsReceivedCount=0;
this->factionVideo = NULL;
currentTechName_factionPreview="";
currentFactionName_factionPreview="";
@ -648,6 +649,12 @@ MenuStateConnectedGame::~MenuStateConnectedGame() {
}
cleanupMapPreviewTexture();
if(factionVideo != NULL) {
factionVideo->closePlayer();
delete factionVideo;
factionVideo = NULL;
}
}
void MenuStateConnectedGame::mouseClick(int x, int y, MouseButton mouseButton){
@ -1674,6 +1681,12 @@ void MenuStateConnectedGame::render() {
//renderer.renderTextureQuad(60+575+80,365,200,225,factionTexture,1);
renderer.renderTextureQuad(800,600,200,150,factionTexture,1);
}
if(factionVideo != NULL) {
if(factionVideo->isPlaying() == true) {
factionVideo->playFrame(false);
}
}
if(mapPreviewTexture != NULL) {
renderer.renderTextureQuad(5,185,150,150,mapPreviewTexture,1.0f);
//printf("=================> Rendering map preview texture\n");
@ -3610,13 +3623,51 @@ void MenuStateConnectedGame::setupUIFromGameSettings(GameSettings *gameSettings,
currentTechName_factionPreview=gameSettings->getTech();
currentFactionName_factionPreview=gameSettings->getFactionTypeName(gameSettings->getThisFactionIndex());
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,"preview_screen.*");
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(gameSettings, NULL);
string factionVideoUrl = Game::findFactionLogoFile(gameSettings, NULL,"preview_video.*");
if(factionVideoUrl != "") {
if(currentFactionLogo != factionVideoUrl) {
currentFactionLogo = factionVideoUrl;
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == false &&
Shared::Graphics::VideoPlayer::hasBackEndVideoPlayer() == true) {
if(factionVideo != NULL) {
factionVideo->closePlayer();
delete factionVideo;
factionVideo = NULL;
}
string introVideoFile = factionVideoUrl;
string introVideoFileFallback = "";
Context *c= GraphicsInterface::getInstance().getCurrentContext();
SDL_Surface *screen = static_cast<ContextGl*>(c)->getPlatformContextGlPtr()->getScreen();
string vlcPluginsPath = Config::getInstance().getString("VideoPlayerPluginsPath","");
//printf("screen->w = %d screen->h = %d screen->format->BitsPerPixel = %d\n",screen->w,screen->h,screen->format->BitsPerPixel);
factionVideo = new VideoPlayer(
&Renderer::getInstance(),
introVideoFile,
introVideoFileFallback,
screen,
0,0,
screen->w,
screen->h,
screen->format->BitsPerPixel,
vlcPluginsPath,
SystemFlags::VERBOSE_MODE_ENABLED);
factionVideo->initPlayer();
}
}
}
if(currentFactionLogo != factionLogo) {
currentFactionLogo = factionLogo;
loadFactionTexture(currentFactionLogo);
if(factionVideo == NULL) {
string factionLogo = Game::findFactionLogoFile(gameSettings, NULL,"preview_screen.*");
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(gameSettings, NULL);
}
if(currentFactionLogo != factionLogo) {
currentFactionLogo = factionLogo;
loadFactionTexture(currentFactionLogo);
}
}
}
}

View File

@ -23,6 +23,10 @@
#include "miniftpclient.h"
#include "leak_dumper.h"
namespace Shared { namespace Graphics {
class VideoPlayer;
}}
namespace Glest { namespace Game {
enum JoinMenu {
@ -125,6 +129,7 @@ private:
string currentFactionName_factionPreview;
string currentFactionLogo;
Texture2D *factionTexture;
Shared::Graphics::VideoPlayer *factionVideo;
MapPreview mapPreview;

View File

@ -68,6 +68,7 @@ MenuStateCustomGame::MenuStateCustomGame(Program *program, MainMenu *mainMenu,
this->lastMasterServerSettingsUpdateCount = 0;
this->masterserverModeMinimalResources = true;
this->parentMenuState=parentMenuState;
this->factionVideo = NULL;
//printf("this->masterserverMode = %d [%d]\n",this->masterserverMode,masterserverMode);
@ -925,6 +926,12 @@ void MenuStateCustomGame::cleanup() {
cleanupMapPreviewTexture();
if(factionVideo != NULL) {
factionVideo->closePlayer();
delete factionVideo;
factionVideo = NULL;
}
if(forceWaitForShutdown == true) {
NetworkManager::getInstance().end();
}
@ -1736,6 +1743,11 @@ void MenuStateCustomGame::render() {
if(factionTexture != NULL) {
renderer.renderTextureQuad(800,600,200,150,factionTexture,0.7f);
}
if(factionVideo != NULL) {
if(factionVideo->isPlaying() == true) {
factionVideo->playFrame(false);
}
}
if(mapPreviewTexture != NULL) {
renderer.renderTextureQuad(5,185,150,150,mapPreviewTexture,1.0f);
//printf("=================> Rendering map preview texture\n");
@ -2507,13 +2519,51 @@ void MenuStateCustomGame::update() {
currentTechName_factionPreview=gameSettings.getTech();
currentFactionName_factionPreview=gameSettings.getFactionTypeName(gameSettings.getThisFactionIndex());
string factionLogo = Game::findFactionLogoFile(&gameSettings, NULL,"preview_screen.*");
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(&gameSettings, NULL);
string factionVideoUrl = Game::findFactionLogoFile(&gameSettings, NULL,"preview_video.*");
if(factionVideoUrl != "") {
if(currentFactionLogo != factionVideoUrl) {
currentFactionLogo = factionVideoUrl;
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == false &&
Shared::Graphics::VideoPlayer::hasBackEndVideoPlayer() == true) {
if(factionVideo != NULL) {
factionVideo->closePlayer();
delete factionVideo;
factionVideo = NULL;
}
string introVideoFile = factionVideoUrl;
string introVideoFileFallback = "";
Context *c= GraphicsInterface::getInstance().getCurrentContext();
SDL_Surface *screen = static_cast<ContextGl*>(c)->getPlatformContextGlPtr()->getScreen();
string vlcPluginsPath = Config::getInstance().getString("VideoPlayerPluginsPath","");
//printf("screen->w = %d screen->h = %d screen->format->BitsPerPixel = %d\n",screen->w,screen->h,screen->format->BitsPerPixel);
factionVideo = new VideoPlayer(
&Renderer::getInstance(),
introVideoFile,
introVideoFileFallback,
screen,
0,0,
screen->w,
screen->h,
screen->format->BitsPerPixel,
vlcPluginsPath,
SystemFlags::VERBOSE_MODE_ENABLED);
factionVideo->initPlayer();
}
}
}
if(currentFactionLogo != factionLogo) {
currentFactionLogo = factionLogo;
loadFactionTexture(currentFactionLogo);
if(factionVideo == NULL) {
string factionLogo = Game::findFactionLogoFile(&gameSettings, NULL,"preview_screen.*");
if(factionLogo == "") {
factionLogo = Game::findFactionLogoFile(&gameSettings, NULL);
}
if(currentFactionLogo != factionLogo) {
currentFactionLogo = factionLogo;
loadFactionTexture(currentFactionLogo);
}
}
}
}

View File

@ -20,6 +20,10 @@
using namespace Shared::Map;
namespace Shared { namespace Graphics {
class VideoPlayer;
}}
namespace Glest { namespace Game {
class SwitchSetupRequest;
@ -168,6 +172,7 @@ private:
string currentFactionName_factionPreview;
string currentFactionLogo;
Texture2D *factionTexture;
Shared::Graphics::VideoPlayer *factionVideo;
MapPreview mapPreview;
Texture2D *mapPreviewTexture;