Jump to content
  • Advertisement
Sign in to follow this  
Paul C Skertich

AddTimer function in AngelScript

This topic is 1241 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm not sure how to go about this but I do know is that recompiling angelscript over and over again won't be benefictional al all.


For instance say inside AngelScript file I have a an function called addTime like so:

void onLevelStart() {
void funct1(string &in asTimer) {
     Message("Timer Worked");

in C++, the addTimer would compare the how many elapsed time has went since the game has begain or script has been executed. The Message function in C++ would just pop up a message box or something.


So recompiling the script in message loop is horrible and darn right nasty. What are the other ways I would go about recompiling or executing a script function without any worries?

Share this post

Link to post
Share on other sites

I love the feeling when you actually solve something on your own! What I was able to figure out was this:


The addTimer function would stuff inside a structure data it's name, time, and function to be called. Here's slight code and if you ever want to use it - go ahead.


void onStart() {

void timer_funct() {
    //--- DO whatever you want to do after timer has reached.
C++ code:

struct Timer {
 std::string Name;
 float time;
 std::string FunctionCallback;
 bool complete;


std::vector<Timer> timers;

unsigned long startTime;
unsigned long elapsedTime;

void startTimer() {
  startTime  = clock();  
float getElapsedTime() {
  return(((float) clock() - startTime) / CLOCKS_PER_SECOND);
void addTimer(std::string &name, float time, std::string &functcallback) {
    Timer time = { name, time, functcallback, false }; 

//-- This is for constantly checking to see when timer is finished.
void checkTimers() {
     if(!Timers[0].complete) {
          if(getElapsedTime() >= Timers[0].time) {
               Timers[0].complete = true;
               asIScriptContext *ctx = engine->CreateContext(); //-- as said in the documentation it's better to have the original script context.

               std::string funcdecl = "void " + Timers[0].FunctionCallback + "()";
               asIScriptFunction *func = ctx->GetModule(your module name here")->GetFunctionByDecl(functdecl);
               if(funct != null) {
                   int r = ctx->Execute();
                   if(r == asEXECUTE_FINISHED) {


the checkTimers function should be in the render loop and the startTimer() should be in the initialization of the game of course.


Some of the functions I tried to memorize may be a bit off on function calls. However, essentially what's it's doing is checking to see if the timer is reached elapse point then going back and calling a function declared inside the script file.


There's probably a better way of going about all this of course.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!