This project involves creating the basic outline for a simulation engine in C# One could think of it as a 2D game. It will need a GUI which can display a tile-based map and render entities on the map, and a simple, thread-safe world model which just holds known world objects.
Good architecture and thread safety a must.
## Deliverables
This project will consist of creating a prototype for a simulation engine in C#. The project roughly follows the model-view pattern. I will explain what I have in mind below, but any recommendations are welcome based on your expertise.
**Model**
The model can roughly be viewed as the 'world'.
- It should havea container or manager for known objects. For this project, the objects need only a unique ID and a 3D position.
- Objects should be added, removed, and updated in a thread-safe
manner.
- Adding and removing objects will occur several times per second, but updates much more frequently.
**View**
The view will be a GUI which can display the objects from the model on a tile-based map.
- The maps will vary both in dimension and tile-size, for example one area could be 4x4 and have 128x128 pixel tiles, and the next area could be 20x24, etc. The area ID, size of the map, and size of the tiles should be accessed from the model. Map tiles will be numbered sequentially starting from zero.
- The map should be able to follow an entity while seamlessly loading surrounding tiles. It may optionally be able to zoom and pan based on user input.
- The GUI should always feel fast and responsive, so background work such as loading should be performed elsewhere.
- I've considered GDI+ or an OpenGL window inside the .NET form, though maybe you have a better solution.
**Misc**.
- For the purpose of this project, a seperate thread should simulate adding, removing and updating the position of the world objects.
- It should contain two sample areas (they can be small, blank tiles) and be able to move from one to the next.
- I'm specifically looking for good architecture, 'best practice' coding, good threading, and good performance (in that order).