Converting a COC to an MFD
Revision as of 21:39, 7 March 2013 by Seanjarvis (talk | contribs)
This tutorial will show you how to convert a normal COC to a Multi-Function Display (MFD) COC.
- In the wizard, add an attribute change callback for ATT_CURRENT_DISPLAYED_SYSTEM. Since this attribute is owned by the base content LOC GeneralAvionics, your base object must have this LOC.
- In RegisterToAttributeChanges(), replace ATT2_STRING_ALL_KEYS_LISTENER with _sParentGaugeNameW. Now the component is only registered to the 2-parameter attribute ATT_CURRENT_DISPLAYED_SYSTEM for its parent gauge.
- In the start() function, replace the line of code between the //DLC_ATTRIBUTECHANGE_CALLS tags with the line below:
CBFuncAttChangeCurrentDisplayedSystem(GET_ENTITY_ATT_INDEX(_pOwnerEntity, _T("ATT_CURRENT_DISPLAYED_SYSTEM")), _sParentGaugeNameW);
- In the callback function for ATT_CURRENT_DISPLAYED_SYSTEM, add code to unregister mouse regions and hide the page if the current displayed system isn't the name of this MFD page. Follow the example below.
if (AttCurrentDisplayedSystem != _T("NAME")) { hideDlc(); unRegisterAllMouseRegionsEvents(); } else { showDlc(); registerAllMouseRegionsEvents(); }
- Use the wizard to add an input event called INPUT_CHANGE_TO_NAME. In the registerToInputDevices() function, edit the code so that the input event has the parent gauge name appended to it. Follow the example below.
wstring inputStr = wstring(L"INPUT_CHANGE_TO_NAME") + _sParentGaugeNameW; REGISTER_INPUT_EVENT_MULTIPLE(_pOwnerEntity, this, &LOC_Class::CBFuncInputEventChangeToName, LOC_Class, inputStr.c_str(), _T("Change to NAME MFD page."));
- In the CBFuncInputEventChangeToName(…) function, add the following code:
CALL_ENTITY_ACTION_2(_pOwnerEntity, _T("ACTION_SET_CURRENT_DISPLAYED_SYSTEM"), _sParentGaugeNameW, _T("NAME"));
- In start(), comment out showDlc() and registerAllMouseRegionsEvents().
- Build and analyze your component. The component will now display only if ATT_CURRENT_DISPLAYED_SYSTEM is equal to NAME.