This project has been progressing slowly for the past few weeks. I was losing motivations quickly as this is the fourth or fifth time that I’ve re-written this same system. As of Sunday, it finally worked again, and I had my plan rewritten. Layers are good, grid mutation is good, actions are good.
Then I realized that the evolution system that I’m working toward probably won’t fit in to this system very well. I’m making a system where I can design creatures with specific behaviors that are dynamically tweaked as they “evolve” the parameters for those behaviors. I want a system where creatures design themselves and whose behavior is based entirely on a set of parameters. That’s going to be a lot more challenging and I still like the first system, so it would be nice to have both.
I decided that grid management should be a trait instead of a struct since this overall grid construct is pretty reusable.
Now all of my grid management code is part of OrganismGridManager which implements this trait. This is a pretty huge change, but I think it should have worked like this from the start. Working through the process of rewriting exposed some of the areas where strong coupling between systems made everything a pain to change.
Once this is done, I can use my grid system for multiple different things. For instance, I’ll be able to make a cellular automata engine fairly easily.
In other news, I think I can stop calling these posts “Learning Rust”. I’ll obviously be learning Rust for a long time, but it’s more of a trickle now. I’ll probably make it an even 10 posts and do a wrap-up and summary once my current refactoring project is done, after which this will just be a regular development blog along with some tutorials that cover some of my pain points learning the language.