Ver código fonte

a bit friendlier

David Rose 17 anos atrás
pai
commit
277753ed2b

+ 6 - 3
direct/src/task/TaskNew.py

@@ -211,7 +211,7 @@ class TaskManager:
         self.mgr.add(task)
         return task
 
-    def add(self, funcOrTask, name, sort = None, extraArgs = None,
+    def add(self, funcOrTask, name = None, sort = None, extraArgs = None,
             priority = None, uponDeath = None, appendTask = False,
             taskChain = None, owner = None):
         
@@ -275,13 +275,16 @@ class TaskManager:
         else:
             self.notify.error(
                 'add: Tried to add a task that was not a Task or a func')
-        assert isinstance(name, types.StringTypes), 'Name must be a string type'
+
         if extraArgs is None:
             extraArgs = []
             appendTask = True
         task.setArgs(extraArgs, appendTask)
 
-        task.setName(name)
+        if name is not None:
+            assert isinstance(name, types.StringTypes), 'Name must be a string type'
+            task.setName(name)
+        assert task.hasName()
 
         # For historical reasons, if priority is specified but not
         # sort, it really means sort.

+ 3 - 2
panda/src/event/asyncTask.I

@@ -49,8 +49,9 @@ get_manager() const {
 //
 //               Setting this value after the task has already been
 //               added will not affect the task's wake time; it will
-//               only affect the task if the it is re-added to the
-//               queue in the future.
+//               only affect the task if it is re-added to the queue
+//               in the future, for instance if the task returns
+//               DS_again.
 ////////////////////////////////////////////////////////////////////
 INLINE void AsyncTask::
 set_delay(double delay) {

+ 16 - 4
panda/src/event/pythonTask.cxx

@@ -248,9 +248,13 @@ __setattr__(const string &attr_name, PyObject *v) {
   }
 
   if (attr_name == "delayTime") {
-    double delay = PyFloat_AsDouble(v);
-    if (!PyErr_Occurred()) {
-      set_delay(delay);
+    if (v == Py_None) {
+      clear_delay();
+    } else {
+      double delay = PyFloat_AsDouble(v);
+      if (!PyErr_Occurred()) {
+        set_delay(delay);
+      }
     }
 
   } else if (attr_name == "name") {
@@ -259,7 +263,7 @@ __setattr__(const string &attr_name, PyObject *v) {
       set_name(name);
     }
 
-  } else if (attr_name == "id") {
+  } else if (attr_name == "id" || attr_name == "wakeTime") {
     nassert_raise("Cannot set constant value");
     return true;
 
@@ -300,7 +304,15 @@ __getattr__(const string &attr_name) const {
   } else if (attr_name == "name") {
     return PyString_FromString(get_name().c_str());
   } else if (attr_name == "wakeTime") {
+    if (get_state() != S_sleeping) {
+      Py_RETURN_NONE;
+    }
     return PyFloat_FromDouble(get_wake_time());
+  } else if (attr_name == "delayTime") {
+    if (!has_delay()) {
+      Py_RETURN_NONE;
+    }
+    return PyFloat_FromDouble(get_delay());
   } else if (attr_name == "id") {
     return PyInt_FromLong(_task_id);
   } else {