public Condition(dynamic value) { this.value = value; }
public virtual bool IsSatisified(Player player) { return false; }
public class HasKills : Condition
public HasKills(int kills) : base(kills) {}
public override bool IsSatisified(Player player)
return player.kills >= value;
public class HasName : Condition
public HasName(string name) : base(name) {}
public override bool IsSatisified(Player player)
return player.name.Equals(value);
public class HasPosition : Condition
public HasPosition(Vector3 point) : base(point){}
public override bool IsSatisified(Player player)
return player.position == value;
public class PlayerTest : Condition
public PlayerTest(Player other) : base(other) {}
public override bool IsSatisified(Player player)
public Vector3(float x,float y,float z) {this.x=x;this.y=y;this.z=z;}
public static bool operator ==(Vector3 v1, Vector3 v2) { return v1.x == v2.x && v1.y == v2.y && v1.z == v2.z; }
public static bool operator !=(Vector3 v1, Vector3 v2) { return !(v1==v2); }
public override int GetHashCode()
return (int)(this.x + this.y + this.z);
public override bool Equals(object obj)
return this == (Vector3)obj;
public string name = "Player";
public static void Main()
var player = new Player();
var objTest = new PlayerTest(new Player());
var cond = (Condition)objTest;
Console.WriteLine(cond.value.name);