| 1890 | } |
| 1891 | |
| 1892 | void ActionMap::fireBreakEvent( U32 i, F32 fValue ) |
| 1893 | { |
| 1894 | // Match. Issue the break event... |
| 1895 | // |
| 1896 | F32 value = fValue; |
| 1897 | if (smBreakTable[i].flags & Node::Ranged) { |
| 1898 | value = (value * 2.0f) - 1.0f; |
| 1899 | if (smBreakTable[i].flags & Node::Inverted) |
| 1900 | value *= -1.0f; |
| 1901 | } else { |
| 1902 | if (smBreakTable[i].flags & Node::Inverted) |
| 1903 | value = 1.0f - value; |
| 1904 | } |
| 1905 | |
| 1906 | if (smBreakTable[i].flags & Node::HasScale) |
| 1907 | value *= smBreakTable[i].scaleFactor; |
| 1908 | |
| 1909 | if (smBreakTable[i].flags & Node::HasDeadZone) |
| 1910 | { |
| 1911 | if (value >= smBreakTable[i].deadZoneBegin && |
| 1912 | value <= smBreakTable[i].deadZoneEnd) |
| 1913 | value = 0.0f; |
| 1914 | else |
| 1915 | { |
| 1916 | if( value > 0 ) |
| 1917 | value = ( value - smBreakTable[i].deadZoneBegin ) * ( 1.f / ( 1.f - smBreakTable[i].deadZoneBegin ) ); |
| 1918 | else |
| 1919 | value = ( value + smBreakTable[i].deadZoneBegin ) * ( 1.f / ( 1.f - smBreakTable[i].deadZoneBegin ) ); |
| 1920 | } |
| 1921 | } |
| 1922 | |
| 1923 | if( smBreakTable[i].flags & Node::NonLinear ) |
| 1924 | value = ( value < 0.f ? -1.f : 1.f ) * mPow( mFabs( value ), CONST_E ); |
| 1925 | |
| 1926 | // Ok, we're all set up, call the function. |
| 1927 | if(smBreakTable[i].consoleFunction) |
| 1928 | { |
| 1929 | if ( smBreakTable[i].consoleFunction[0] ) |
| 1930 | { |
| 1931 | static const char *argv[2]; |
| 1932 | argv[0] = smBreakTable[i].consoleFunction; |
| 1933 | argv[1] = Con::getFloatArg(value); |
| 1934 | if (smBreakTable[i].object) |
| 1935 | Con::executef(smBreakTable[i].object, argv[0], argv[1]); |
| 1936 | else |
| 1937 | Con::execute(2, argv); |
| 1938 | } |
| 1939 | } |
| 1940 | else if(smBreakTable[i].breakConsoleCommand) |
| 1941 | { |
| 1942 | Con::evaluate(smBreakTable[i].breakConsoleCommand); |
| 1943 | dFree(smBreakTable[i].breakConsoleCommand); |
| 1944 | } |
| 1945 | smBreakTable.erase(i); |
| 1946 | } |
| 1947 | |
| 1948 | //------------------------------------------------------------------------------ |
| 1949 | //Context actions |