what I've been up to
Posted: Thu Jan 29, 2004 9:21 pm
You may have noticed the ICE and Tetris project threads seem dead.
This isnt because Im not programming! I've been busy testing out some more game engine and 3D stuff in IrrLicht. Im not posting this in the Projects thread because its not quite ready to be called a project yet, but when I do, it will be called IrrLichtRPG. When I get to actual content creation based on this engine, I will be calling it the "Erring Light Saga". Im original with names, arent I?
Currenly I have a room with two faerie models running around in it. (You may have seen the binary demo I posted with the floating camera.) Thats about as far as its gotten functionally, but whats important is more whats under the hood.
Currenly things have been abstracted to a high-level message passing system. Instead of directly manipulating an object's position or animation based on key input-- now a key creates a message "creature 0 move forward" which is sent to the level manager and then to the appropriate model controller. This scheme will make adding scripting and networking easy later on.
Currently you can add and remove entities from the level manager, and all entity's collision animators will add or remove the new entitiy's collision information, and it will add all of theirs.
I found the collision detection interface to be clunky in this aspect, as to add a new CD-enabled object to an environment, you have to add its BB-TS to all other entity's collision animators, as well as create a new MetaTriangleSelector to add the level and all other entity's BB-TSs to be used as the new entity's collision animator's TS. Plus, when you need to remove an entity, you must go thru all other entities and have them remove the BB-TS belonging to the entity to be removed.
Clunky, but it works. On my computer at work, running OGL in software, I am able to add and remove objects to the room.3ds + faerie.md2 scene with about 2 faeries in it without visual lag, and I havent stress tested it yet, but I assume I could get up to about 500 entities before it became visual (since its just adding and removing pointers from IMetaTriangleSelectors).
Another interface I found to be clunky is the IAnimatedMeshSceneNode. Creating them is very easy. Animations are so-so, and removing the actual mesh seems impossible?
First of all: removal. I cant seem to find anyway to specifically make IrrLicht remove a mesh. I cant drop() it because its not a create call-- I hope that while it is sitting in memory with no references, that if that memory is needed, it will be removed. But that would only work if its needed by other IrrLicht memory-managed objects. And I really want to be able to control the unloading of all resources myself.
Animations: I can easily tell it to start an animation. However, I cant tell how long the animation is, so if some event wants to start a new one, I cant tell if I've finished the current one. In the very least, I'd like a boolean setting for "uninterruptable" so that starting a new animation while the current one is running will return false. Also, I'd like to be able to tell it to play an animation only once, and then give it an animation name to return to after its done. Something like:
setMD2AnimOnce(EMAT_ATTACK, EMAT_STAND);
where Attack is uninterruptable, though Stand probably wouldnt be.
The next thing I'll be doing is implementing 'weapon collision'. IE: when someone attacks, I'll generate a bounding box or sphere, and asking the scene manager what nodes it hits, then determining if those are entities which could take damage, and then generating an event to "damage creature x"
After that, I'll be adding support for 'timed-live-span' or 'temporary' entities. So when you cast fire, a fire particle system will be created as a 'temporary' entity which will remove itself after its life-span. These will be kept in a separate array from the regular entities because they dont need to worry about collision detection.
Eventually when thats done, I'll actually declare this a new IrrLicht Project, and announce it, as well as release the commented source code. I'll be adding a scripting system using CaLUA, creating an RPG stats system, and probably use SQLlite for stats storage/retrieval. Networking is an option, though not likely unless someone else wants to co-author this project with me when its started.
This isnt because Im not programming! I've been busy testing out some more game engine and 3D stuff in IrrLicht. Im not posting this in the Projects thread because its not quite ready to be called a project yet, but when I do, it will be called IrrLichtRPG. When I get to actual content creation based on this engine, I will be calling it the "Erring Light Saga". Im original with names, arent I?
Currenly I have a room with two faerie models running around in it. (You may have seen the binary demo I posted with the floating camera.) Thats about as far as its gotten functionally, but whats important is more whats under the hood.
Currenly things have been abstracted to a high-level message passing system. Instead of directly manipulating an object's position or animation based on key input-- now a key creates a message "creature 0 move forward" which is sent to the level manager and then to the appropriate model controller. This scheme will make adding scripting and networking easy later on.
Currently you can add and remove entities from the level manager, and all entity's collision animators will add or remove the new entitiy's collision information, and it will add all of theirs.
I found the collision detection interface to be clunky in this aspect, as to add a new CD-enabled object to an environment, you have to add its BB-TS to all other entity's collision animators, as well as create a new MetaTriangleSelector to add the level and all other entity's BB-TSs to be used as the new entity's collision animator's TS. Plus, when you need to remove an entity, you must go thru all other entities and have them remove the BB-TS belonging to the entity to be removed.
Clunky, but it works. On my computer at work, running OGL in software, I am able to add and remove objects to the room.3ds + faerie.md2 scene with about 2 faeries in it without visual lag, and I havent stress tested it yet, but I assume I could get up to about 500 entities before it became visual (since its just adding and removing pointers from IMetaTriangleSelectors).
Another interface I found to be clunky is the IAnimatedMeshSceneNode. Creating them is very easy. Animations are so-so, and removing the actual mesh seems impossible?
First of all: removal. I cant seem to find anyway to specifically make IrrLicht remove a mesh. I cant drop() it because its not a create call-- I hope that while it is sitting in memory with no references, that if that memory is needed, it will be removed. But that would only work if its needed by other IrrLicht memory-managed objects. And I really want to be able to control the unloading of all resources myself.
Animations: I can easily tell it to start an animation. However, I cant tell how long the animation is, so if some event wants to start a new one, I cant tell if I've finished the current one. In the very least, I'd like a boolean setting for "uninterruptable" so that starting a new animation while the current one is running will return false. Also, I'd like to be able to tell it to play an animation only once, and then give it an animation name to return to after its done. Something like:
setMD2AnimOnce(EMAT_ATTACK, EMAT_STAND);
where Attack is uninterruptable, though Stand probably wouldnt be.
The next thing I'll be doing is implementing 'weapon collision'. IE: when someone attacks, I'll generate a bounding box or sphere, and asking the scene manager what nodes it hits, then determining if those are entities which could take damage, and then generating an event to "damage creature x"
After that, I'll be adding support for 'timed-live-span' or 'temporary' entities. So when you cast fire, a fire particle system will be created as a 'temporary' entity which will remove itself after its life-span. These will be kept in a separate array from the regular entities because they dont need to worry about collision detection.
Eventually when thats done, I'll actually declare this a new IrrLicht Project, and announce it, as well as release the commented source code. I'll be adding a scripting system using CaLUA, creating an RPG stats system, and probably use SQLlite for stats storage/retrieval. Networking is an option, though not likely unless someone else wants to co-author this project with me when its started.