|
@@ -45,6 +45,30 @@
|
|
|
#include "scene/resources/material.h"
|
|
|
#include "scene/resources/mesh.h"
|
|
|
|
|
|
+
|
|
|
+void SceneTreeTimer::_bind_methods() {
|
|
|
+
|
|
|
+ ObjectTypeDB::bind_method(_MD("set_time_left","time"),&SceneTreeTimer::set_time_left);
|
|
|
+ ObjectTypeDB::bind_method(_MD("get_time_left"),&SceneTreeTimer::get_time_left);
|
|
|
+
|
|
|
+ ADD_SIGNAL(MethodInfo("timeout"));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void SceneTreeTimer::set_time_left(float p_time) {
|
|
|
+ time_left=p_time;
|
|
|
+}
|
|
|
+
|
|
|
+float SceneTreeTimer::get_time_left() const {
|
|
|
+ return time_left;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+SceneTreeTimer::SceneTreeTimer() {
|
|
|
+ time_left=0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
void SceneTree::tree_changed() {
|
|
|
|
|
|
tree_version++;
|
|
@@ -547,6 +571,23 @@ bool SceneTree::idle(float p_time){
|
|
|
|
|
|
_flush_delete_queue();
|
|
|
|
|
|
+ //go through timers
|
|
|
+
|
|
|
+ for (List<Ref<SceneTreeTimer> >::Element *E=timers.front();E;) {
|
|
|
+
|
|
|
+ List<Ref<SceneTreeTimer> >::Element *N = E->next();
|
|
|
+
|
|
|
+ float time_left = E->get()->get_time_left();
|
|
|
+ time_left-=p_time;
|
|
|
+ E->get()->set_time_left(time_left);
|
|
|
+
|
|
|
+ if (time_left<0) {
|
|
|
+ E->get()->emit_signal("timeout");
|
|
|
+ timers.erase(E);
|
|
|
+ }
|
|
|
+ E=N;
|
|
|
+ }
|
|
|
+
|
|
|
return _quit;
|
|
|
}
|
|
|
|
|
@@ -1604,6 +1645,16 @@ void SceneTree::drop_files(const Vector<String>& p_files,int p_from_screen) {
|
|
|
MainLoop::drop_files(p_files,p_from_screen);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+Ref<SceneTreeTimer> SceneTree::create_timer(float p_delay_sec) {
|
|
|
+
|
|
|
+ Ref<SceneTreeTimer> stt;
|
|
|
+ stt.instance();
|
|
|
+ stt->set_time_left(p_delay_sec);
|
|
|
+ timers.push_back(stt);
|
|
|
+ return stt;
|
|
|
+}
|
|
|
+
|
|
|
void SceneTree::_bind_methods() {
|
|
|
|
|
|
|
|
@@ -1634,6 +1685,8 @@ void SceneTree::_bind_methods() {
|
|
|
ObjectTypeDB::bind_method(_MD("is_paused"),&SceneTree::is_paused);
|
|
|
ObjectTypeDB::bind_method(_MD("set_input_as_handled"),&SceneTree::set_input_as_handled);
|
|
|
|
|
|
+ ObjectTypeDB::bind_method(_MD("create_timer:SceneTreeTimer","time_sec"),&SceneTree::create_timer);
|
|
|
+
|
|
|
|
|
|
ObjectTypeDB::bind_method(_MD("get_node_count"),&SceneTree::get_node_count);
|
|
|
ObjectTypeDB::bind_method(_MD("get_frame"),&SceneTree::get_frame);
|