summaryrefslogtreecommitdiffstats
path: root/DTFindObject.c
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2017-01-05 16:19:56 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2017-01-05 16:19:56 +0100
commit9b5d0a3ddf41e686439dcda1edfe11eee51c3b07 (patch)
treeeda63d0f51f49b36e0269b6efdf4c612d9ab7d68 /DTFindObject.c
downloadSystem.c4g-9b5d0a3ddf41e686439dcda1edfe11eee51c3b07.tar.gz
System.c4g-9b5d0a3ddf41e686439dcda1edfe11eee51c3b07.zip
Initial
Diffstat (limited to 'DTFindObject.c')
-rw-r--r--DTFindObject.c338
1 files changed, 338 insertions, 0 deletions
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;
+}
+