Category:Interfaces: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
mNo edit summary
(create all interface objects, or else!)
Line 1: Line 1:
'''[[Wikipedia:Interface (computer science)|Interfaces]]''' are important C++ classes that the engine will access when your mod is running. To use an interface you inherit from it, then cast back in a global [[pointer]] with a predefined name.
'''[[Wikipedia:Interface (computer science)|Interfaces]]''' are important C++ classes that the engine will access when your mod is running. To use an interface you inherit from it, then cast back in a global [[pointer]] with a predefined name.


{{warning|'''''Never, ever''''' modify an interface class itself. You should always inherit then cast back.}}
{{warning|It is important to create ''all'' objects listed in these articles when exposing an interface, even if your mod can be compiled and run without one or another of them. If you try to cut corners you are likely to encounter weird, almost impossible to debug errors either today or after a future engine update!}}
 
{{warning|'''''Never, ever''''' modify an interface class itself. You must always inherit then cast back.}}


== Example ==
== Example ==


<source lang=cpp>IInput* input = new CInput;</source>
<source lang=cpp>static CInput g_Input;
IInput* input = (IInput*)&g_Input;</source>


This creates the <code>[[IInput]]* input</code> object the engine expects, placing behind it Valve's basic input code from <code>[[CInput]]</code>.
This creates the <code>[[IInput]]* input</code> and <code>g_Input</code> objects the engine expects, placing behind them Valve's basic input code from <code>[[CInput]]</code>.


You are free to modify <code>CInput</code> or to create your own inherited class and use that instead; just remember that only the members of <code>IInput</code> are known to the engine.
You are free to modify <code>CInput</code>, or to create your own inherited class and use that instead; just remember that only the members of <code>IInput</code> will be accessed by the engine.


[[Category:Programming]]
[[Category:Programming]]

Revision as of 10:08, 5 August 2009

Interfaces are important C++ classes that the engine will access when your mod is running. To use an interface you inherit from it, then cast back in a global pointer with a predefined name.

Warning.pngWarning:It is important to create all objects listed in these articles when exposing an interface, even if your mod can be compiled and run without one or another of them. If you try to cut corners you are likely to encounter weird, almost impossible to debug errors either today or after a future engine update!
Warning.pngWarning:Never, ever modify an interface class itself. You must always inherit then cast back.

Example

static CInput g_Input;
IInput* input = (IInput*)&g_Input;

This creates the IInput* input and g_Input objects the engine expects, placing behind them Valve's basic input code from CInput.

You are free to modify CInput, or to create your own inherited class and use that instead; just remember that only the members of IInput will be accessed by the engine.

Subcategories

This category has the following 5 subcategories, out of 5 total.

I