| 1753 | } |
| 1754 | |
| 1755 | void ActionMap::fireBreakEvent( U32 i, F32 fValue ) |
| 1756 | { |
| 1757 | // Match. Issue the break event... |
| 1758 | // |
| 1759 | F32 value = fValue; |
| 1760 | if (smBreakTable[i].flags & Node::Ranged) { |
| 1761 | value = (value * 2.0f) - 1.0f; |
| 1762 | if (smBreakTable[i].flags & Node::Inverted) |
| 1763 | value *= -1.0f; |
| 1764 | } else { |
| 1765 | if (smBreakTable[i].flags & Node::Inverted) |
| 1766 | value = 1.0f - value; |
| 1767 | } |
| 1768 | |
| 1769 | if (smBreakTable[i].flags & Node::HasScale) |
| 1770 | value *= smBreakTable[i].scaleFactor; |
| 1771 | |
| 1772 | if (smBreakTable[i].flags & Node::HasDeadZone) |
| 1773 | { |
| 1774 | if (value >= smBreakTable[i].deadZoneBegin && |
| 1775 | value <= smBreakTable[i].deadZoneEnd) |
| 1776 | value = 0.0f; |
| 1777 | else |
| 1778 | { |
| 1779 | if( value > 0 ) |
| 1780 | value = ( value - smBreakTable[i].deadZoneBegin ) * ( 1.f / ( 1.f - smBreakTable[i].deadZoneBegin ) ); |
| 1781 | else |
| 1782 | value = ( value + smBreakTable[i].deadZoneBegin ) * ( 1.f / ( 1.f - smBreakTable[i].deadZoneBegin ) ); |
| 1783 | } |
| 1784 | } |
| 1785 | |
| 1786 | if( smBreakTable[i].flags & Node::NonLinear ) |
| 1787 | value = ( value < 0.f ? -1.f : 1.f ) * mPow( mFabs( value ), CONST_E ); |
| 1788 | |
| 1789 | // Ok, we're all set up, call the function. |
| 1790 | if(smBreakTable[i].consoleFunction) |
| 1791 | { |
| 1792 | if ( smBreakTable[i].consoleFunction[0] ) |
| 1793 | { |
| 1794 | static const char *argv[2]; |
| 1795 | argv[0] = smBreakTable[i].consoleFunction; |
| 1796 | argv[1] = Con::getFloatArg(value); |
| 1797 | if (smBreakTable[i].object) |
| 1798 | Con::executef(smBreakTable[i].object, argv[0], argv[1]); |
| 1799 | else |
| 1800 | Con::execute(2, argv); |
| 1801 | } |
| 1802 | } |
| 1803 | else if(smBreakTable[i].breakConsoleCommand) |
| 1804 | { |
| 1805 | Con::evaluate(smBreakTable[i].breakConsoleCommand); |
| 1806 | dFree(smBreakTable[i].breakConsoleCommand); |
| 1807 | } |
| 1808 | smBreakTable.erase(i); |
| 1809 | } |
| 1810 | |
| 1811 | //------------------------------------------------------------------------------ |
| 1812 | |