Add RequestFrame() native (#412)
* Add RequestFrame() native * Change underlying container from CQueue to ke::Deque * CFrameAction: Fix PackageScript and MSVC project, wrap CFrameAction in AutoPtr
This commit is contained in:
@ -3290,5 +3290,18 @@ forward OnAutoConfigsBuffered();
|
||||
*/
|
||||
native AutoExecConfig(bool:autoCreate = true, const name[] = "", const folder[] = "");
|
||||
|
||||
/**
|
||||
* Creates a single use hook for the next frame.
|
||||
*
|
||||
* @param callback Function to be executed on the next frame.
|
||||
* @param data Optional data to be passed to the callback function.
|
||||
*
|
||||
* @note Callback function prototype:
|
||||
* public function(data)
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
native RequestFrame(const callback[], any:data = 0);
|
||||
|
||||
// Always keep this at the bottom of this file
|
||||
#include <message_stocks>
|
||||
|
66
plugins/testsuite/request_frame_test.sma
Normal file
66
plugins/testsuite/request_frame_test.sma
Normal file
@ -0,0 +1,66 @@
|
||||
#include <amxmodx>
|
||||
#include <fakemeta>
|
||||
|
||||
/*
|
||||
Expected console output:
|
||||
|
||||
Command_Test - Frame: X
|
||||
FrameCallback1 - Frame: X + 1 Data: 100
|
||||
FrameCallback2 - Frame: X + 2 Data: 200
|
||||
FrameCallback3 - Frame: X + 2 Data: 300
|
||||
FrameCallback4 - Frame: X + 3 Data: 400
|
||||
FrameCallback4 - Frame: X + 3 Data: 500
|
||||
*/
|
||||
|
||||
|
||||
new g_frameNumber = 0;
|
||||
|
||||
public plugin_precache()
|
||||
{
|
||||
register_forward(FM_StartFrame, "OnStartFrame", false);
|
||||
}
|
||||
|
||||
public plugin_init()
|
||||
{
|
||||
register_plugin("RequestFrame() Test", "1.0.0", "KliPPy");
|
||||
|
||||
register_concmd("request_frame_test", "Command_Test");
|
||||
}
|
||||
|
||||
public OnStartFrame()
|
||||
{
|
||||
g_frameNumber++;
|
||||
}
|
||||
|
||||
public Command_Test()
|
||||
{
|
||||
console_print(0, "Command_Test - Frame: %d", g_frameNumber);
|
||||
|
||||
RequestFrame("FrameCallback1", 100);
|
||||
}
|
||||
|
||||
public FrameCallback1(data)
|
||||
{
|
||||
console_print(0, "FrameCallback1 - Frame: %d Data: %d", g_frameNumber, data);
|
||||
|
||||
RequestFrame("FrameCallback2", 200);
|
||||
RequestFrame("FrameCallback3", 300);
|
||||
}
|
||||
|
||||
public FrameCallback2(data)
|
||||
{
|
||||
console_print(0, "FrameCallback2 - Frame: %d Data: %d", g_frameNumber, data);
|
||||
RequestFrame("FrameCallback4", 400);
|
||||
}
|
||||
|
||||
public FrameCallback3(data)
|
||||
{
|
||||
console_print(0, "FrameCallback3 - Frame: %d Data: %d", g_frameNumber, data);
|
||||
RequestFrame("FrameCallback4", 500);
|
||||
}
|
||||
|
||||
public FrameCallback4(data)
|
||||
{
|
||||
console_print(0, "FrameCallback4 - Frame: %d Data: %d", g_frameNumber, data);
|
||||
}
|
||||
|
Reference in New Issue
Block a user