From: Laszlo T. <ave...@us...> - 2005-03-23 18:21:42
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27766/Core Modified Files: GameControl.cpp GlobalTimer.cpp GlobalTimer.h Interface.cpp Interface.h Map.cpp Map.h Log Message: Refreshing gamecontrol even when dialogs freeze script updates Index: GlobalTimer.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GlobalTimer.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** GlobalTimer.cpp 20 Mar 2005 23:36:48 -0000 1.13 --- GlobalTimer.cpp 23 Mar 2005 18:20:52 -0000 1.14 *************** *** 26,29 **** --- 26,36 ---- } + void GlobalTimer::Freeze() + { + unsigned long thisTime; + GetTime( thisTime ); + startTime = thisTime; + } + void GlobalTimer::Update() { Index: GlobalTimer.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GlobalTimer.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** GlobalTimer.h 20 Mar 2005 15:07:11 -0000 1.6 --- GlobalTimer.h 23 Mar 2005 18:20:52 -0000 1.7 *************** *** 34,37 **** --- 34,38 ---- public: void Init(); + void Freeze(); void Update(); void SetFadeToColor(unsigned long Count); Index: Interface.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.h,v retrieving revision 1.146 retrieving revision 1.147 diff -C2 -d -r1.146 -r1.147 *** Interface.h 20 Mar 2005 15:07:12 -0000 1.146 --- Interface.h 23 Mar 2005 18:21:14 -0000 1.147 *************** *** 325,331 **** bool InCutSceneMode(); /** Updates the Game Script Engine State */ ! void GSUpdate() { ! timer->Update(); } /** Get the Party INI Interpreter */ --- 325,336 ---- bool InCutSceneMode(); /** Updates the Game Script Engine State */ ! void GSUpdate(bool update_scripts) { ! if(update_scripts) { ! timer->Update(); ! } ! else { ! timer->Freeze(); ! } } /** Get the Party INI Interpreter */ Index: Map.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.h,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** Map.h 15 Mar 2005 17:53:15 -0000 1.65 --- Map.h 23 Mar 2005 18:21:16 -0000 1.66 *************** *** 115,119 **** void AddTileMap(TileMap* tm, ImageMgr* lm, ImageMgr* sr, ImageMgr* sm); void CreateMovement(char *command, const char *area, const char *entrance); ! void DrawMap(Region viewport, GameControl* gc); void PlayAreaSong(int); void AddAnimation(Animation* anim); --- 115,119 ---- void AddTileMap(TileMap* tm, ImageMgr* lm, ImageMgr* sr, ImageMgr* sm); void CreateMovement(char *command, const char *area, const char *entrance); ! void DrawMap(Region viewport, GameControl* gc, bool update_scripts); void PlayAreaSong(int); void AddAnimation(Animation* anim); Index: Interface.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.cpp,v retrieving revision 1.288 retrieving revision 1.289 diff -C2 -d -r1.288 -r1.289 *** Interface.cpp 22 Mar 2005 18:53:31 -0000 1.288 --- Interface.cpp 23 Mar 2005 18:20:52 -0000 1.289 *************** *** 2349,2353 **** ChangeScript = true; } ! GSUpdate(); } --- 2349,2353 ---- ChangeScript = true; } ! GSUpdate(true); } Index: Map.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.cpp,v retrieving revision 1.145 retrieving revision 1.146 diff -C2 -d -r1.145 -r1.146 *** Map.cpp 15 Mar 2005 17:53:14 -0000 1.145 --- Map.cpp 23 Mar 2005 18:21:15 -0000 1.146 *************** *** 378,382 **** } ! void Map::DrawMap(Region viewport, GameControl* gc) { unsigned int i; --- 378,382 ---- } ! void Map::DrawMap(Region viewport, GameControl* gc, bool update_scripts) { unsigned int i; *************** *** 385,449 **** TMap->DrawOverlay( 0, viewport ); } ! //Run the Global Script ! Game* game = core->GetGame(); ! game->ExecuteScript( game->Scripts[0] ); ! game->OnCreation = false; ! game->ProcessActions(); ! //Run the Map Script ! if (Scripts[0]) { ! ExecuteScript( Scripts[0] ); ! } ! OnCreation = false; ! //Execute Pending Actions ! ProcessActions(); ! //Check if we need to start some trigger scripts ! int ipCount = 0; ! while (true) { ! //For each InfoPoint in the map ! InfoPoint* ip = TMap->GetInfoPoint( ipCount++ ); ! if (!ip) ! break; ! if (!ip->Active) ! continue; ! //If this InfoPoint has no script and it is not a Travel Trigger, skip it ! if (!ip->Scripts[0] && ( ip->Type != ST_TRAVEL )) ! continue; ! //Execute Pending Actions ! ip->ProcessActions(); ! //If this InfoPoint is a Switch Trigger ! if (ip->Type == ST_TRIGGER) { ! //Check if this InfoPoint was activated ! if (ip->LastTrigger) { ! //Run the InfoPoint script ! ip->ExecuteScript( ip->Scripts[0] ); ! //OnCreation won't trigger the INFO point ! //If it does, alter the condition above ! ip->OnCreation = false; ! } ! continue; } ! i=actors.size(); ! while (i--) { ! Actor* actor = actors[i]; ! if (!actor) continue; ! if (ip->Type == ST_PROXIMITY) { ! if (ip->outline->PointIn( actor->Pos )) { ! ip->LastEntered = actor; ! ip->LastTrigger = actor; } ! ip->ExecuteScript( ip->Scripts[0] ); ! } else { ! //ST_TRAVEL ! //don't move if doing something else ! if(actor->GetNextAction()) continue; ! if (ip->outline->PointIn( actor->Pos )) { ! ip->LastEntered = actor; ! UseExit(actor, ip); } } } - ip->OnCreation = false; } //Blit the Map Animations --- 385,451 ---- TMap->DrawOverlay( 0, viewport ); } ! if (update_scripts) { ! //Run the Global Script ! Game* game = core->GetGame(); ! game->ExecuteScript( game->Scripts[0] ); ! game->OnCreation = false; ! game->ProcessActions(); ! //Run the Map Script ! if (Scripts[0]) { ! ExecuteScript( Scripts[0] ); } ! OnCreation = false; ! //Execute Pending Actions ! ProcessActions(); ! //Check if we need to start some trigger scripts ! int ipCount = 0; ! while (true) { ! //For each InfoPoint in the map ! InfoPoint* ip = TMap->GetInfoPoint( ipCount++ ); ! if (!ip) ! break; ! if (!ip->Active) continue; ! //If this InfoPoint has no script and it is not a Travel Trigger, skip it ! if (!ip->Scripts[0] && ( ip->Type != ST_TRAVEL )) ! continue; ! //Execute Pending Actions ! ip->ProcessActions(); ! //If this InfoPoint is a Switch Trigger ! if (ip->Type == ST_TRIGGER) { ! //Check if this InfoPoint was activated ! if (ip->LastTrigger) { ! //Run the InfoPoint script ! ip->ExecuteScript( ip->Scripts[0] ); ! //OnCreation won't trigger the INFO point ! //If it does, alter the condition above ! ip->OnCreation = false; } ! continue; ! } ! i=actors.size(); ! while (i--) { ! Actor* actor = actors[i]; ! if (!actor) continue; ! if (ip->Type == ST_PROXIMITY) { ! if (ip->outline->PointIn( actor->Pos )) { ! ip->LastEntered = actor; ! ip->LastTrigger = actor; ! } ! ip->ExecuteScript( ip->Scripts[0] ); ! } else { ! //ST_TRAVEL ! //don't move if doing something else ! if(actor->GetNextAction()) ! continue; ! if (ip->outline->PointIn( actor->Pos )) { ! ip->LastEntered = actor; ! UseExit(actor, ip); ! } } } + ip->OnCreation = false; } } //Blit the Map Animations *************** *** 476,498 **** if (!actor->Active) continue; ! actor->ProcessActions(); ! //moved scripts before display ! //this should enable scripts for offscreen actors ! for (i = 0; i < 8; i++) { ! if (actor->Scripts[i]) ! actor->ExecuteScript( actor->Scripts[i] ); ! } ! //returns true if actor should be completely removed ! if(actor->CheckOnDeath()) { ! DeleteActor( actor ); ! continue; ! } ! actor->OnCreation = false; ! actor->inventory.CalculateWeight(); ! actor->SetStat( IE_ENCUMBRANCE, actor->inventory.GetWeight() ); ! actor->DoStep( ); CharAnimations* ca = actor->GetAnims(); if (!ca) --- 478,502 ---- if (!actor->Active) continue; ! if (update_scripts) { ! actor->ProcessActions(); ! //moved scripts before display ! //this should enable scripts for offscreen actors ! for (i = 0; i < 8; i++) { ! if (actor->Scripts[i]) ! actor->ExecuteScript( actor->Scripts[i] ); ! } ! //returns true if actor should be completely removed ! if(actor->CheckOnDeath()) { ! DeleteActor( actor ); ! continue; ! } ! actor->OnCreation = false; ! actor->inventory.CalculateWeight(); ! actor->SetStat( IE_ENCUMBRANCE, actor->inventory.GetWeight() ); ! actor->DoStep( ); ! } CharAnimations* ca = actor->GetAnims(); if (!ca) Index: GameControl.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.cpp,v retrieving revision 1.206 retrieving revision 1.207 diff -C2 -d -r1.206 -r1.207 *** GameControl.cpp 22 Mar 2005 18:11:50 -0000 1.206 --- GameControl.cpp 23 Mar 2005 18:20:51 -0000 1.207 *************** *** 211,214 **** --- 211,216 ---- void GameControl::Draw(unsigned short x, unsigned short y) { + bool update_scripts = !(DialogueFlags & DF_FREEZE_SCRIPTS); + Game* game = core->GetGame(); if (game->MapIndex == -1) { *************** *** 218,224 **** return; } - if (DialogueFlags & DF_FREEZE_SCRIPTS) { - return; - } if ( game->selected.size() > 0 ) { ChangeMap(game->selected[0], false); --- 220,223 ---- *************** *** 236,241 **** } core->GetVideoDriver()->DrawRect( vp, black, true ); ! core->GSUpdate(); ! area->DrawMap( vp, this ); if (ScreenFlags & SF_DISABLEMOUSE) return; --- 235,241 ---- } core->GetVideoDriver()->DrawRect( vp, black, true ); ! //shall we stop globaltimer? ! core->GSUpdate(update_scripts); ! area->DrawMap( vp, this, update_scripts ); if (ScreenFlags & SF_DISABLEMOUSE) return; |