Fix the logic of area judge functions.

This commit is contained in:
2023-05-14 19:22:09 +08:00
parent 5bab0ca648
commit 8d606524fc

View File

@@ -813,11 +813,11 @@ namespace Cryville.Crtr {
}
protected override float ExecuteImpl(float fn, float tn, float ft, float tt, Vector4? fv, Vector4? tv) {
if (fv == null || tv == null) return 0;
if ((EvaluateArea(fv) > 0) == _enter) return 0;
var t0 = GetOperand(0).AsNumber() + fn;
var t1 = GetOperand(1).AsNumber() + tn;
Vector4 fiv, tiv;
if (!GetInternalVectors(t0, t1, ft, tt, fv.Value, tv.Value, out fiv, out tiv)) return 0;
if ((EvaluateArea(fiv) > 0) == _enter) return 0;
return IntersectsWithAreaBounds(fiv, tiv, _enter) ? 1 : 0;
}
}
@@ -830,7 +830,7 @@ namespace Cryville.Crtr {
if (fv == null || tv == null) return 0;
var t0 = GetOperand(0).AsNumber() + fn;
var t1 = GetOperand(1).AsNumber() + tn;
if ((EvaluateArea(fv) > 0 && ft > t0 && tt < t1) == _enter) return 0;
if ((EvaluateArea(fv) > 0 && ft > t0 && ft < t1) == _enter) return 0;
Vector4 fiv, tiv;
if (!GetInternalVectors(t0, t1, ft, tt, fv.Value, tv.Value, out fiv, out tiv)) return 0;
return IntersectsWithAreaBounds(fiv, tiv, _enter) ? 1 : 0;