/*-- * Overloads Find_-functions available in System.c4g so Find_Or and Find_And can be used inside other criterions like so: * Find_ID(Find_Or(ROCK, FLNT)) * Find_Func("IsBlock", ["CompareLayer", LAYER_FG]) * --*/ #strict 2 global func ProxySimpleFind_AndOr(int type, criteria) { if(GetType(criteria) != C4V_Array) { return [type, criteria]; } else { var ret = [criteria[0]]; for(var i = 1; i < GetLength(criteria); ++i) { ret[i] = [type, criteria[i]]; } return ret; } } global func ProxyFind_AndOr(criteria, &type, &parts) { type = criteria[0]; parts = CreateArray(GetLength(criteria) - 1); for(var i = 1; i < GetLength(criteria); ++i) { if(GetType(criteria[i]) == C4V_Array) { parts[i - 1] = criteria[i]; } else { parts[i - 1] = [criteria[i]]; } } } global func Find_Action(what) { return ProxySimpleFind_AndOr(C4FO_Action, what); } global func Find_Category(what) { return ProxySimpleFind_AndOr(C4FO_Category, what); } global func Find_Container(what) { return ProxySimpleFind_AndOr(C4FO_Container, what); } global func Find_Controller(what) { return ProxySimpleFind_AndOr(C4FO_Controller, what); } global func Find_ID(what) { return ProxySimpleFind_AndOr(C4FO_ID, what); } global func Find_Layer(what) { return ProxySimpleFind_AndOr(C4FO_Layer, what); } global func Find_OCF(what) { return ProxySimpleFind_AndOr(C4FO_OCF, what); } global func Find_Owner(what) { return ProxySimpleFind_AndOr(C4FO_Owner, what); } global func Find_Exclude(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_InRect(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_AtRect(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_OnLine(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Distance(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_ActionTarget(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Hostile(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Allied(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Func(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_PathFree(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Command(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_ColorDw(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Effect(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Local(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_Team(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_FuncEqual(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_FuncInside(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; } global func Find_ID(what) { if(GetType(what) != C4V_Array) { return _inherited(what); } var ret = [], parts, i = 0; ProxyFind_AndOr(what, ret[0], parts); for(var part in parts) { ret[++i] = _inherited(part[0], part[1], part[2], part[3], part[4], part[5], part[6], part[7], part[8], part[9]); } return ret; }