I've completed a new release of Dusty Engine! Release 9. Here's the news from my site:
Here's a copy of the changelog:After a bit of a break in development on Dusty Engine while I've been working on projects using Irrlicht and DE, I focused my energies back onto Dusty Engine development, and the result of that is Dusty Engine R9!
This release focused mostly on cleaning up and refining the Entity class, based upon experiences I've had while using it. A huge pausing bug was fixed, and the entities now create much less tasks on the task tree, greatly improving performance.
Thanks very much to Michael Taupitz for his help in ideas for this release. Download now and check out the changelog for new changes!
Dusty Engine
A Task Engine for Irrlicht
by Dave Andrews
http://www.daveandrews.org
======================
Changes in Release 9
======================
- Thanks much to Michael Taupitz for inspiring many changes to the
Entity class.
Modifications:
--------------
* Rewrote the Entity and EntityParentTask classes. The interface for
Entity is exactly the same, except with some additions noted below.
In release 8, an entity would create 13 tasks on the task tree, and
pause/unpause them to use only the ones it needed. In this release,
the Entity only creates 4 tasks on the task tree: a parent, a movement
task, a scale task, and a rotate task, and it uses only the different
types of tasks as they are needed. The other unnecessary tasks are
created in memory but are only present on the tree when they are
needed. This change created a dramatic increase in entity performance.
* TaskTree will now grab() a task when it is added to the tree.
It still drop()s a task when it is destroying. This means that
when you add a task to the task tree, you must now call task->drop()
on that task:
DummyTask * myTask = new DummyTask();
taskTree->AddTask(myTask);
myTask->drop();
If you drop the task after adding it to the tree, then the task
will be deleted from memory when the tree no longer needs it.
* Added a new function to DustyDriver: GetEntityByNode(). This function will
return the entity that is associated with the given node. If it fails, it will
return NULL.
* Added a new ability to Entity class that will cause it to remove() the node
it is working with when the entity is destroyed. This allows the programmer
to set the node to an entity and not worry about removing it manually from
the scene when the enttiy is destroyed. The functions are SetRemoveOnDestroy()
and GetRemoveOnDestroy(). This will default to false.
* Added functions to Entity class that allow getting the current interpolation
value of waypoints. GetMoveWaypointInterpolatinoValue(),
GetScaleWaypointInterpolationValue(), and GetRotateWaypointInterpolationValue().
* Added functions to the Entity class which allows you to set the entity
to execute tasks multiple times to make up for time passed between the
last executions. (See docs for Task class, SetExecuteMultiple.)
* Added functions for controlling direction of interpolation in an
entity. ReverseMoveInterpolation(), IsMoveInterpolationReversed(),
ReverseScaleInterpolation(), IsScaleInterpolationReversed(),
ReverseRotateInterpolation(), IsRotateInterpolationReversed().
* Added functions to the Entity class that allow easy addition
and removal of non-default tasks to the entity. This can be
used in many situations where you want a task to be destroyed
or paused or unpaused with the entity. Those functions are
AddChildTask() and RemoveChildTask() in the Entity.
* Added functions to the Entity class that are accessors for the
move type, scale type, and rotate type. I was amazed to see that
I had SetMoveType(), SetScaleType() and SetRotateType() but not their
accessors, so I added GetMoveType(), GetScaleType(), and GetRotateType().
* Sometimes it is necessary to associate a "Tag" with a task.
I've added a field to the Task, which is a string called
tag. There are functions GetTag() and SetTag(), that allow
you to associate a string with a task. This is not used for
any purpose internally.
Bugs Fixed:
-----------
* Fixed a bug where a node that was being controlled by an entity
would become invisible when an entity or the task tree was paused
and then unpaused.