﻿
Things that can improve:
	* Drawing 6 triangles per triangle in the wireframe takes lots of performance.
		Degrade to half transparent filled shapes when not hovering the view.
		Also allow realistic rendering.
		Prevent redrawing everything when moving one camera.
			Only redraw when something changed.
	* A loop may give faster rendering than the timer by not adding a delay.

Bugs:
	

To do:
	* Complete the tool actions.
		* Rotate from flat views.
			It is difficult to not accumulate a rounding error even if the matrix is orthogonalized.
			One drag should be one modification with one layer of precision errors.
		* Select multiple items from flat views using AABB bounds.
			An item is inside if all 8 AABB corners are inside the 2D rectangle.
	* High quality rendering for high quality concept art.
		Let the camera's view frustum intersect the world bounds to lower the resolution when shadows start to disappear.
			Enabling this option is recomended for indoor scenes with only one level.
		When having multiple light sources, let each one have the entire light atlas and accumulate one light source at a time even if it takes minutes to complete.
			Light sources at a distance from the camera may use less iterations to give more time to the close shadows.
		Make a command for rendering and saving an image with extra high resulution and light iterations.
	* Allow duplicating a group of selected items by holding shift while moving or rotating.
		With tags and everything.
		Detect overlapping items that have the same location and model index.
	* Store different detail level limits, view distances and other things related to quality/performance ratio.
		The game should only tell the world class what kind of performance the computer have available and use the predefined settings.
		Some items (Leafs, stones, garbage...) that are only visual will not even be loaded until high performance graphics is selected.
	* Draw and align to background grid.
	* Also allow zooming using both mouse buttons like in the model editor.
	* Allow adding tags with spelling suggestions to standardize common uses.
		Example: Mass, Friction, Bouncyness, Health, Script, Title, Message, Team, FirstName, MiddleName, LastName...
		When one item is selected, show a list of it's tags using " = " to separate attribute name and value.
			Use quote signs around the value to show spaces but don't allow the space character in the case insensitive attribute names.
	* Let every item have a name that can be used to get one or more items in the level.
		There might be a script in the level that require getting an item's index by name.
		The game might demand that there is at least one item with a certain name.
			This will not be the case for the main spawn location since it is used in almost every shooter game.
	* Show images representing loaded models on the left part of the engine component.
		Try not to save any images on the harddrive since they would be annoying to clean up all the time.
	* Allow placing light sources and loading a light projection atlas for patterns.
		The source boxes should be easy to scale by a factor when more tiles are added to the atlas.
		Allow using the camera location to place spot lights and the left mouse button for placing items.
			A location and direction will be kept for recalculating the center point when going against a floor, wall or roof.
		Make an optional flashlight that is toggled using the F key when navigating the camera.
		Light sources should be possible to connect to an item so that it can be stored in the game's library.
	* An occlusion system in the world class will let the user give all items within a room an axis aligned bounding box that confine all space that it can be seen from.
		A single bound tell from where you can see either the items or their shadows.
		During debug drawing, invisible things will be drawn in red instead of being invisible.
		Moving a rigid body to another room will change what occlusion test it will listen to.
		For large scale outdoor scenes, every item will also be assigned to a dynamic size bucket in a grid.
			The user decide the grid's dimensions, rows and columns.
				3 dimensional grids would only waste space since no city is so high that you can't see the streets from the top of a building.
			Use the grid while designing levels to allow millions of items to be placed in the worst case.
	* Handle physics and let things fall down until they can be deactivated.
		Point and hinge constraints should be possible to add between dynamic rigid bodies and directly to nothing.
			Try to integrate the slider constraint from Bullet for sliding doors and elevators.
			Engine speed should be a tag that it just listen for.
			Scripted events and logic graphs should be able to rewrite an existing tag to set the speed.
				Creating new tags should however not be allowed to prevent misstyped attribute names from doing nothing.
		Items should be able to hang in ropes from the ceiling and other dynamic rigid bodies.
		Soft constraints for ropes are easy to add outside of the physics engine.
	* Allow placing nodes that are only seen in the game's debug mode.
		They are used as spawn locations, triggers, navigation points, game logic neurons (On/off signals without busy waiting).
		The machine for interpreting them can be in the world class for a standard programming of doors, evevators and particle sprays.
	* Try using the line triangle intersection in the model editor without making it too slow or memory wasting.
		This combined with an alternative camera navigation would make it a good editor for the larger building blocks of the world.
