Beispiel #1
0
 internal static bool OnAction(string action, Query query, Result result, ActionContext e)
 {
     lock (s_PluginLock) {
         //由于Wox实现上的缺陷,这里根据result的Title与SubTitle在结果列表里查找真正的result项再调action
         int ix = s_Results.IndexOf(result);
         if (ix < 0)
         {
             s_Context.API.ShowMsg("Can't find result " + result.Title, result.SubTitle, result.IcoPath);
             return(false);
         }
         if (s_Results[ix].ContextData != result.ContextData || s_Results[ix].Action != result.Action)
         {
             return(s_Results[ix].Action(e));
         }
         var r = BatchScript.Call(action, CalculatorValue.FromObject(query), CalculatorValue.FromObject(result), CalculatorValue.FromObject(e));
         ShowLog("OnAction");
         if (s_NeedReload)
         {
             s_NeedReload = false;
             ReloadDsl();
         }
         if (r.IsBoolean)
         {
             bool ret = r.GetBool();
             return(ret);
         }
         else
         {
             return(false);
         }
     }
 }
Beispiel #2
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

            if (operands.Count >= 1)
            {
                var obj = operands[0].As <AndroidJavaObject>();
                if (null != obj)
                {
                    r = CalculatorValue.FromObject(new JavaObject(obj));
                }
                else
                {
                    var str = operands[0].AsString;
                    var al  = new ArrayList();
                    for (int i = 1; i < operands.Count; ++i)
                    {
                        al.Add(operands[i].Get <object>());
                    }
                    if (!string.IsNullOrEmpty(str))
                    {
                        r = CalculatorValue.FromObject(new JavaObject(str, al.ToArray()));
                    }
                }
            }
            return(r);
        }
Beispiel #3
0
 internal static bool OnMenuAction(string action, Query query, Result result, Result menu, ActionContext e)
 {
     lock (s_PluginLock) {
         //由于Wox实现上的缺陷,这里根据menu的Title与SubTitle在菜单列表里查找真正的菜单项再调action
         int ix = s_ContextMenus.IndexOf(menu);
         if (ix < 0)
         {
             s_Context.API.ShowMsg("Can't find menu " + menu.Title, menu.SubTitle, menu.IcoPath);
             return(false);
         }
         if (s_ContextMenus[ix].ContextData != menu.ContextData || s_ContextMenus[ix].Action != menu.Action)
         {
             return(s_ContextMenus[ix].Action(e));
         }
         object r = BatchScript.Call(action, CalculatorValue.FromObject(query), CalculatorValue.FromObject(result), CalculatorValue.FromObject(menu), CalculatorValue.FromObject(e));
         ShowLog("OnMenuAction");
         if (s_NeedReload)
         {
             s_NeedReload = false;
             ReloadDsl();
         }
         if (null != r)
         {
             bool ret = (bool)Convert.ChangeType(r, typeof(bool));
             return(ret);
         }
         else
         {
             return(false);
         }
     }
 }
Beispiel #4
0
 public List <Result> Query(Query query)
 {
     lock (s_PluginLock) {
         s_Results.Clear();
         BatchScript.Call("on_query", CalculatorValue.FromObject(query));
         ShowLog("Query");
         return(s_Results);
     }
 }
Beispiel #5
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

#if UNITY_ANDROID
            r = CalculatorValue.FromObject(new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic <AndroidJavaObject>("currentActivity"));
#endif
            return(r);
        }
Beispiel #6
0
 public List <Result> LoadContextMenus(Result selectedResult)
 {
     lock (s_PluginLock) {
         s_ContextMenus.Clear();
         Query query = selectedResult.ContextData as Query;
         BatchScript.Call("on_context_menus", CalculatorValue.FromObject(query), CalculatorValue.FromObject(selectedResult));
         ShowLog("LoadContextMenus");
         return(s_ContextMenus);
     }
 }
Beispiel #7
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

            if (operands.Count >= 1)
            {
                var str = operands[0].AsString;
                r = CalculatorValue.FromObject(new ObjectcClass(str));
            }
            return(r);
        }
Beispiel #8
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

            if (operands.Count >= 1)
            {
                int objId = operands[0].Get <int>();
                return(CalculatorValue.FromObject(new ObjectcObject(objId)));
            }
            return(r);
        }
Beispiel #9
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

            if (operands.Count >= 2)
            {
                var _class    = operands[0].AsString;
                var scpMethod = operands[1].AsString;
                r = CalculatorValue.FromObject(new JavaProxy(_class, scpMethod));
            }
            return(r);
        }
Beispiel #10
0
 internal static void ReloadDsl()
 {
     lock (s_PluginLock) {
         string dslPath = Path.Combine(s_Context.CurrentPluginMetadata.PluginDirectory, "main.dsl");
         var    vargs   = BatchScript.NewCalculatorValueList();
         vargs.Add(s_Context.CurrentPluginMetadata.ID);
         vargs.Add(CalculatorValue.FromObject(s_Context.CurrentPluginMetadata));
         vargs.Add(CalculatorValue.FromObject(s_Context));
         BatchScript.Run(dslPath, vargs);
         BatchScript.RecycleCalculatorValueList(vargs);
         ShowLog("ReloadDsl");
     }
 }
Beispiel #11
0
    public static object Call(string proc, params object[] args)
    {
        if (null == s_Instance)
        {
            return(null);
        }
        var vargs = s_Instance.m_Calculator.NewCalculatorValueList();

        foreach (var arg in args)
        {
            vargs.Add(CalculatorValue.FromObject(arg));
        }
        var r = s_Instance.m_Calculator.Calc(proc, vargs);

        s_Instance.m_Calculator.RecycleCalculatorValueList(vargs);
        return(r.Get <object>());
    }
Beispiel #12
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

#if UNITY_ANDROID
            if (operands.Count >= 1)
            {
                var str = operands[0].AsString;
                if (!string.IsNullOrEmpty(str))
                {
                    var act    = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic <AndroidJavaObject>("currentActivity");
                    var intent = act.Call <AndroidJavaObject>("getIntent");
                    r = CalculatorValue.FromObject(intent.Call <long[]>("getLongArrayExtra", str));
                }
            }
#endif
            return(r);
        }
Beispiel #13
0
        protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
        {
            var r = CalculatorValue.NullObject;

            if (operands.Count >= 1)
            {
                var obj = operands[0].As <AndroidJavaClass>();
                if (null != obj)
                {
                    r = CalculatorValue.FromObject(new JavaClass(obj));
                }
                else
                {
                    var str = operands[0].AsString;
                    r = CalculatorValue.FromObject(new JavaClass(str));
                }
            }
            return(r);
        }
Beispiel #14
0
 protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
 {
     if (operands.Count >= 1)
     {
         string str      = operands[0].AsString;
         uint   offset   = 0;
         uint   maxCount = 100;
         if (operands.Count >= 2)
         {
             offset = operands[1].Get <uint>();
         }
         if (operands.Count >= 3)
         {
             maxCount = operands[2].Get <uint>();
         }
         if (null != str)
         {
             EveryThingSDK.Everything_SetSearchW(str);
             EveryThingSDK.Everything_SetOffset(offset);
             EveryThingSDK.Everything_SetMax(maxCount);
             EveryThingSDK.Everything_SetRequestFlags(EveryThingSDK.EVERYTHING_REQUEST_FILE_NAME | EveryThingSDK.EVERYTHING_REQUEST_PATH | EveryThingSDK.EVERYTHING_REQUEST_SIZE | EveryThingSDK.EVERYTHING_REQUEST_DATE_MODIFIED);
             if (EveryThingSDK.Everything_QueryW(true))
             {
                 List <object[]> list = new List <object[]>();
                 uint            num  = EveryThingSDK.Everything_GetNumResults();
                 for (uint i = 0; i < num; ++i)
                 {
                     var sb = new StringBuilder(c_Capacity);
                     EveryThingSDK.Everything_GetResultFullPathName(i, sb, c_Capacity);
                     long size;
                     EveryThingSDK.Everything_GetResultSize(i, out size);
                     long time;
                     EveryThingSDK.Everything_GetResultDateModified(i, out time);
                     var dt = new DateTime(1601, 1, 1, 8, 0, 0, DateTimeKind.Utc) + new TimeSpan(time);
                     list.Add(new object[] { sb.ToString(), size, dt.ToString("yyyy-MM-dd HH:mm:ss") });
                 }
                 return(CalculatorValue.FromObject(list));
             }
         }
     }
     return(CalculatorValue.FromObject(s_EmptyList));
 }
 internal static void Process(GameObject root, Dsl.DslFile file, Dictionary <string, Color32[, ]> samplers, Dictionary <string, Size> cacheInfos, List <ObjectInfo> objects)
 {
     if (null != file)
     {
         List <TreeInstance>          trees  = new List <TreeInstance>();
         Dictionary <string, int[, ]> caches = new Dictionary <string, int[, ]>();
         foreach (var pair in cacheInfos)
         {
             caches.Add(pair.Key, new int[pair.Value.Width, pair.Value.Height]);
         }
         var   terrain     = root.GetComponent <Terrain>();
         var   terrainData = terrain.terrainData;
         var   datas       = terrainData.GetHeights(0, 0, terrainData.heightmapWidth, terrainData.heightmapHeight);
         var   alphamaps   = terrainData.GetAlphamaps(0, 0, terrainData.alphamapWidth, terrainData.alphamapHeight);
         int   alphanum    = alphamaps.GetLength(2);
         int[] layers      = terrainData.GetSupportedLayers(0, 0, terrainData.detailWidth, terrainData.detailHeight);
         Dictionary <int, int[, ]> details = new Dictionary <int, int[, ]>();
         foreach (int layer in layers)
         {
             var ds = terrainData.GetDetailLayer(0, 0, terrainData.detailWidth, terrainData.detailHeight, layer);
             details.Add(layer, ds);
         }
         var calc = new DslExpression.DslCalculator();
         calc.Init();
         calc.Register("getheight", new DslExpression.ExpressionFactoryHelper <GetHeightExp>());
         calc.Register("getalphamap", new DslExpression.ExpressionFactoryHelper <GetAlphamapExp>());
         calc.Register("getalpha", new DslExpression.ExpressionFactoryHelper <GetAlphaExp>());
         calc.Register("setalpha", new DslExpression.ExpressionFactoryHelper <SetAlphaExp>());
         calc.Register("getdetail", new DslExpression.ExpressionFactoryHelper <GetDetailExp>());
         calc.Register("samplered", new DslExpression.ExpressionFactoryHelper <SampleRedExp>());
         calc.Register("samplegreen", new DslExpression.ExpressionFactoryHelper <SampleGreenExp>());
         calc.Register("sampleblue", new DslExpression.ExpressionFactoryHelper <SampleBlueExp>());
         calc.Register("samplealpha", new DslExpression.ExpressionFactoryHelper <SampleAlphaExp>());
         calc.Register("getcache", new DslExpression.ExpressionFactoryHelper <GetCacheExp>());
         calc.Register("setcache", new DslExpression.ExpressionFactoryHelper <SetCacheExp>());
         calc.Register("addtree", new DslExpression.ExpressionFactoryHelper <AddTreeExp>());
         calc.Register("addobject", new DslExpression.ExpressionFactoryHelper <AddObjectExp>());
         calc.SetGlobalVariable("samplers", CalculatorValue.FromObject(samplers));
         calc.SetGlobalVariable("caches", CalculatorValue.FromObject(caches));
         calc.SetGlobalVariable("trees", CalculatorValue.FromObject(trees));
         calc.SetGlobalVariable("objects", CalculatorValue.FromObject(objects));
         calc.SetGlobalVariable("heightscalex", terrainData.heightmapScale.x);
         calc.SetGlobalVariable("heightscaley", terrainData.heightmapScale.y);
         calc.SetGlobalVariable("heightscalez", terrainData.heightmapScale.z);
         calc.SetGlobalVariable("heights", CalculatorValue.FromObject(datas));
         calc.SetGlobalVariable("alphamaps", CalculatorValue.FromObject(alphamaps));
         calc.SetGlobalVariable("alphanum", CalculatorValue.FromObject(alphanum));
         calc.SetGlobalVariable("details", CalculatorValue.FromObject(details));
         calc.SetGlobalVariable("height", 0.0f);
         calc.SetGlobalVariable("alphas", CalculatorValue.FromObject(new float[alphanum]));
         calc.SetGlobalVariable("detail", 0);
         bool resetTrees  = false;
         bool canContinue = true;
         foreach (var comp in file.DslInfos)
         {
             var info = comp as Dsl.StatementData;
             if (null == info)
             {
                 continue;
             }
             bool check = false;
             int  num   = info.GetFunctionNum();
             if (num >= 2)
             {
                 string firstId = info.First.GetId();
                 if (firstId == "input")
                 {
                     check = true;
                     for (int i = 1; i < info.GetFunctionNum(); ++i)
                     {
                         string id = info.GetFunctionId(i);
                         if (id == "height" || id == "alphamap" || id == "detail")
                         {
                         }
                         else
                         {
                             check = false;
                             break;
                         }
                     }
                 }
             }
             if (!check)
             {
                 canContinue = false;
                 Debug.LogErrorFormat("error script:{0}, {1}", info.GetLine(), info.ToScriptString(false));
             }
         }
         if (canContinue)
         {
             int ix = 0;
             foreach (var comp in file.DslInfos)
             {
                 var info = comp as Dsl.StatementData;
                 if (null == info)
                 {
                     continue;
                 }
                 for (int i = 1; i < info.GetFunctionNum(); ++i)
                 {
                     calc.LoadDsl(ix.ToString(), info.GetFunction(i));
                     ++ix;
                 }
             }
             int ix2 = 0;
             foreach (var comp in file.DslInfos)
             {
                 var info = comp as Dsl.StatementData;
                 if (null == info)
                 {
                     continue;
                 }
                 for (int i = 1; i < info.GetFunctionNum(); ++i)
                 {
                     ProcessWithDsl(info.First, info.GetFunctionId(i), datas, alphamaps, details, calc, ix2.ToString(), ref resetTrees);
                     ++ix2;
                 }
             }
         }
         terrainData.SetHeights(0, 0, datas);
         terrainData.SetAlphamaps(0, 0, alphamaps);
         foreach (var pair in details)
         {
             terrainData.SetDetailLayer(0, 0, pair.Key, pair.Value);
         }
         if (resetTrees)
         {
             terrainData.treeInstances = trees.ToArray();
         }
         else
         {
             trees.AddRange(terrainData.treeInstances);
             terrainData.treeInstances = trees.ToArray();
         }
     }
 }
Beispiel #16
0
 protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
 {
     return(CalculatorValue.FromObject(Main.s_Context.API));
 }
Beispiel #17
0
 protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
 {
     return(CalculatorValue.FromObject(Main.s_Context.CurrentPluginMetadata));
 }
Beispiel #18
0
 protected override CalculatorValue OnCalc(IList <CalculatorValue> operands)
 {
     return(CalculatorValue.FromObject(ScriptProcessor.GetFileList()));
 }