123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2013 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _BEHAVIORCOMPONENT_RAISEEVENT_H_
- #include "behaviorComponentRaiseEvent.h"
- #endif
- //-----------------------------------------------------------------------------
- /*! Copies a behaviors values to a component
- */
- ConsoleFunctionWithDocs( copyBehaviorToComponent, ConsoleBool, 3, 3, (behavior, component))
- {
- // Fetch behavior/component Ids.
- const S32 behaviorId = dAtoi( argv[1] );
- const S32 componentId = dAtoi( argv[2] );
- // Fetch behavior.
- BehaviorInstance* pBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( behaviorId ) );
- // Sanity!
- if ( !pBehavior )
- {
- Con::warnf( "copyBehaviorToComponent() - Could not find behavior '%d'.", behaviorId );
- return false;
- }
- // Fetch component.
- SimComponent* pComponent = dynamic_cast<SimComponent*>( Sim::findObject( componentId ) );
- // Sanity!
- if( !pComponent )
- {
- Con::errorf( "copyBehaviorToComponent() - cannot find component '%d'.", componentId );
- return false;
- }
- // Fetch template.
- BehaviorTemplate* pTemplate = pBehavior->getTemplate();
- // Fetch template field count.
- const U32 fieldCount = pTemplate->getBehaviorFieldCount();
-
- const char* pFieldValue = NULL;
- BehaviorTemplate::BehaviorField* pField = NULL;
- // Copy behavior fields.
- for( U32 index = 0; index < fieldCount; ++index )
- {
- // Fetch behavior field.
- pField = pTemplate->getBehaviorField( index );
- // Fetch field value from behavior (if any).
- pFieldValue = pBehavior->getDataField( pField->mName, NULL );
- // Set field value on component.
- pComponent->setDataField( pField->mName, NULL, pFieldValue );
- }
- return true;
- }
- //-----------------------------------------------------------------------------
- ConsoleMethodGroupBeginWithDocs(BehaviorComponent, DynamicConsoleMethodComponent)
- /*! Add a behavior to the object
- @param bi The behavior instance to add
- @return (bool success) Whether or not the behavior was successfully added
- */
- ConsoleMethodWithDocs( BehaviorComponent, addBehavior, ConsoleBool, 3, 3, (BehaviorInstance bi))
- {
- return object->addBehavior( dynamic_cast<BehaviorInstance *>( Sim::findObject( argv[2] ) ) );
- }
- //-----------------------------------------------------------------------------
- /*!
- @param bi The behavior instance to remove
- @param deleteBehavior Whether or not to delete the behavior
- @return (bool success) Whether the behavior was successfully removed
- */
- ConsoleMethodWithDocs( BehaviorComponent, removeBehavior, ConsoleBool, 3, 4, (BehaviorInstance bi, [bool deleteBehavior = true]))
- {
- bool deleteBehavior = true;
- if (argc > 3)
- deleteBehavior = dAtob(argv[3]);
- return object->removeBehavior( dynamic_cast<BehaviorInstance *>( Sim::findObject( argv[2] ) ), deleteBehavior );
- }
- //-----------------------------------------------------------------------------
- /*! Clear all behavior instances
- @return No return value
- */
- ConsoleMethodWithDocs( BehaviorComponent, clearBehaviors, ConsoleVoid, 2, 2, ())
- {
- object->clearBehaviors();
- }
- //-----------------------------------------------------------------------------
- /*! Get the count of behaviors on an object
- @return (int count) The number of behaviors on an object
- */
- ConsoleMethodWithDocs( BehaviorComponent, getBehaviorCount, ConsoleInt, 2, 2, ())
- {
- return object->getBehaviorCount();
- }
- //-----------------------------------------------------------------------------
- /*! gets a behavior
- @param BehaviorTemplateName The name of the template of the behavior instance you want
- @return (BehaviorInstance bi) The behavior instance you requested
- */
- ConsoleMethodWithDocs( BehaviorComponent, getBehavior, ConsoleInt, 3, 3, (string BehaviorTemplateName))
- {
- BehaviorInstance* pBehaviorInstance = object->getBehavior( StringTable->insert( argv[2] ) );
- return pBehaviorInstance ? pBehaviorInstance->getId() : 0;
- }
- //-----------------------------------------------------------------------------
- /*! Gets a particular behavior
- @param index The index of the behavior to get
- @return (BehaviorInstance bi) The behavior instance you requested
- */
- ConsoleMethodWithDocs( BehaviorComponent, getBehaviorByIndex, ConsoleInt, 3, 3, (int index))
- {
- BehaviorInstance *bInstance = object->getBehavior( dAtoi(argv[2]) );
- return ( bInstance != NULL ) ? bInstance->getId() : 0;
- }
- //-----------------------------------------------------------------------------
- /*!
- @param inst The behavior instance you want to reorder
- @param desiredIndex The index you want the behavior instance to be reordered to
- @return (bool success) Whether or not the behavior instance was successfully reordered
- */
- ConsoleMethodWithDocs( BehaviorComponent, reOrder, ConsoleBool, 3, 3, (BehaviorInstance inst, [int desiredIndex = 0]))
- {
- BehaviorInstance *inst = dynamic_cast<BehaviorInstance *>( Sim::findObject( argv[1] ) );
- if( inst == NULL )
- return false;
- U32 idx = 0;
- if( argc > 2 )
- idx = dAtoi( argv[2] );
- return object->reOrder( inst, idx );
- }
- //-----------------------------------------------------------------------------
- /*! Connects a behavior output to a behavior input.
- @param outputBehavior The behavior that owns the output.
- @param inputBehavior The behavior that owns the input.
- @param outputName The output name owned by the output behavior.
- @param inputName The input name owned by the input behavior.
- @return (bool success) Whether the connection was successful or not.
- */
- ConsoleMethodWithDocs( BehaviorComponent, connect, ConsoleBool, 6, 6, (outputBehavior, inputBehavior, outputName, inputName))
- {
- // Find output behavior.
- BehaviorInstance* pOutputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[2] ) );
- // Did we find the behavior?
- if ( !pOutputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::connect() - Could not find output behavior '%s'.", argv[2] );
- return false;
- }
- // Find input behavior.
- BehaviorInstance* pInputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[3] ) );
- // Did we find the behavior?
- if ( !pInputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::connect() - Could not find input behavior '%s'.", argv[3] );
- return false;
- }
- // Fetch port names.
- StringTableEntry pOutputName = StringTable->insert( argv[4] );
- StringTableEntry pInputName = StringTable->insert( argv[5] );
- // Perform the connection.
- return object->connect( pOutputBehavior, pInputBehavior, pOutputName, pInputName );
- }
- //-----------------------------------------------------------------------------
- /*! Connects a behavior output to a behavior input.
- @param outputBehavior The behavior that owns the output.
- @param inputBehavior The behavior that owns the input.
- @param outputName The output name owned by the output behavior.
- @param inputName The input name owned by the input behavior.
- @return (bool success) Whether the disconnection was successful or not.
- */
- ConsoleMethodWithDocs( BehaviorComponent, disconnect, ConsoleBool, 6, 6, (outputBehavior, inputBehavior, outputName, inputName))
- {
- // Find output behavior.
- BehaviorInstance* pOutputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[2] ) );
- // Did we find the behavior?
- if ( !pOutputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::disconnect() - Could not find output behavior '%s'.", argv[2] );
- return false;
- }
- // Find input behavior.
- BehaviorInstance* pInputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[3] ) );
- // Did we find the behavior?
- if ( !pInputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::disconnect() - Could not find input behavior '%s'.", argv[3] );
- return false;
- }
- // Fetch port names.
- StringTableEntry pOutputName = StringTable->insert( argv[4] );
- StringTableEntry pInputName = StringTable->insert( argv[5] );
- // Perform the disconnection.
- return object->disconnect( pOutputBehavior, pInputBehavior, pOutputName, pInputName );
- }
- //-----------------------------------------------------------------------------
- /*! Raise a signal on the behavior output on the specified behavior.
- @param outputBehavior The behavior that owns the output.
- @param outputName The output name owned by the output behavior.
- @param [deltaTime] Optional time-delta (ms) when the raise should occur.
- @return (bool success) Whether the signal raise was successful or not.
- */
- ConsoleMethodWithDocs( BehaviorComponent, raise, ConsoleBool, 4, 5, (outputBehavior, outputName, [deltaTime]))
- {
- // Find output behavior.
- BehaviorInstance* pOutputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[2] ) );
- // Did we find the behavior?
- if ( !pOutputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::raise() - Could not find output behavior '%s'.", argv[2] );
- return false;
- }
- // Fetch output name.
- StringTableEntry pOutputName = StringTable->insert( argv[3] );
- // Perform the signal raising immediately if no schedule time specified.
- if ( argc < 5 )
- return object->raise( pOutputBehavior, pOutputName );
- // Fetch time delta.
- const U32 timeDelta = U32( dAtoi(argv[4]) );
- // Schedule raise event.
- BehaviorComponentRaiseEvent* pEvent = new BehaviorComponentRaiseEvent( pOutputBehavior, pOutputName );
- Sim::postEvent( object, pEvent, Sim::getCurrentTime() + timeDelta );
- return true;
- }
- //-----------------------------------------------------------------------------
- /*! Gets the number of connections on the behavior output on the specified behavior.
- @param outputBehavior The behavior that owns the output.
- @param outputName The output name owned by the output behavior.
- @return The number of connections on the behavior output on the specified behavior.
- */
- ConsoleMethodWithDocs( BehaviorComponent, getBehaviorConnectionCount, ConsoleInt, 4, 4, (outputBehavior, outputName))
- {
- // Find output behavior.
- BehaviorInstance* pOutputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[2] ) );
- // Did we find the behavior?
- if ( !pOutputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::getBehaviorConnectionCount() - Could not find output behavior '%s'.", argv[2] );
- return false;
- }
- // Fetch output name.
- StringTableEntry pOutputName = StringTable->insert( argv[3] );
- // Return the connection count.
- return object->getBehaviorConnectionCount( pOutputBehavior, pOutputName );
- }
- //-----------------------------------------------------------------------------
- /*! Gets a comma-delimited list of connections on the behavior output on the specified behavior.
- @param outputBehavior The behavior that owns the output.
- @param outputName The output name owned by the output behavior.
- @param connectionIndex The connection index.
- @return Returns a comma-delimited list of connections on the behavior output on the specified behavior of the format <OutputBehavior>,<InputBehavior>,<OutputName>,<InputName>.
- */
- ConsoleMethodWithDocs( BehaviorComponent, getBehaviorConnection, ConsoleString, 5, 5, (outputBehavior, outputName, connectionIndex))
- {
- // Find output behavior.
- BehaviorInstance* pOutputBehavior = dynamic_cast<BehaviorInstance*>( Sim::findObject( argv[2] ) );
- // Did we find the behavior?
- if ( !pOutputBehavior )
- {
- // No, so warn.
- Con::warnf("BehaviorComponent::getBehaviorConnections() - Could not find output behavior '%s'.", argv[2] );
- return NULL;
- }
- // Fetch output name.
- StringTableEntry pOutputName = StringTable->insert( argv[3] );
- // Fetch connection index.
- const U32 connectionIndex = dAtoi( argv[4] );
- // Fetch connection.
- const BehaviorComponent::BehaviorPortConnection* pBehaviorConnection = object->getBehaviorConnection( pOutputBehavior, pOutputName, connectionIndex );
- // Finish if there are on connections.
- if ( pBehaviorConnection == NULL )
- return StringTable->EmptyString;
- // Format and return behavior input.
- char* pBuffer = Con::getReturnBuffer(1024);
- dSprintf(pBuffer, 1024, "%d,%d,%s,%s",
- pBehaviorConnection->mOutputInstance->getId(),
- pBehaviorConnection->mInputInstance->getId(),
- pBehaviorConnection->mOutputName,
- pBehaviorConnection->mInputName );
- return pBuffer;
- }
- ConsoleMethodGroupEndWithDocs(BehaviorComponent)
|