/* orxonox - the future of 3D-vertical-scrollers Copyright (C) 2004 orx This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ### File Specific: main-programmer: David Hasenfratz co-programmer: */ /* this is for debug output. It just says, that all calls to PRINT() belong to the DEBUG_MODULE_MEDIA module For more information refere to https://www.orxonox.net/cgi-bin/trac.cgi/wiki/DebugOutput */ #define DEBUG_MODULE_MEDIA /* include your own header */ #include "movie_player.h" /* header for debug output */ #include "debug.h" /** * Default constructor */ MoviePlayer::MoviePlayer(const char* filename) { media_container = new MediaContainer(filename); this->init(); } MoviePlayer::MoviePlayer() { media_container = new MediaContainer(); this->init(); } /** * Default destructor */ MoviePlayer::~MoviePlayer() { delete media_container; } void MoviePlayer::init() { status = STOP; timer = 0; material = new Material; material->setDiffuseMap("maps/radialTransparency.png"); model = new PrimitiveModel(PRIM_PLANE, 10.0); LightManager* lightMan = LightManager::getInstance(); lightMan->setAmbientColor(.1,.1,.1); (new Light())->setAbsCoor(5.0, 10.0, 40.0); (new Light())->setAbsCoor(-10, -20, -100); } void MoviePlayer::loadMovie(const char* filename) { media_container->loadMedia(filename); } void MoviePlayer::printInformation() { media_container->printMediaInformation(); } void MoviePlayer::start(unsigned int start_frame) { status = PLAY; timer = 0; fps = media_container->getFPS(); media_container->gotoFrame(start_frame); PRINTF(0)("start\n"); } void MoviePlayer::resume() { if(status == STOP) this->start(0); else status = PLAY; PRINTF(0)("resume\n"); } void MoviePlayer::pause() { if(status != STOP) status = PAUSE; PRINTF(0)("pause\n"); } void MoviePlayer::stop() { status = STOP; texture = NULL; PRINTF(0)("stop\n"); } void MoviePlayer::tick(float dt) { if(status == PLAY) { current_frame = media_container->getFrameNumber(); timer += dt; actuel_frame = timer * fps; if(actuel_frame != current_frame) { if(actuel_frame - current_frame == 1) texture = media_container->getNextFrame(); else texture = media_container->skipFrame(actuel_frame - current_frame - 1); } //PRINTF(0)("frame_number: %i\n", media_container->getFrameNumber()); if(texture == NULL && current_frame != 0) this->stop(); } } const void MoviePlayer::draw() { material->select(); glBindTexture(GL_TEXTURE_2D, texture); model->draw(); LightManager::getInstance()->draw(); } void MoviePlayer::setSpeed(float speed) { this->speed = speed; } float MoviePlayer::getSpeed() { return this->speed; } const MP_STATUS MoviePlayer::getStatus() { return this->status; }