Massive amounts of work done in the last few days. HUGE update:
//Interfaces
I've created the interfaces for the entire program, and I'm in the process of remapping the references in the program to use the interfaces instead, which is most of the way there. Every class defines a relevent interface to connect derive from.
//Extensions
Added a test for BuildEnvironment, to see if I've built the program in Debug or Release mode without needing to use the #if and #endif which makes the code messy to read.
//SlaveObjectFactory and MasterObjectFactory
Created an object factory for creating all the interfaces. if I want a RichTextString, I create the object from the factory, then reference it and work with it via the interface. MasterObjectFactory references the entire program. SlaveObjectFactory references nothing. The entire program references SlaveObjectFactory. When I start the program, I link the MasterFactory to the SlaveFactory, so that when I call the creation from the Slave, it's actually occuring in the master. This way, no part of the program needs to reference any other part of the program, just the interfaces, and the SlaveObjectFactory to create the objects. Interface to work with, Factory to create. The complexity of the program just went from being a birds nest to a simple linear line.
//Color
Reworked color to use the interfaces. Needs to be redone a bit more as I finalised the interface for Color. Can convert from a SimpleColor (represented by a color code character like "A" for green or "0" for black) to a 32BitColor, with alpha, or anything inbetween.
//Logger
Works much like the Slave/Master object factory. I can call Console.AddMessage from anywhere, and the actual user interface links itself to the logger in the same way when the program starts. Ditto for Debug messages. I can call Console.AddMessage from anywhere in the program and it will show up in the Console UI window now. Previously impossible due to circular dependency. Ditto for Debug.
//ExceptionHandling
Basic Core for exception handling declared. Will be used to catch all sorts of errors in the program and write them to the debug window in future.
//UnitsOfMeasurement
Class redeclared in the interface, but needs to be implemented still, shouldn't take too long to do this now that the entire structure is declared in interfaces.
//Databases
Database is 90% of the way towards using interfaces ONLY and not relying on Colors, RichText etc. Few more things to change up here to get that all working (Read: Need to link everything to the ObjectFactory).
//IO
File, CommandFile, ListFile types all declared but need to implement the interface 100%. Almost there...
//Math
Changed up some of the coordinate systems to use generics. Now have Points, Vectors using IDistances, and Coordinate for generic types, and Orientation for angles.
Equations and statistics now using interfaces.
//Networking
Connection declared in interfaces needs to be reimplemented, not too much to change.
PacketProcessor declared in interfaces. Has a linking method at runtime much like Logger and ObjectFactory.
Packets have all been redeclared in the interface to use units of measurment where possible.Reimplemented up to packet 11(Flight Data) but more to go. Packet data is now easier to work with thanks to conversion from the packet data to a useable format in the program.
Server implements interface and can be created by the ObjectFactory.
//RichText
Now all using interfaces to be driven, no more inter-dependency. Created RichTextElement which describes one string, and it's particular color and formatting. A RichTextString is a list of Elements, and a RichTextMessage uses a string, plus a few interfaced Date and Time stamps plus a reference to the creating User.
//Settings
Now using interfaces instead of referencing the implementations.
//UserInterfaces
Improvements to the way messages are written in the console. Some message types now have the background colored differently. Can show and hide all message types according to the correct output window. Messages are drawn at an increased width if hiding date/time etc. Overall much prettier.
//YSFlight
Declared interfaces but need to implement them for DAT and LST files.
-----
So that's the full status of the program.
I'll give you another shot of the program dependency tree and code metrics. Hopefully there is an improvement. but I have 280 odd errors to clear at the current time, so maybe it won't even work...
EDIT: Yep. Can't do the code metrics until I fix all the errors, Miught just have to stand by.
Do note that the complexity of that project dependency diagram is going to go way down over the next few days.
I am an accountant working full-time (and some). I'm not here as often as I would like to be. Send a message if you need me. There are a few people in the community who can get in contact with me urgently if you need - don't be afraid to ask. I just don't check here as frequently as I used to. Sorry!