Newer
Older
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class FactComparer : EqualityComparer<Fact>
{
protected bool search_righthanded;
Marco Zimmer
committed
protected abstract bool Compare (Fact solution, Fact fact);
public FactComparer SetSearchRight()
{
search_righthanded = true;
return this;
}
public FactComparer SetSearchLeft()
{
search_righthanded = false;
return this;
}
public override bool Equals(Fact left, Fact right)
{
return search_righthanded ? Compare(left, right) : Compare(right, left);
}
public override int GetHashCode(Fact obj)
{
Marco Zimmer
committed
return obj.GetType().GetHashCode();
}
}
public class FactEquivalentsComparer : FactComparer
{
Marco Zimmer
committed
protected override bool Compare (Fact solution, Fact fact)
{
Marco Zimmer
committed
return solution.Equivalent(fact);
}
}
class LineFactHightDirectionComparer : FactComparer
{
Marco Zimmer
committed
protected override bool Compare (Fact solution, Fact fact)
{
Marco Zimmer
committed
return fact is LineFact && solution is LineFact
&& Math3d.IsApproximatelyParallel(((LineFact) fact).Dir, ((LineFact) solution).Dir)
&& ((LineFact) fact).Distance + Math3d.vectorPrecission >= ((LineFact) solution).Distance;
// && Mathf.Approximately(((LineFact) x).Distance, ((LineFact) y).Distance);
}
}