Triggering build.
3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
31 #include "frame_hooks.h"
34 #include "HalfLife2.h"
35 #include "MenuStyle_Valve.h"
36 #include "MenuStyle_Radio.h"
37 #include "PlayerManager.h"
38 #include "CoreConfig.h"
40 #include <IThreader.h>
41 #include "sourcemod.h"
43 static IMutex *frame_mutex;
44 static Queue<FrameAction> *frame_queue;
45 static Queue<FrameAction> *frame_actions;
46 static float g_LastMenuTime = 0.0f;
47 static float g_LastAuthCheck = 0.0f;
48 bool g_PendingInternalPush = false;
50 class FrameActionInit : public SMGlobalClass
53 void OnSourceModAllInitialized()
55 frame_queue = new Queue<FrameAction>();
56 frame_actions = new Queue<FrameAction>();
57 frame_mutex = g_pThreader->MakeMutex();
60 void OnSourceModShutdown()
64 frame_mutex->DestroyThis();
68 void AddFrameAction(const FrameAction & action)
71 frame_queue->push(action);
72 frame_mutex->Unlock();
75 void RunFrameHooks(bool simulating)
77 /* It's okay if this check races. */
78 if (frame_queue->size())
80 Queue<FrameAction> *temp;
82 /* Very quick lock to move queue/actions back and forth */
85 frame_queue = frame_actions;
87 frame_mutex->Unlock();
89 /* The server will now be adding to the other queue, so we can process events. */
90 while (!frame_actions->empty())
92 FrameAction &item = frame_actions->first();
94 item.action(item.data);
98 /* Frame based hooks */
100 g_HL2.ProcessFakeCliCmdQueue();
101 g_HL2.ProcessDelayedKicks();
103 if (g_PendingInternalPush)
105 SM_InternalCmdTrigger();
108 g_SourceMod.ProcessGameFrameHooks(simulating);
110 float curtime = *g_pUniversalTime;
112 if (curtime - g_LastMenuTime >= 1.0f)
114 g_ValveMenuStyle.ProcessWatchList();
115 g_RadioMenuStyle.ProcessWatchList();
116 g_LastMenuTime = curtime;
119 if (*g_NumPlayersToAuth && curtime - g_LastAuthCheck >= 0.7f)
121 g_Players.RunAuthChecks();
122 g_LastAuthCheck = curtime;