diff --git a/direct/src/task/TaskNew.py b/direct/src/task/TaskNew.py index b5ac9f2d77..0770312795 100644 --- a/direct/src/task/TaskNew.py +++ b/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. diff --git a/panda/src/event/asyncTask.I b/panda/src/event/asyncTask.I index 27bd271442..eee789dbc1 100644 --- a/panda/src/event/asyncTask.I +++ b/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) { diff --git a/panda/src/event/pythonTask.cxx b/panda/src/event/pythonTask.cxx index e8144fe0f3..dfad8b6083 100644 --- a/panda/src/event/pythonTask.cxx +++ b/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 {