engine/math/mConsoleFunctions.cc
2024-01-07 04:36:33 +00:00

151 lines
4.3 KiB
C++

//-----------------------------------------------------------------------------
// V12 Engine
//
// Copyright (c) 2001 GarageGames.Com
// Portions Copyright (c) 2001 by Sierra Online, Inc.
//-----------------------------------------------------------------------------
#include "Platform/platform.h"
#include "console/console.h"
#include "Math/mMathFn.h"
#include "Math/mRandom.h"
static const char *cSolveQuadratic(SimObject *, S32, const char **argv)
{
char * retBuffer = Con::getReturnBuffer(256);
F32 x[2];
U32 sol = mSolveQuadratic(dAtof(argv[1]), dAtof(argv[2]), dAtof(argv[3]), x);
dSprintf(retBuffer, 256, "%d %g %g", sol, x[0], x[1]);
return retBuffer;
}
static const char *cSolveCubic(SimObject *, S32, const char **argv)
{
char * retBuffer = Con::getReturnBuffer(256);
F32 x[3];
U32 sol = mSolveCubic(dAtof(argv[1]), dAtof(argv[2]), dAtof(argv[3]), dAtof(argv[4]), x);
dSprintf(retBuffer, 256, "%d %g %g %g", sol, x[0], x[1], x[2]);
return retBuffer;
}
static const char *cSolveQuartic(SimObject *, S32, const char **argv)
{
char * retBuffer = Con::getReturnBuffer(256);
F32 x[4];
U32 sol = mSolveQuartic(dAtof(argv[1]), dAtof(argv[2]), dAtof(argv[3]), dAtof(argv[4]), dAtof(argv[5]), x);
dSprintf(retBuffer, 256, "%d %g %g %g %g", sol, x[0], x[1], x[2], x[3]);
return retBuffer;
}
static S32 cFloor(SimObject *, S32, const char **argv)
{
return (S32)mFloor(dAtof(argv[1]));
}
static S32 cCeil(SimObject *, S32, const char **argv)
{
return (S32)mCeil(dAtof(argv[1]));
}
static const char * cFloatLength(SimObject *, S32, const char **argv)
{
char * outBuffer = Con::getReturnBuffer(256);
char fmtString[8] = "%.0f";
U32 precision = dAtoi(argv[2]);
if (precision > 9)
precision = 9;
fmtString[2] = '0' + precision;
dSprintf(outBuffer, 255, fmtString, dAtof(argv[1]));
return outBuffer;
}
//------------------------------------------------------------------------------
static F32 cAbs(SimObject *, S32, const char ** argv)
{
return(mFabs(dAtof(argv[1])));
}
static F32 cSqrt(SimObject *, S32, const char ** argv)
{
return(mSqrt(dAtof(argv[1])));
}
static F32 cPow(SimObject *, S32, const char ** argv)
{
return(mPow(dAtof(argv[1]), dAtof(argv[2])));
}
static F32 cLog(SimObject *, S32, const char ** argv)
{
return(mLog(dAtof(argv[1])));
}
static F32 cSin(SimObject *, S32, const char ** argv)
{
return(mSin(dAtof(argv[1])));
}
static F32 cCos(SimObject *, S32, const char ** argv)
{
return(mCos(dAtof(argv[1])));
}
static F32 cTan(SimObject *, S32, const char ** argv)
{
return(mTan(dAtof(argv[1])));
}
static F32 cAsin(SimObject *, S32, const char ** argv)
{
return(mAsin(dAtof(argv[1])));
}
static F32 cAcos(SimObject *, S32, const char ** argv)
{
return(mAcos(dAtof(argv[1])));
}
static F32 cAtan(SimObject *, S32, const char ** argv)
{
return(mAtan(dAtof(argv[1]), dAtof(argv[2])));
}
static F32 cRadToDeg(SimObject *, S32, const char ** argv)
{
return(mRadToDeg(dAtof(argv[1])));
}
static F32 cDegToRad(SimObject *, S32, const char ** argv)
{
return(mDegToRad(dAtof(argv[1])));
}
//------------------------------------------------------------------------------
void MathConsoleInit()
{
Con::addCommand("mSolveQuadratic", cSolveQuadratic, "mSolveQuadratic(a,b,c)", 4, 4);
Con::addCommand("mSolveCubic", cSolveCubic, "mSolveCubic(a,b,c,d)", 5, 5);
Con::addCommand("mSolveQuartic", cSolveQuartic, "mSolveQuartic(a,b,c,d,e)", 6, 6);
Con::addCommand("mFloor", cFloor, "mFloor(float)", 2, 2);
Con::addCommand("mCeil", cCeil, "mCeil(float)", 2, 2);
Con::addCommand("mFloatLength", cFloatLength, "mFloatLength(float, numDecimals)", 3, 3);
//
Con::addCommand("mAbs", cAbs, "mAbs(float)", 2, 2);
Con::addCommand("mSqrt", cSqrt, "mSqrt(float)", 2, 2);
Con::addCommand("mPow", cPow, "mPow(float, float)", 3, 3);
Con::addCommand("mLog", cLog, "mLog(float)", 2, 2);
Con::addCommand("mSin", cSin, "mSin(float)", 2, 2);
Con::addCommand("mCos", cCos, "mCos(float)", 2, 2);
Con::addCommand("mTan", cTan, "mTan(float)", 2, 2);
Con::addCommand("mAsin", cAsin, "mAsin(float)", 2, 2);
Con::addCommand("mAcos", cAcos, "mAcos(float)", 2, 2);
Con::addCommand("mAtan", cAtan, "mAtan(float, float)", 3, 3);
Con::addCommand("mRadToDeg", cRadToDeg, "mRadToDeg(float)", 2, 2);
Con::addCommand("mDegToRad", cDegToRad, "mDegToRad(float)", 2, 2);
}