125 lines
2.9 KiB
C++
125 lines
2.9 KiB
C++
#include "Scene_MainUi.h"
|
|
#include "Asset/Squirrel/SquirrelManager.h"
|
|
|
|
void Scene_MainUi::Enter()
|
|
{
|
|
Scene::Enter();
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
SQInteger top = sq_gettop(v);
|
|
sq_pushroottable(v);
|
|
sq_pushstring(v, _SC("_MainUI_Enter_"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_pushroottable(v);
|
|
sq_pushuserpointer(v, this);
|
|
sq_call(v, 2, SQFalse, SQTrue);
|
|
}
|
|
sq_settop(v, top);
|
|
}
|
|
|
|
void Scene_MainUi::HandleEvents(SDL_Event *event)
|
|
{
|
|
SQInteger EventType = -1;
|
|
std::vector<SQInteger> EventData;
|
|
switch (event->type)
|
|
{
|
|
// 鼠标移动
|
|
case SDL_MOUSEMOTION:
|
|
{
|
|
EventType = 0;
|
|
EventData.push_back(event->motion.x);
|
|
EventData.push_back(event->motion.y);
|
|
break;
|
|
}
|
|
// 鼠标按键按下
|
|
case SDL_MOUSEBUTTONDOWN:
|
|
{
|
|
EventType = 1;
|
|
EventData.push_back(event->button.button);
|
|
break;
|
|
}
|
|
// 鼠标按键释放
|
|
case SDL_MOUSEBUTTONUP:
|
|
{
|
|
EventType = 2;
|
|
EventData.push_back(event->button.button);
|
|
break;
|
|
}
|
|
// 鼠标滚轮
|
|
case SDL_MOUSEWHEEL:
|
|
{
|
|
EventType = 3;
|
|
EventData.push_back(event->wheel.y);
|
|
break;
|
|
}
|
|
// 键盘按键按下
|
|
case SDL_KEYDOWN:
|
|
{
|
|
EventType = 4;
|
|
EventData.push_back(event->key.keysym.sym);
|
|
break;
|
|
}
|
|
// 键盘按键释放
|
|
case SDL_KEYUP:
|
|
{
|
|
EventType = 5;
|
|
EventData.push_back(event->key.keysym.sym);
|
|
break;
|
|
}
|
|
}
|
|
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
SQInteger top = sq_gettop(v);
|
|
sq_pushroottable(v);
|
|
sq_pushstring(v, _SC("_MainUI_HandleEvents_"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_pushroottable(v);
|
|
sq_pushinteger(v, EventType);
|
|
sq_newarray(v, 0);
|
|
for (SQInteger i = 0; i < EventData.size(); i++)
|
|
{
|
|
sq_pushinteger(v, EventData[i]);
|
|
sq_arrayappend(v, -2);
|
|
}
|
|
sq_call(v, 3, SQFalse, SQTrue);
|
|
}
|
|
sq_settop(v, top);
|
|
}
|
|
|
|
void Scene_MainUi::Update(float deltaTime)
|
|
{
|
|
Scene::Update(deltaTime);
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
SQInteger top = sq_gettop(v);
|
|
sq_pushroottable(v);
|
|
sq_pushstring(v, _SC("_MainUI_Update_"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_pushroottable(v);
|
|
sq_pushfloat(v, deltaTime);
|
|
sq_call(v, 2, SQFalse, SQTrue);
|
|
}
|
|
sq_settop(v, top);
|
|
}
|
|
|
|
void Scene_MainUi::Exit()
|
|
{
|
|
Scene::Exit();
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
SQInteger top = sq_gettop(v);
|
|
sq_pushroottable(v);
|
|
sq_pushstring(v, _SC("_MainUI_Exit_"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_pushroottable(v);
|
|
sq_call(v, 1, SQFalse, SQTrue);
|
|
}
|
|
sq_settop(v, top);
|
|
}
|
|
|
|
void Scene_MainUi::Render()
|
|
{
|
|
Scene::Render();
|
|
}
|