_MEMBER_FUNCTION_IMPL(GUIElement, constructor) { const char * name; sq_getstring(pVM, -1, &name); String szName = name; if(szName.IsEmpty()) _SET_RELEASE_HOOK(GUIElement); // Get our GUI instance CGUI * pGUI = g_pClient->GetGUI(); try { pGUI->GetWindowManager()->getWindow(szName.C_String()); } catch(CEGUI::Exception &e) { e; _SET_RELEASE_HOOK(GUIElement); } CEGUI::Window * pWindow = pGUI->GetWindowManager()->getWindow(szName.C_String()); if(!pWindow || SQ_FAILED(sq_setinstance(pVM, pWindow))) { CLogFile::Printf("Can't create GUIElement."); sq_pushbool(pVM, false); return 1; } SubscribeGuiEvents(pWindow); sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(timer, Kill) { // Get the timer instance CTimer * pTimer = sq_getinstance< CTimer *>( pVM ); // Is the timer invalid? if( !pTimer ) { sq_pushbool( pVM, false ); return 1; } // Is the timer inside the timer manager and active? if( pCore->GetTimerManager()->Contains( pTimer ) && pTimer->IsActive() ) { // Kill the timer pTimer->Kill( ); sq_setinstance( pVM, NULL ); sq_pushbool( pVM, true ); return 1; } sq_pushbool( pVM, false ); return 1; }
// GUIText _MEMBER_FUNCTION_IMPL(GUIText, constructor) { // Get our GUI CGUI * pGUI = g_pClient->GetGUI(); CEGUI::Window * pWindow = pGUI->CreateGUIStaticText(); if(!pWindow || SQ_FAILED(sq_setinstance(pVM, pWindow))) { CLogFile::Printf("Can't create GUIText."); sq_pushbool(pVM, false); return 1; } //_SET_RELEASE_HOOK(GUIElement); CClientScriptManager * pClientScriptManager = g_pClient->GetClientScriptManager(); pClientScriptManager->GetGUIManager()->Add(pWindow, pClientScriptManager->GetScriptingManager()->Get(pVM)); pWindow->setVisible(true); pWindow->setProperty("FrameEnabled", "false"); pWindow->setProperty("BackgroundEnabled", "false"); pWindow->setFont(pGUI->GetFont("tahoma-bold")); pWindow->setProperty("TextColours", "tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF"); SubscribeGuiEvents(pWindow); sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(xml, constructor) { const char * filename; sq_getstring(pVM, -1, &filename); if(filename) { CXML * pXML = new CXML(); String strFileName(filename); SharedUtility::RemoveIllegalCharacters(strFileName); String strPath(SharedUtility::GetAbsolutePath("files/%s", strFileName.Get())); pXML->load(strPath); if(!pXML || SQ_FAILED(sq_setinstance(pVM, pXML))) { CLogFile::Print("Failed to load the xml."); SAFE_DELETE(pXML); sq_pushbool(pVM, false); return 1; } _SET_RELEASE_HOOK(xml); sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(timer, isActive) { CScriptTimer * pTimer = sq_getinstance<CScriptTimer *>(pVM); if(!pTimer) { CLogFile::Print("Failed to get the timer instance."); sq_pushbool(pVM, false); return 1; } if(CScriptTimerManager::GetInstance()->contains(pTimer)) { if(pTimer->IsDead()) { sq_setinstance(pVM, NULL); sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(timer, constructor) { // Check the param count CHECK_PARAMS_MIN("timer", 3); // if( sq_gettype( pVM, 2 ) != OT_NATIVECLOSURE ) CHECK_TYPE("timer", 1, 2, OT_CLOSURE); // Check the params CHECK_TYPE("timer", 2, 3, OT_INTEGER); CHECK_TYPE("timer", 3, 4, OT_INTEGER); SQInteger iInterval = 0; SQInteger iRepeations = 0; // Get the params sq_getinteger( pVM, 3, &iInterval ); sq_getinteger( pVM, 4, &iRepeations ); // Invalid repeations? if( iRepeations < -1 || iRepeations == 0 ) { sq_pushbool( pVM, false ); return 1; } // Get the timer end function SQObjectPtr pFunction = stack_get( pVM, 2 ); // Create the arguments CSquirrelArguments * pArguments = new CSquirrelArguments( pVM, 5 ); // Get the current script instance #ifdef _CLIENT CSquirrel * pScript = pCore->GetClientScriptingManager()->GetScriptingManager()->Get( pVM ); #else CSquirrel * pScript = pCore->GetScriptingManager()->Get( pVM ); #endif // Create the timer instance CTimer * pTimer = new CTimer( pScript, pFunction, iInterval, iRepeations, pArguments ); // Did it fail to set the timer instance? if( SQ_FAILED( sq_setinstance( pVM, pTimer) ) ) { // Delete the timer SAFE_DELETE( pTimer ); sq_pushbool( pVM, false ); return 1; } // Add the timer into the manager pCore->GetTimerManager()->push_back( pTimer ); sq_pushbool( pVM, true ); return 1; }
// GUIImage _MEMBER_FUNCTION_IMPL(GUIImage, constructor) { const char * filename; sq_getstring(pVM, -1, &filename); // check file size /*FILE* pFile = fopen(filename, "rb"); fseek(pFile, 0L, SEEK_END); int len = ftell(pFile); if(len == 0) { sq_pushbool(pVM, false); fclose(pFile); return 1; } fclose(pFile);*/ // Get our GUI CGUI * pGUI = g_pClient->GetGUI(); String szName = pGUI->GetUniqueName(); // Try to load the image try { CEGUI::ImagesetManager::getSingleton().createFromImageFile(szName.C_String(), filename, "resources"); CGUIStaticImage * pImage = pGUI->CreateGUIStaticImage(CEGUI::String(szName.C_String())); pImage->setProperty("FrameEnabled", "false"); pImage->setProperty("BackgroundEnabled", "false"); pImage->setProperty("Image", String("set:%s image:full_image", szName.C_String()).C_String()); if(!pImage || SQ_FAILED(sq_setinstance(pVM, pImage))) { CLogFile::Printf("Can't create GUIImage."); sq_pushbool(pVM, false); return 1; } //_SET_RELEASE_HOOK(GUIElement); CClientScriptManager * pClientScriptManager = g_pClient->GetClientScriptManager(); pClientScriptManager->GetGUIManager()->Add(pImage, pClientScriptManager->GetScriptingManager()->Get(pVM)); SubscribeGuiEvents(pImage); pImage->setVisible(true); sq_pushbool(pVM, true); return 1; } catch(CEGUI::Exception e) { // Failed to load, might not exist CLogFile::Printf("Can't create GUIImage (%s does not exist)", filename); sq_pushbool(pVM, false); return 1; } }
// Font _MEMBER_FUNCTION_IMPL(GUIFont, constructor) { if(sq_gettop(pVM) < 2) { sq_pushbool(pVM, false); return 1; } const char * szFont; int iSize = 8; bool bScaled = false; sq_getstring(pVM, 2, &szFont); if(sq_gettop(pVM) >= 3) { sq_getinteger(pVM, 3, &iSize); if(iSize < 3 || iSize > 100) { sq_pushbool(pVM, false); return 1; } if(sq_gettop(pVM) >= 4) { SQBool sqb; sq_getbool(pVM, 4, &sqb); bScaled = sqb != 0; } } CEGUI::Font * pFont = g_pClient->GetGUI()->GetFont(szFont, iSize, bScaled); if(!pFont || SQ_FAILED(sq_setinstance(pVM, pFont))) { CLogFile::Printf("Can't create GUIFont."); sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(xml, constructor) { // Get the filename const char * szFileName; sq_getstring( pVM, -1, &szFileName ); // Do we have a valid filename? if( szFileName ) { // Generate the path string String strPath; #ifdef _CLIENT strPath = pCore->GetClientScriptingManager()->GetScriptingManager()->Get( pVM )->GetPath(); strPath = SharedUtility::GetFileNameForScriptFile( szFileName, strPath.Get(), pCore->GetHost().Get(), pCore->GetPort() ); #else strPath = pCore->GetScriptingManager()->Get( pVM )->GetPath(); strPath = SharedUtility::GetFileNameForScriptFile( szFileName, strPath.Get() ); #endif // Create the XML instance CXML * pXML = new CXML( strPath.Get() ); // Did the XML instance fail to create or set the squirrel instance? if( !pXML || SQ_FAILED( sq_setinstance( pVM, pXML ) ) ) { // Delete the xml instance if( pXML ) SAFE_DELETE( pXML ); // sq_pushbool( pVM, false ); return 1; } //_SET_RELEASE_HOOK(xml); sq_pushbool( pVM, true ); return 1; } sq_pushbool( pVM, false ); return 1; }
// GUIProgressBar _MEMBER_FUNCTION_IMPL(GUIProgressBar, constructor) { CEGUI::Window * pWindow = g_pClient->GetGUI()->CreateGUIProgressBar(); if(!pWindow || SQ_FAILED(sq_setinstance(pVM, pWindow))) { CLogFile::Printf("Can't create GUIProgressBar."); sq_pushbool(pVM, false); return 1; } CClientScriptManager * pClientScriptManager = g_pClient->GetClientScriptManager(); pClientScriptManager->GetGUIManager()->Add(pWindow, pClientScriptManager->GetScriptingManager()->Get(pVM)); pWindow->setVisible(true); pWindow->setProperty("CurrentProgress", "0.0"); SubscribeGuiEvents(pWindow); sq_pushbool(pVM, true); return 1; }
// GUICheckBox _MEMBER_FUNCTION_IMPL(GUICheckBox, constructor) { CEGUI::Window * pWindow = g_pClient->GetGUI()->CreateGUICheckBox(); if(!pWindow || SQ_FAILED(sq_setinstance(pVM, pWindow))) { CLogFile::Printf("Can't create GUICheckBox."); sq_pushbool(pVM, false); return 1; } //_SET_RELEASE_HOOK(GUIElement); CClientScriptManager * pClientScriptManager = g_pClient->GetClientScriptManager(); pClientScriptManager->GetGUIManager()->Add(pWindow, pClientScriptManager->GetScriptingManager()->Get(pVM)); pWindow->setVisible(true); SubscribeGuiEvents(pWindow); pWindow->subscribeEvent(CEGUI::Checkbox::EventCheckStateChanged, CEGUI::Event::Subscriber(&OnCheckboxCheckStateChanged)); sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(timer, constructor) { CHECK_PARAMS_MIN("timer", 3); if(sq_gettype(pVM, 2) != OT_NATIVECLOSURE) CHECK_TYPE("timer", 1, 2, OT_CLOSURE); CHECK_TYPE("timer", 2, 3, OT_INTEGER); CHECK_TYPE("timer", 3, 4, OT_INTEGER); SQInteger interval = 0; SQInteger repeations = 0; sq_getinteger(pVM, 3, &interval); sq_getinteger(pVM, 4, &repeations); // Ensure we have a valid repeations value if(repeations < -1 || repeations == 0) { sq_pushbool(pVM, false); return 1; } SQObjectPtr pFunction; pFunction = stack_get(pVM, 2); CSquirrelArguments * pArguments = new CSquirrelArguments(pVM, 5); CScriptTimer * pTimer = new CScriptTimer(CScriptingManager::GetInstance()->Get(pVM), pFunction, interval, repeations, pArguments); if(SQ_FAILED(sq_setinstance(pVM, pTimer))) { delete pTimer; delete pArguments; sq_pushbool(pVM, false); return 1; } CScriptTimerManager::GetInstance()->push_back(pTimer); sq_pushbool(pVM, true); return 1; }