From 9b5d0a3ddf41e686439dcda1edfe11eee51c3b07 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Thu, 5 Jan 2017 16:19:56 +0100 Subject: Initial --- DTFindObject.c | 338 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 DTFindObject.c (limited to 'DTFindObject.c') diff --git a/DTFindObject.c b/DTFindObject.c new file mode 100644 index 0000000..b7205e6 --- /dev/null +++ b/DTFindObject.c @@ -0,0 +1,338 @@ +/*-- + * 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; +} + -- cgit v1.2.3-54-g00ecf