#ifndef ACTION_LIST_H_ #define ACTION_LIST_H_ #include #include #include #include #include class EventLocator; namespace ActionButton { // Create a function ptr type for easy handling of new actions. // typedef ButtonHandler* (*newActionPtr)( ActionEventLocator* pActionEventLocator); // Keep the names around in debug mode. // #ifdef RAD_DEBUG #define MAKE_ACTION_KEY( s ) s typedef const char* ACTION_KEY; bool CompareActionType( const char* typeName, const char* actionName ) { return ( ::radMakeCaseInsensitiveKey( typeName ) == ::radMakeCaseInsensitiveKey( actionName ) ); } #else #define MAKE_ACTION_KEY( s ) radMakeCaseInsensitiveKey( s ) typedef radInt64 ACTION_KEY; bool CompareActionType( const char* typeName, tUID actionUID ) { return ( ::radMakeCaseInsensitiveKey( typeName ) == actionUID ); } #endif // A key, function ptr pair. // struct ActionIndex { ACTION_KEY mActionKey; newActionPtr actionPtr; }; // Add entries to this table when you want to create new actions. // static int nameIndex = 0; ActionIndex theListOfActions[ ] = { { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), ToggleAnim::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), ReverseAnim::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PlayAnim::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PlayAnimLoop::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), AutoPlayAnim::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), AutoPlayAnimLoop::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), AutoPlayAnimInOut::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), DestroyObject::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), DestroyObject::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), UseVendingMachine::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PrankPhone::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), SummonVehiclePhone::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), Doorbell::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), OpenDoor::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), TalkFood::NewAction }, // NB switch to TalkCollectible::NewAction { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), CollectibleCard::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), TalkDialog::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), TalkMission::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), CollectibleFood::NewFoodSmallAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), CollectibleFood::NewFoodLargeAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), CollectibleCard::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), DestroyObject::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PlayAnimOnce::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), AutomaticDoor::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), WrenchIcon::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), TeleportAction::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PurchaseCar::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), PurchaseSkin::NewAction }, { MAKE_ACTION_KEY( ActionName[ nameIndex++ ] ), NitroIcon::NewAction } }; const int ActionListSize = ( sizeof(ActionButton::theListOfActions) / sizeof(ActionButton::theListOfActions[0]) ); }; #endif