Merge commit '173dbd6bcee02a9e9c12a4a74d1fffe3e081d162' into scripting

This commit is contained in:
Christoph Oelckers 2015-04-28 10:37:23 +02:00
commit e9cbb0b223
2 changed files with 95 additions and 0 deletions

View File

@ -389,6 +389,25 @@ public:
};
//==========================================================================
//
//
//
//==========================================================================
class FxFloatCast : public FxExpression
{
FxExpression *basex;
public:
FxFloatCast(FxExpression *x);
~FxFloatCast();
FxExpression *Resolve(FCompileContext&);
ExpVal EvalExpression (AActor *self);
};
//==========================================================================
//
// FxSign

View File

@ -488,6 +488,82 @@ ExpEmit FxFloatCast::Emit(VMFunctionBuilder *build)
return to;
}
//==========================================================================
//
//
//
//==========================================================================
FxFloatCast::FxFloatCast(FxExpression *x)
: FxExpression(x->ScriptPosition)
{
basex = x;
ValueType = VAL_Float;
}
//==========================================================================
//
//
//
//==========================================================================
FxFloatCast::~FxFloatCast()
{
SAFE_DELETE(basex);
}
//==========================================================================
//
//
//
//==========================================================================
FxExpression *FxFloatCast::Resolve(FCompileContext &ctx)
{
CHECKRESOLVED();
SAFE_RESOLVE(basex, ctx);
if (basex->ValueType == VAL_Float)
{
FxExpression *x = basex;
basex = NULL;
delete this;
return x;
}
else if (basex->ValueType == VAL_Int)
{
if (basex->isConstant())
{
ExpVal constval = basex->EvalExpression(NULL);
FxExpression *x = new FxConstant(constval.GetFloat(), ScriptPosition);
delete this;
return x;
}
return this;
}
else
{
ScriptPosition.Message(MSG_ERROR, "Numeric type expected");
delete this;
return NULL;
}
}
//==========================================================================
//
//
//
//==========================================================================
ExpVal FxFloatCast::EvalExpression (AActor *self)
{
ExpVal baseval = basex->EvalExpression(self);
baseval.Float = baseval.GetFloat();
baseval.Type = VAL_Float;
return baseval;
}
//==========================================================================
//
//