// ============================================================== // This file is part of Glest (www.glest.org) // // Copyright (C) 2001-2008 MartiƱo Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version // ============================================================== #include "time_flow.h" #include "sound_renderer.h" #include "config.h" #include "game_constants.h" #include "util.h" #include "conversion.h" #include "leak_dumper.h" using namespace Shared::Util; namespace Glest{ namespace Game{ // ===================================================== // class TimeFlow // ===================================================== const float TimeFlow::dusk= 18.f; const float TimeFlow::dawn= 6.f; TimeFlow::TimeFlow() { firstTime = false; tileset = NULL; time = 0.0f; lastTime = 0.0f; timeInc = 0.0f; //printf("#1a timeInc = %f\n",timeInc); } void TimeFlow::init(Tileset *tileset){ firstTime= true; this->tileset= tileset; time= dawn+1.5f; lastTime= time; Config &config= Config::getInstance(); timeInc= 24.f * (1.f / config.getFloat("DayTime")) / GameConstants::updateFps; //printf("#1 timeInc = %f\n",timeInc); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] timeInc = %f\n",__FILE__,__FUNCTION__,__LINE__,timeInc); } void TimeFlow::update() { //printf("START TimeFlow::update() time = %f\n",time); //update time time += isDay()? timeInc: timeInc*2; if(time > 24.f){ time -= 24.f; } //printf("END TimeFlow::update() time = %f\n",time); //sounds SoundRenderer &soundRenderer= SoundRenderer::getInstance(); AmbientSounds *ambientSounds= NULL; if(tileset != NULL) { ambientSounds = tileset->getAmbientSounds(); } //day if(lastTime=dawn){ if(ambientSounds != NULL) { soundRenderer.stopAmbient(ambientSounds->getNight()); } UnitParticleSystem::isNight=false; } UnitParticleSystem::lightColor=computeLightColor(); if((lastTime=dawn) || firstTime){ //day sound if(ambientSounds != NULL) { if(ambientSounds->isEnabledDayStart() && !firstTime){ soundRenderer.playFx(ambientSounds->getDayStart()); } if(ambientSounds->isEnabledDay()){ if(ambientSounds->getAlwaysPlayDay() || tileset->getWeather()==wSunny){ soundRenderer.playAmbient(ambientSounds->getDay()); } } } firstTime= false; } //night if(lastTime=dusk){ if(ambientSounds != NULL) { soundRenderer.stopAmbient(ambientSounds->getDay()); } UnitParticleSystem::isNight=true; } if(lastTime=dusk){ //night if(ambientSounds != NULL) { if(ambientSounds->isEnabledNightStart()){ soundRenderer.playFx(ambientSounds->getNightStart()); } if(ambientSounds->isEnabledNight()){ if(ambientSounds->getAlwaysPlayNight() || tileset->getWeather()==wSunny){ soundRenderer.playAmbient(ambientSounds->getNight()); } } } } lastTime= time; } //bool TimeFlow::isAproxTime(float time) const { // return (this->time>=time) && (this->timedayStart && timegetSunLightColor(); } else if(time>nightStart || timegetMoonLightColor(); } else if(time>=dayEnd && time<=nightStart) { color= tileset->getSunLightColor().lerp((time-dayEnd)/transition, tileset->getMoonLightColor()); } else if(time>=nightEnd && time<=dayStart) { color= tileset->getMoonLightColor().lerp((time-nightEnd)/transition, tileset->getSunLightColor()); } else { assert(false); color= tileset->getSunLightColor(); } } return color; } void TimeFlow::saveGame(XmlNode *rootNode) { std::map mapTagReplacements; XmlNode *timeflowNode = rootNode->addChild("TimeFlow"); timeflowNode->addAttribute("firstTime",intToStr(firstTime), mapTagReplacements); // bool firstTime; // Tileset *tileset; // float time; timeflowNode->addAttribute("time",floatToStr(time,6), mapTagReplacements); // float lastTime; timeflowNode->addAttribute("lastTime",floatToStr(lastTime,6), mapTagReplacements); // float timeInc; //printf("#2 timeInc = %f\n",timeInc); timeflowNode->addAttribute("timeInc",floatToStr(timeInc,6), mapTagReplacements); //printf("#3 timeInc = %f\n",timeInc); } void TimeFlow::loadGame(const XmlNode *rootNode) { const XmlNode *timeflowNode = rootNode->getChild("TimeFlow"); firstTime = timeflowNode->getAttribute("firstTime")->getFloatValue() != 0; time = timeflowNode->getAttribute("time")->getFloatValue(); lastTime = timeflowNode->getAttribute("lastTime")->getFloatValue(); timeInc = timeflowNode->getAttribute("timeInc")->getFloatValue(); //printf("#4 timeInc = %f\n",timeInc); } }}//end namespace