Dusty Engine r7

Announce new projects or updates of Irrlicht Engine related tools, games, and applications.
Also check the Wiki
Post Reply
roninmagus
Posts: 91
Joined: Fri Oct 31, 2003 5:03 am

Dusty Engine r7

Post by roninmagus »

Hey guys! I've released the 7th release of Dusty Engine, a Task Engine for Irrlicht.

download it at http://www.daveandrews.org/dustyengine

The code in this release has been greatly cleaned up, many circular dependencies have been removed from it, all kinds of neat stuff.

The best addition in my opinion is that of Waypoint interpolation tasks, for rotation/movement/scaling. You can add points to a waypoint task and the amount of time to move between them and the node will move/rotate/scale through those waypoints. It builds off the pretty strong interpolation code already in the engine to allow pausing/unpausing, changing interpolation values, looping, all kinds of other abilities.

Here's a copy of the changelog for release 7:

======================
Changes in Release 7
======================
Modifications:
--------------
* The code has been cleaned up greatly in this release.
This was necessary as it was becoming very difficult
to add to the engine due to circular dependencies and
other problems. This has been eliminated and the code
is much cleaner and easier to navigate. All tasks were
taken out of dustytask.h and placed in their own header
files. Code was taken out of header files and placed
into .cpp files. This is how it should have been from
the beginning, but at least now it as it should be.

* Completely removed the TimeServer class. It no longer
served any real worthwhile function, other than maybe
maintaining how many time server entries were currently
in use. TimeServerEntries now can be created by passing
a pointer to the Dusty Driver.

* Added a function in DustyDriver which allows access to
the IrrlichtDevice stored in the driver. It is
GetIrrlichtDevice().

* Removed TaskManager class. It added more overhead than
it removed. Also, the Reset() function has been removed
from all tasks (as it was only needed by TaskManager.)

* Removed GetTimeServerEntry() and SetTimeServerEntry() from
Task class. These have been replaced with functions
GetDeltaTimer() and SetDeltaTimer().

* In past releases it was possible to have a parent task be
paused while its children tasks were unpaused. Those
children tasks would still execute even though their parent
was paused. This has been changed in this release. It is
now impossible to unpause a task if its parent is paused,
and it is impossible to add an unpaused task as a child of
a paused one. If you attempt to call TaskTree::AddTask()
with a task unpaused under a parent which is paused, the
task you attempt to add will be added and then immediately
paused.

* Added 4 new functions to RandGen class, designed to ease
production of random vectors and colors. These functions
are RandVector3di, RandVector3df, RandSColor, RandSColorf.

* Added 3 new tasks which are meant to scale/rotate/move a
node within certain boundaries. The tasks are
MoveBoundedTask, ScaleBoundedTask, and RotateBoundedTask.
The programmer may set a "fence" boundary by using minimum
and maximum vectors. The node will then be scaled or rotated
or moved by a vector (just like MoveTask/ScaleTask/RotateTask)
but it will be kept within those boundaries. There is a
function called GetCollisionValue which returns an integer
detailing any type of collision the node has made. The
type of collision will be any of or a combination of these
values:
BCT_NO_COLLISION = 0
BCT_MIN_X = 1
BCT_MIN_Y = 2
BCT_MIN_Z = 4
BCT_MAX_X = 8
BCT_MAX_Y = 16
BCT_MAX_Z = 32

So if a MoveBoundedTask has collided with the minimum x value,
the collisionValue will be BCT_MIN_X. If the node has
collided with minimum x and maximum y, the value is
BCT_MIN_X | BCT_MAX_Y.

* Added new class: NodeAffector. This class is made for two reasons.
It reduces redundant code in all the tasks which deal with scene
nodes (GetNode() and SetNode() functions) and it also allows for
a nice way of dealing with nodes that is not error-prone. It
will grab the node you set to it, and it releases that node if
you attempt to set another one. It basically reduces memory
leaks. Every task which uses nodes has been changed to
inherit from this class:
MoveTask, RotateTask, ScaleTask, MoveBoundedTask,
RotateBoundedTask, ScaleBoundedTask, MoveInterpolatedTask,
ScaleInterpolatedTask, RotateInterpolatedTask.

* Separated the OnUpdate() function in InterpolatedTask into a
few different functions calls. This was for cleanliness and
also to avoid cluttering in the new Waypoint tasks, and to keep
from using the same code again in the waypoint tasks.

* Added 3 new tasks: WaypointMoveInterpolatedTask,
WaypointScaleInterpolatedTask, and WaypointRotateInterpolatedTask.
Don't let their long class names scare you. These tasks are very
simple. You add in points as "waypoints," and the task will
interpolate the supplied node's position, rotate, or scale towards
that waypoint in a supplied amount of time. For example:
- You create a WaypointMoveInterpolatedTask.
- You set a the task to use a node.
- You add a waypoint (10,10,10) to the task.
- You add another waypoint(5,5,5) to the task, time=3000.
- Yet another waypoint (-10,-10,-10), time = 2000.
- You set the task to loop in reverse.

- So now, the node will begin at (10,10,10) and over 3
seconds will move to the point (5,5,5). Once it
reaches (5,5,5) it moves towards (-10,-10,-10) and
reaches it in 2 seconds. Because you have set
reverse looping, it then moves back to (5,5,5) in
2 seconds. Then back to (10,10,10) in 3 seconds.

Had you not set reverse looping, the node would have stopped at
(-10,-10,-10). You can use reverse looping or regular looping,
just like any other interpolated task. With regular looping,
it will loop back immediately at the beginning. This works just
like any other interpolated task. You can set the interpolation
value just like any other interpolated task.

Bugs Fixed:
-----------
* Fixed a bug in DustyDriver in which the IrrlichtDevice
was grabbed but not dropped. This could cause programs
to have errors and memory leaks when the program exits.

* Fixed a bug in TaskTree::AddTask() in which if a task
was supposed to be added as paused, it was not pausing
correctly. This release fixes that bug.
daveandrews.org - A Christian Programmer's Weblog | Dusty Engine - A Task Engine for Irrlicht
keless
Posts: 805
Joined: Mon Dec 15, 2003 10:37 pm
Location: Los Angeles, California, USA

Post by keless »

glad to see you're still working on your engine man. got any tech demos planned?
a screen cap is worth 0x100000 DWORDS
roninmagus
Posts: 91
Joined: Fri Oct 31, 2003 5:03 am

Post by roninmagus »

There are a few demos on the site already, but they're limited in what they show. I'm trying to get some small games created, like that smiley face game to maybe show what all it can do. The one I have been working most on lately is a clone of the old Asteroids game. I was working on it but took a break to fix several headaches I ran into using dusty engine, and to add in some of the ideas I got while doing asteroids (namely the bounded movement task)

So now that r7 is live I'm going to go back to asteroids.
daveandrews.org - A Christian Programmer's Weblog | Dusty Engine - A Task Engine for Irrlicht
Post Reply