Oh, and to add a few extra notes to Mego's already good explanations.
First of all, you can call your guard words whatever you like. In the last project I worked in, we used this naming scheme:
__[First letter in Core Name][Module Name] so, for an example a header for mathematics could look like this __mQUATERNIONS. But yeah, it's just to illustrate that you can name them anything, as long as the naming is consistent. Also, adding underscores will generally keep them away from important code when using code suggestions. (Yes I am a big fan and user of intellisense)
Another thing you should remember when using headers is the guard word #pragma once.
Instead of writing:
#ifndef something
#define something
//Interface
#endif
You can write:
#pragma once
//Interface
The reason why it's smart to use this keyword is that major compiler actually are optimized to make use of the pragma once keyword. The #ifndef guard will make the compiler scan the file each time to find the #endif. Which, if the file is used in many other files, will slow down compilation.
#pragma once is however not a standard preprocessor directive, and some compilers will not support it. That is why you can, if you want, include both:
#pragma once
#ifndef something
#define something
//Here you put your interface.
#endif
This will keep the code portable, but still make use of the pragma keyword if the compiler supports it.
@Gatleos, I think simply adding the slopes max height to the object when it "stands" on a slope is probably the easiest solution with the setup you're using.
I don't really know what else to say, I just don't think I quite understand what you mean. Sorry!