How about this idea…. Python is a pilot, and C++ is the ship.
Basicly I figure that I still want to keep most of the object infrastructure in C++ but let python control some objects such as ships.
I did come up with the idea of sending extensive data back and forth via lists rather then separate methods for everything… this will surely save time and code, since I wont have to have a method for every little detail that python or C might need to know about a ship.
In any case, I am still working on this whole integration thingie.
Today I realised that perhaps the best way to store data about graphics, sounds, objects and actions would probably be XML.
After creating some basic XML files containing the data for my meager game, I have come to realise that I was correct. Using XML files might create a larger file, but in the end I believe it to be worth it.
XML makes it easy to store the data about all kinds of shit, and by using DTDs I can even set default values for rarely used fields and all that kind of stuff.
In other words, the ambiguity of ["ship-01","ship.png",12,5,1] was replaced with
<ship type="ship-01">
<action name="default">
<animation name="ship-01-default"/>
</action>
</ship>
With the animation itself being in a different place. Basically I believe this will allow me to easily create lots of versatile templates for my game without having to wonder down the road what the hell it all means.
I am currently working on parsing the XML files with libxml so I can start using the data from the XML files. It has taken me some time to figure out how the stuff works, but I think I got a grasp on it now and tomorrow I should be able to shun the python data files and just use XML. I hope.
An important thing to consider:
At the moment, most default values for speed, names, hitpoints and such are all set inside unchangeable C code.
And python has no way to change it. This is bad, simply because python should be the one dictating how many hitpoints the Player ship has and what the speed of torpedoes is.
Tomorrow (or whenever i get time to continue with this), I shall thoroughly look over the control that python has over the objects, and try to decide how to give it more control, as well as get the communication between python and C++ code improved.
I believe that C++ should keep track of objects collisions and such, their life or death state etc, and report any change back into python, while python will be the one to set the values.
Still hungry, and tired.
After coding for a few hours, I’ve come to a pretty decent idea of what I am dealing with.
At the moment, sprites and sounds are completely separated from actual objects.
Well, sounds are actually extensions of the base Object, and sprites are stored in a MAP with the object id being the key.
The issue right now is that there is no way for the object to inform the sprite as to what graphic it wants to have.
Earlier this was done with the object type string, however the object type is now an integer and is more a generic type to help with the creation of the correct class in python.
I realise now however, that the reason python was using strings for object type was simply because the strings were equal to the class names inside the C++ code. I think I will go back to that for simplicity.
Also, the whole object type thing, while very useful for torpedoes, still needs some clarification as to it’s role in other instances.
As for which sprite will be assigned to which object, perhaps the addObject method can simply accept the name of the sprite that is needed, or even better, the python code will use it’s newly created Action code to assign a sprite to an object, until such a time, the object will simply be a floating piece of nothing.
However upon first creation of the object the action code will assign a sprite by default so we dont have to do too many method calls for creation of every object.
Basically this post if full of random thoughts, so i can remember this stuff tomorrow.
I added a new method to the base object called destroyAllChildren. This one not only makes children into orphans, but also kills them, meaning they are garbage collected and removed from the object manager upon the next loop.
This has proven useful when we add sounds as children to objects. Because as the object is destroyed, so are the sounds and any other children that are associated with it. However it is also a problem because even though a ship is destroyed, it’s torpedoes live on. So I think this method will surely not live inside the constructor. I think the best way to get rid of all useless sounds is to make their isAlive method return false when the sound is done playing.
Also I just noticed how cleverly (I think) I handled the sound issue. By making sounds into extensions of object class, I have simply been able to add sounds into the very same object container that holds all the other objects. Making sounds into children of objects, I am able to give sounds position data from their parents without relying on specific functionality in the object manager.
This seems to work extremely well, and the only downside is that right now sounds are not automatically garbage collected because their isAlive method always returns true. If I could simply make it return false when the sound is finished, garbage collecting sounds will be a piece of cake. Or rather, it will be done automatically since the function is already there.
Perhaps a similar method could be used for graphics. To create a Graphic or Animation extension of the object class, and assign this graphic as a child to whatever object it should be assigned to. Then make it’s obey parent obey the parents every move (not just match velocity), and we’re good to go. This might be the best idea I’ve had yet.
The cool thing is that with this method, we don’t need too much special functionality in the object manager, and we can also extend the Graphic object with more details such as multiple layers and whatnot.
Hungry. Must eat.
I am just sitting here thinking about how to handle various actions that an object can perform and how those actions will affect the object, as well deal with sound.
A thought did occur to me that perhaps a good way would be to have a bunch of action objects, and each of those would in turn have its own sound, graphic and other stuff.
This means that we would in essence be free to choose which actions an object can perform, and simply change to a different action library if we wanted to use a different type of engine for the game.
For example, a text action library might perform actions by returning or printing text, while a 2D action library might use sprites and sounds for different actions.
Now, the trick is to decide how far the actions extend and what kind of default actions each object normally has anyway. Also, where exactly the actions will live, in C++ or in Python?
I will attempt to discuss this topic now.
Now Playing: Gamma Ray - Voice In My Head
Read more…