15 #include "asyncTaskSequence.h" 16 #include "asyncTaskManager.h" 26 AsyncTaskSequence(
const string &name) :
39 ~AsyncTaskSequence() {
40 set_current_task(NULL,
true);
53 bool AsyncTaskSequence::
55 return (get_num_tasks() > 0);
66 AsyncTask::DoneStatus AsyncTaskSequence::
72 if (_task_index >= get_num_tasks()) {
74 set_current_task(NULL,
true);
76 if (_task_index >= get_num_tasks()) {
79 if (_repeat_count > 0) {
82 if (_repeat_count != 0) {
89 set_current_task(task,
true);
90 nassertr(_current_task != (
AsyncTask *)NULL, DS_exit);
92 DoneStatus result = _current_task->do_task();
98 double now = _manager->_clock->get_frame_time();
99 _current_task->_start_time = now + _current_task->_delay;
101 _delay = _current_task->_delay;
102 _has_delay = _current_task->_has_delay;
104 if (result == DS_pause) {
125 nassertr(
false, DS_exit);
139 void AsyncTaskSequence::
141 AsyncTask::upon_birth(manager);
143 set_current_task(NULL,
true);
166 void AsyncTaskSequence::
168 AsyncTask::upon_death(manager, clean_exit);
169 set_current_task(NULL, clean_exit);
178 void AsyncTaskSequence::
179 set_current_task(
AsyncTask *task,
bool clean_exit) {
180 if (_current_task == task) {
184 if (_current_task != (
AsyncTask *)NULL) {
185 nassertv(_current_task->_state == S_active_nested);
186 nassertv(_current_task->_manager == _manager || _manager == NULL);
187 _current_task->_state = S_inactive;
188 _current_task->_manager = NULL;
189 _current_task->upon_death(_manager, clean_exit);
192 _current_task = task;
194 if (_current_task != (
AsyncTask *)NULL) {
195 nassertv(_current_task->_state == S_inactive);
196 nassertv(_current_task->_manager == NULL);
197 _current_task->upon_birth(_manager);
198 nassertv(_current_task->_state == S_inactive);
199 nassertv(_current_task->_manager == NULL);
200 _current_task->_manager = _manager;
201 _current_task->_state = S_active_nested;
203 double now = _manager->_clock->get_frame_time();
204 task->_start_time = now;
205 task->_start_frame = _manager->_clock->get_frame_count();
A class to manage a loose queue of isolated tasks, which can be performed either synchronously (in th...
This class represents a concrete task performed by an AsyncManager.
TypeHandle is the identifier used to differentiate C++ class types.