Beispiel #1
0
 //生成卡仓抓卡动作
 public ResInfoData GenerateTakeGelFromWare(ResInfoData take_seat, ref Sequence seque, string gelmask = "")
 {
     if (take_seat != null)
     {
         //卡仓位移动
         //抓手移动到卡仓机位
         var move_act = Spawn.create(
             MoveTo.create(Engine.getInstance().gelwareDevice, 3001, take_seat.StoreX, -1, -1),
             MoveTo.create(Engine.getInstance().handDevice, 3001, take_seat.X, take_seat.Y));
         seque.AddAction(move_act);
         //抓手抓卡
         var take_act = HandTakeCard.create(Engine.getInstance().handDevice, 3001, take_seat.Z, take_seat.ZLimit, take_seat.ZCatch, 0);
         seque.AddAction(take_act);
         //把测试卡放在卡仓Gel位中
         var geltem = take_seat.Values[take_seat.CountX, 0];
         take_seat.Values[take_seat.CountX, 0] = null;
         take_act.successfun = (ActionBase act) =>
         {
             ResManager.getInstance().handseat_resinfo = (ResInfoData)geltem;
             return(true);
         };
         take_act.destroyfun = (ActionBase act) =>
         {
             take_seat.Values[take_seat.CountX, 0] = geltem;
             return(true);
         };
     }
     else
     {
         ErrorSystem.WriteActError("卡仓无卡", true, false);
     }
     return(take_seat);
 }
Beispiel #2
0
 //是否在离心机内的所有卡当前动作是离心
 public bool IsCanPutCen(CentrifugeMDevice cendev)
 {
     if (actionmanager.getAllActionsCount(cendev) != 0)
     {
         return(false);
     }
     foreach (var seat in resmanager.centrifuge_list)
     {
         if (seat.Code == cendev.Centrifugem.Code.SetValue)
         {
             for (int i = 0; i < seat.Values.Length; i++)
             {
                 ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                 if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk)
                 {
                     if (resinfo.GetActionAt(0) != ActionPoint.ActionPointType.Centrifugal)
                     {
                         return(false);
                     }
                 }
             }
             break;
         }
     }
     return(true);
 }
Beispiel #3
0
 //生成在普通位抓卡
 public ResInfoData GenerateTakeGelFromNormal(ResInfoData take_seat, ref Sequence seque)
 {
     if (take_seat != null)
     {
         //抓手移动
         seque.AddAction(MoveTo.create(Engine.getInstance().handDevice, 3001, (int)take_seat.X, (int)(take_seat.Y), 0));
         //抓手抓卡
         var take_act = HandTakeCard.create(Engine.getInstance().handDevice, 3001, (int)take_seat.Z, (int)take_seat.ZLimit, (int)take_seat.ZCatch, 0);
         seque.AddAction(take_act);
         //把测试卡放在Gel位中
         var geltem = take_seat.Values[take_seat.CountX, 0];
         if (take_seat.Values != null)
         {
             take_seat.Values[take_seat.CountX, 0] = null;
         }
         take_act.successfun = (ActionBase act) =>
         {
             ResManager.getInstance().handseat_resinfo = (ResInfoData)geltem;
             return(true);
         };
         take_act.destroyfun = (ActionBase act) =>
         {
             take_seat.Values[take_seat.CountX, 0] = geltem;
             return(true);
         };
     }
     else
     {
         ErrorSystem.WriteActError("普通位找不到卡", true, false);
     }
     return(take_seat);
 }
Beispiel #4
0
        public override ActionBase InitAll()
        {
            var seque = Sequence.create(InitXyz.create(this, 10000, true, false, false));

            foreach (var ware_seat in ResManager.getInstance().gelwarehouse_list)
            {
                seque.AddAction(MoveTo.create(this, 5000, (int)ware_seat.DetectX));
                seque.AddAction(SkCallBackFun.create((ActionBase acttem) => {
                    var res = TestGelCard();
                    if (res != null)
                    {
                        for (int i = 0; i < ware_seat.Count; i++)
                        {
                            ware_seat.Values[i, 0] = null;
                            if (res[i + (int)ware_seat.DoorX])
                            {
                                var resinfo            = new ResInfoData();
                                ware_seat.Values[i, 0] = resinfo;
                            }
                        }
                    }
                    return(true);
                }));
            }
            seque.AddAction(ScanGelFromWare.create(handDevice, 20000, this));
            seque.AddAction(MoveTo.create(this, 5000, 0));
            seque.AddAction(InitXyz.create(this, 10000, true, false, false));
            return(seque);
        }
 //是否在离心机内的所有卡当前动作是离心
 public bool IsCanPutCen(CentrifugeMDevice cendev)
 {
     if (actionmanager.getAllActionsCount(cendev) != 0)
     {
         return(false);
     }
     foreach (var seat in resmanager.centrifuge_list)
     {
         if (seat.Code == cendev.Centrifugem.Code.SetValue)
         {
             for (int i = 0; i < seat.Values.Length; i++)
             {
                 ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                 if (resinfo != null && resinfo.PutOk)
                 {
                     var exp_package = GetExpPackageByMask(resinfo.GetGelMask());
                     if (exp_package.GetActionTypeAt(0) != TestStepEnum.ZKDLXJ)
                     {
                         return(false);
                     }
                 }
             }
             break;
         }
     }
     return(true);
 }
Beispiel #6
0
    /// <summary>
    /// 在某个资源组里面移出某个资源
    /// </summary>
    /// <param name="assetName">资源名称</param>
    /// <param name="name">资源组名称</param>
    public static void RemoveAsset(string assetName, string name)
    {
        ResGroupCfg data = resInfo.GetGroupInfo(name);

        if (data != null)
        {
            if (data.keys.Contains(assetName))
            {
                data.keys.Remove(assetName);
            }
        }
        foreach (ResGroupCfg sld in resInfo.groups)
        {
            if (sld.keys.Contains(assetName))
            {
                return;
            }
        }
        if (resInfo.resources.Exists(a => a.name == assetName))
        {
            ResInfoData da = resInfo.GetResInfo(assetName);
            if (da != null)
            {
                resInfo.resources.Remove(da);
            }
        }
    }
Beispiel #7
0
 public void UpdataResInfoList()
 {
     resinfo_list.Clear();
     //普通卡位
     foreach (var seat in resmanager.gelseat_list)
     {
         for (int i = 0; i < seat.Values.Length; i++)
         {
             ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
             if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk && resinfo.ActionList.Count() != 0)
             {
                 resinfo_list.Add(resinfo);
             }
         }
     }
     if (actionmanager.getAllActionsCount(handDevice) != 0)
     {
         return;
     }
     //检测离心机只的卡
     foreach (var seat in resmanager.centrifuge_list)
     {
         for (int i = 0; i < seat.Values.Length; i++)
         {
             ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
             if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk && resinfo.ActionList.Count() != 0)
             {
                 resinfo_list.Add(resinfo);
             }
         }
     }
 }
Beispiel #8
0
 private void LoadAllAssets()
 {
     if (needLoadAssets.Count == 0)
     {
         AllAssetLoadFinished();
     }
     else
     {
         for (int i = needLoadAssets.Count - 1; i >= 0; i--)
         {
             //string assetName = needLoadAssets[i];
             ResInfoData data = GameCfgMgr.Instance.GetResInfo(needLoadAssets[i]);
             ResMgr.Intstance.LoadAsset(data.name, a =>
             {
                 if (a == null)
                 {
                     LoadItemERROR(data.name);
                 }
                 else
                 {
                     LoadAssetFinished(data.name);
                 }
             });
         }
     }
 }
Beispiel #9
0
    private void LoadABFinished(AssetBundle AB, string abName)
    {
        if (AB == null)
        {
            loaded = -1;
            Debug.LogError("加载ab失败:" + abName);
            ResMgr.Intstance.QueueEvent(new LoadGroupItemError(groupInfo.sceneName, abName));
        }

        if (this.mNeedLoadABs[abName].Count > 1)
        {
            ResMgr.Intstance.LoadAll(abName, () =>
            {
                this.mNeedLoadABs.Remove(abName);
                CheckAllAbLoadFinished();
            });
        }
        else
        {
            if (this.mNeedLoadABs[abName].Count > 0)
            {
                ResInfoData data = this.mNeedLoadABs[abName][0];
                ResMgr.Intstance.LoadAsset(data.name, a =>
                {
                    this.mNeedLoadABs.Remove(abName);
                    CheckAllAbLoadFinished();
                });
            }
            else
            {
                CheckAllAbLoadFinished();
            }
        }
    }
Beispiel #10
0
 public bool IsDirty(ResInfoData data)
 {
     return(data.isKeepInMemory != isKeepInMemory ||
            data.isResourcesPath != isResourcesPath ||
            data.name != name ||
            data.path != path ||
            data.isFairyGuiPack != isFairyGuiPack);
 }
Beispiel #11
0
    /// <summary>
    /// 添加文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="groupName"></param>
    public static string AddAssetToGroup(string path, string groupName)
    {
        ResGroupCfg data = resInfo.GetGroupInfo(groupName);

        if (data == null)
        {
            return("");
        }

        string assetName = Path.GetFileNameWithoutExtension(path);

        if (!data.keys.Contains(assetName))
        {
            data.keys.Add(assetName);
            if (!resInfo.resources.Exists(a => a.name == assetName))
            {
                ResInfoData da = new ResInfoData();
                da.name           = assetName;
                da.path           = path.Replace("\\", "/");
                da.type           = Path.GetExtension(path);
                da.isFairyGuiPack = false;
                if (da.type == ".bytes")
                {
                    TextAsset text      = AssetDatabase.LoadAssetAtPath <TextAsset>(da.path);
                    byte []   descBytes = text.bytes;
                    if (descBytes.Length > 4 &&
                        descBytes[0] == 0x50 &&
                        descBytes[1] == 0x4b &&
                        descBytes[2] == 0x03 &&
                        descBytes[3] == 0x04)
                    {
                        da.isFairyGuiPack = true;
                        Debug.LogError(text.bytes[0] + "/" + text.bytes[1] + "/" + text.bytes[2] + "/" + text.bytes[3] + "/");
                    }
                }

                da.isKeepInMemory = true;

                da.isResourcesPath = da.path.Contains("Assets/Resources");
                if (da.isResourcesPath)
                {
                    string rootPath = da.path
                                      .Replace("Assets/Resources/", "");
                    rootPath  = Path.GetDirectoryName(rootPath);
                    da.ABName = rootPath;
                    //da.ABName = da.path.Replace(Application.dataPath + "/Resources")
                }
                else
                {
                    string rootPath = Path.GetDirectoryName(da.path);
                    rootPath  = rootPath.Substring(rootPath.LastIndexOf("/") + 1);
                    da.ABName = rootPath.ToLower();
                }
                resInfo.resources.Add(da);
            }
        }
        return(assetName);
    }
Beispiel #12
0
 public ResInfo(UnityEngine.Object obj, ResInfoData data)
 {
     asset                = obj;
     base.ABName          = data.ABName;
     base.isFairyGuiPack  = data.isFairyGuiPack;
     base.isKeepInMemory  = data.isKeepInMemory;
     base.isResourcesPath = data.isResourcesPath;
     base.name            = data.name;
 }
Beispiel #13
0
 public AssetInfo(int id, string name)
 {
     NameHashCode = id;
     this.Name    = name;
     data         = resInfo.GetResInfo(name);
     if (File.Exists(data.path))
     {
         FileInfo info = new FileInfo(data.path);
         size = info.Length;
     }
 }
Beispiel #14
0
        public static ResInfoData InitAssetInfo(string groupName, string path)
        {
            string assetName = Path.GetFileNameWithoutExtension(path) + Path.GetExtension(path).Replace(".", "_");

            var da = new ResInfoData(path)
            {
                path = path,
                type = Path.GetExtension(path)
            };

            da.address = CheckAssetName(da.path);

            //url = string.Format("{0}:{1}", groupName, name);
            da.isResourcesPath = path.Contains("/Resources/");

            var rootPath = Path.GetDirectoryName(path);

            rootPath = rootPath.Replace("\\", "/");
            var    name1  = Path.GetFileName(path);
            string abName = string.Empty;
            string url    = string.Empty;

            if (rootPath != null)
            {
                if (da.isResourcesPath)
                {
                    int index = rootPath.LastIndexOf("/Resources", StringComparison.Ordinal);
                    if (rootPath.Length <= index + 11)
                    {
                        abName = string.Empty;
                        url    = "r://" + name1;
                    }
                    else
                    {
                        abName = rootPath.Substring(index + 11);
                        url    = "r://" + abName + "/" + name1;
                    }
                }
                else
                {
                    var path1 = rootPath.Replace(ResConfig.ExternalResDir + "/", "");;
                    url    = "e://" + path1 + "/" + name1;
                    abName = path1.Replace("/", "_");
                }
                //AssetBundle.LoadFromFileAsync()
            }

            da.ABName = abName;
            da.url    = url;
            return(da);
        }
Beispiel #15
0
        //生成离心机放卡动作
        public bool GeneratePutGelToCent(string cen_code, ResInfoData put_seat, ResInfoData put_gel, ref Sequence seque)
        {
            var centrifuge = Engine.getInstance().cenMrg.GetCentrifugeByCode(cen_code);

            if (centrifuge == null)
            {
                centrifuge = Engine.getInstance().cenMrg.GetFreeCentrifuge();
            }
            if (put_seat != null)
            {
                //打开离心机门
                var opendoor_act = HandOpenCloseDoor.create(Engine.getInstance().handDevice, 5000, cen_code, true);
                seque.AddAction(opendoor_act);
                //离心机位移动
                //抓手移动到离心机位
                var move_act = Spawn.create(
                    MoveTo.create(centrifuge, 30001, -1, -1, put_seat.CenGelP[put_seat.CountX]),
                    MoveTo.create(Engine.getInstance().handDevice, 3001, (int)put_seat.X, (int)put_seat.CenHandYP[put_seat.CountX]));
                seque.AddAction(move_act);
                //抓手放卡
                var put_act = HandPutCard.create(Engine.getInstance().handDevice, 3001, (int)put_seat.ZPut);
                seque.AddAction(put_act);
                //把测试卡放在离心Gel位中
                put_seat.Values[put_seat.CountX, 0] = put_gel;
                if (put_gel != null)
                {
                    put_gel.PutOk = false;
                }
                put_act.successfun = (ActionBase act) =>
                {
                    if (put_gel != null)
                    {
                        put_gel.PutOk = true;
                        put_gel.SetSeatInfo(put_seat);
                    }
                    ResManager.getInstance().handseat_resinfo = null;
                    return(true);
                };
                put_act.destroyfun = (ActionBase act) =>
                {
                    put_seat.Values[put_seat.CountX, 0] = null;
                    ResManager.getInstance().handseat_resinfo = null;
                    return(true);
                };
            }
            else
            {
                ErrorSystem.WriteActError("离心机位已满", true, false);
            }
            return(put_seat != null);
        }
Beispiel #16
0
    /// <summary>
    /// 获取一个资源信息根据资源名称
    /// </summary>
    /// <param name="assetName">资源名称</param>
    /// <returns></returns>
    public ResInfoData GetResInfo(string assetName)
    {
        ResInfoData data = null;

        foreach (ResInfoData info in this.resources)
        {
            if (assetName == info.name)
            {
                data = info;
                break;
            }
        }
        return(data);
    }
Beispiel #17
0
    /// <summary>
    /// 获取资源信息
    /// </summary>
    /// <param name="assetName">资源名称</param>
    /// <returns></returns>
    public ResInfoData GetResInfo(string assetName)
    {
        ResInfoData data = null;

        if (this.resCfg != null)
        {
            foreach (ResInfoData info in resCfg.resources)
            {
                if (info.name == assetName)
                {
                    data = info;
                    break;
                }
            }
        }
        return(data);
    }
Beispiel #18
0
 //生成放卡在普通位
 public bool GeneratePutGelToNormal(ResInfoData put_seat, ResInfoData put_gel, ref Sequence seque)
 {
     if (put_seat != null)
     {
         //抓手移动
         seque.AddAction(MoveTo.create(Engine.getInstance().handDevice, 3001, (int)put_seat.X, (int)(put_seat.Y), 0));
         //抓手放卡
         var put_act = HandPutCard.create(Engine.getInstance().handDevice, 3001, (int)put_seat.ZPut, 0);
         seque.AddAction(put_act);
         //把测试卡放在Gel位中
         if (put_seat.Values != null)
         {
             put_seat.Values[put_seat.CountX, 0] = put_gel;
         }
         if (put_gel != null)
         {
             put_gel.PutOk = false;
         }
         put_act.successfun = (ActionBase act) =>
         {
             if (put_gel != null)
             {
                 put_gel.PutOk = true;
                 put_gel.SetSeatInfo(put_seat);
             }
             ResManager.getInstance().handseat_resinfo = null;
             return(true);
         };
         put_act.destroyfun = (ActionBase act) =>
         {
             if (put_seat.Values != null)
             {
                 put_seat.Values[put_seat.CountX, 0] = null;
             }
             ResManager.getInstance().handseat_resinfo = null;
             return(true);
         };
     }
     else
     {
         ErrorSystem.WriteActError("普通位已满", true, false);
     }
     return(put_seat != null);
 }
Beispiel #19
0
        //生成离心机抓卡动作
        public ResInfoData GenerateTakeGelFromCent(ResInfoData take_seat, string cen_code, ref Sequence seque)
        {
            var centrifuge = Engine.getInstance().cenMrg.GetCentrifugeByCode(cen_code);

            if (centrifuge == null)
            {
                centrifuge = Engine.getInstance().cenMrg.GetFreeCentrifuge();
            }
            if (take_seat != null)
            {
                //打开离心机门
                var opendoor_act = HandOpenCloseDoor.create(Engine.getInstance().handDevice, 5000, cen_code, true);
                seque.AddAction(opendoor_act);
                //离心机位移动
                //抓手移动到离心机位
                var move_act = Spawn.create(
                    MoveTo.create(centrifuge, 30001, -1, -1, (int)take_seat.CenGelP[take_seat.CountX]),
                    MoveTo.create(Engine.getInstance().handDevice, 3001, (int)take_seat.X, (int)take_seat.CenHandYP[take_seat.CountX]));
                seque.AddAction(move_act);
                //抓手抓卡
                var take_act = HandTakeCard.create(Engine.getInstance().handDevice, 3001, (int)take_seat.Z, (int)take_seat.ZLimit, (int)take_seat.ZCatch, 0, centrifuge);
                seque.AddAction(take_act);
                //把测试卡放在离心Gel位中
                var geltem = take_seat.Values[take_seat.CountX, 0];
                take_seat.Values[take_seat.CountX, 0] = null;
                take_act.successfun = (ActionBase act) =>
                {
                    ResManager.getInstance().handseat_resinfo = (ResInfoData)geltem;
                    return(true);
                };
                take_act.destroyfun = (ActionBase act) =>
                {
                    take_seat.Values[take_seat.CountX, 0] = geltem;
                    return(true);
                };
            }
            else
            {
                ErrorSystem.WriteActError("离心机位找不到卡", true, false);
            }
            return(take_seat);
        }
Beispiel #20
0
 /// <summary>
 /// 添加资源到字典
 /// </summary>
 /// <param name="assetName"></param>
 private void AddResToDic(string assetName, UnityEngine.Object obj)
 {
     if (obj == null)
     {
         return;
     }
     if (!mDic.ContainsKey(assetName))
     {
         ResInfoData data = GameCfgMgr.Instance.GetResInfo(assetName);
         if (data == null)
         {
             Debug.LogError("加载了无效的资源 assetName =" + assetName);
         }
         else
         {
             ResInfo info = new ResInfo(obj, data);
             mDic[assetName] = info;
         }
     }
 }
Beispiel #21
0
    /// <summary>
    /// 获得这个资源组里面的所有AB
    /// </summary>
    /// <returns></returns>
    public Dictionary <string, List <ResInfoData> > GetGroupABs(ResGroupCfg groupData)
    {
        Dictionary <string, List <ResInfoData> > aBToAssets = new Dictionary <string, List <ResInfoData> >();

        foreach (string str in groupData.keys)
        {
            ResInfoData data = GetResInfo(str);
            if (data != null)
            {
                if (!data.isResourcesPath)
                {
                    if (!string.IsNullOrEmpty(data.ABName))
                    {
                        if (aBToAssets.ContainsKey(data.ABName))
                        {
                            aBToAssets[data.ABName].Add(data);
                        }
                        else
                        {
                            aBToAssets[data.ABName] = new List <ResInfoData>()
                            {
                                data
                            };
                        }
                    }
                    else
                    {
                        if (!AppConst.DebugMode)
                        {
                            Debug.LogError("这个资源不存在ab里面 资源名称:" + str + "abName:" + data.ABName);
                        }
                    }
                }
            }
            else
            {
                Debug.LogError("资源未配置到资源设置,请打开 Tool->资源配置 资源名称:" + str);
            }
        }
        return(aBToAssets);
    }
Beispiel #22
0
 //生成卡仓放卡动作
 public bool GeneratePutGelToWare(ResInfoData put_seat, ResInfoData put_gel, ref Sequence seque)
 {
     if (put_seat != null)
     {
         var move_act = Spawn.create(
             MoveTo.create(Engine.getInstance().gelwareDevice, 3001, (int)(put_seat.StoreX), -1, -1),
             MoveTo.create(Engine.getInstance().handDevice, 3001, (int)put_seat.X, (int)put_seat.Y));
         seque.AddAction(move_act);
         //抓手放卡
         var put_act = HandPutCard.create(Engine.getInstance().handDevice, 3001, (int)put_seat.ZPut);
         seque.AddAction(put_act);
         //把测试卡放在离心Gel位中
         put_seat.Values[put_seat.CountX, 0] = put_gel;
         if (put_gel != null)
         {
             put_gel.PutOk = false;
         }
         put_act.successfun = (ActionBase act) =>
         {
             if (put_gel != null)
             {
                 put_gel.PutOk = true;
                 put_gel.SetSeatInfo(put_seat);
             }
             ResManager.getInstance().handseat_resinfo = null;
             return(true);
         };
         put_act.destroyfun = (ActionBase act) =>
         {
             put_seat.Values[put_seat.CountX, 0] = null;
             ResManager.getInstance().handseat_resinfo = null;
             return(true);
         };
     }
     else
     {
         ErrorSystem.WriteActError("卡仓位已满", true, false);
     }
     return(put_seat != null);
 }
        public void Save()
        {
            var MainPanel = (this.View as ShowDeepPlateView).MainPanel;
            var gds       = MainPanel.GetControls <Grid>();

            foreach (var gd in gds)
            {
                if (gd.DataContext != null)
                {
                    if (gd.Tag is VBJ vbj)
                    {
                        if (gd.DataContext is object[,] vals)
                        {
                            int X = vals.GetLength(0);
                            int Y = vals.GetLength(1);
                            for (int i = 0; i < X; i++)
                            {
                                for (int j = 0; j < Y; j++)
                                {
                                    if (vals[i, j] != null)
                                    {
                                        var resinfo_tem = new ResInfoData();
                                        resinfo_tem.Values = vbj.Values;
                                        resinfo_tem.SetCode("userfill");
                                        resinfo_tem.SetCode("userfill");
                                        vals[i, j] = resinfo_tem;
                                    }
                                    vbj.SetValue(i, j, vals[i, j]);
                                }
                            }
                        }
                    }
                }
            }
            this.RequestClose();
        }
Beispiel #24
0
    /// <summary>
    /// 从AB里面加载资源 这里一定要保证AB是先加载过的  不会主动加载AB
    /// </summary>
    /// <typeparam name="T">资源类型</typeparam>
    /// <param name="assteName">资源名称</param>
    /// <param name="type">资源类型</param>
    /// <param name="callBaclk">回调</param>
    /// <param name="keepInMemory">是否常驻内存</param>
    public void LoadAsset(string assetName, Type type, Action <UnityEngine.Object> callBaclk = null)
    {
        if (mDic.ContainsKey(assetName))
        {
            if (callBaclk != null)
            {
                callBaclk(mDic[assetName].asset);
            }
            return;
        }
        UnityEngine.Object obj  = null;
        ResInfoData        data = GameCfgMgr.Instance.GetResInfo(assetName);

        if (data != null)
        {
            if (data.isResourcesPath)
            {
                obj = Resources.Load(data.ABName + "/" + assetName, type);
                AddResToDic(assetName, obj);
                if (callBaclk != null)
                {
                    callBaclk(obj);
                }
            }
            else
            {
                bool isEditorLoad = false;
#if UNITY_EDITOR
                if (AppConst.DebugMode)
                {
                    isEditorLoad = true;
                    obj          = UnityEditor.AssetDatabase.LoadAssetAtPath(data.path, type);
                    AddResToDic(assetName, obj);
                    if (callBaclk != null)
                    {
                        callBaclk(obj);
                    }
                }
#endif
                Action <UnityEngine.Object> loadAsseted = assetObj =>
                {
                    AddResToDic(assetName, obj);
                    if (callBaclk != null)
                    {
                        callBaclk(obj);
                    }
                };
                if (!isEditorLoad)
                {
                    if (!string.IsNullOrEmpty(data.ABName))
                    {
                        ABMgr.Instance.LoadAB(data.ABName, ab =>
                        {
                            if (ab != null)
                            {
                                obj = ab.LoadAsset(data.name + data.type, type);
                                loadAsseted(obj);
                            }
                            else
                            {
                                Debug.LogError("加载ab失败:" + data.ABName);
                                if (callBaclk != null)
                                {
                                    callBaclk(obj);
                                }
                            }
                        });
                    }
                    else
                    {
                        Debug.LogError("想要加载的AB名字为空:" + assetName);
                        if (callBaclk != null)
                        {
                            callBaclk(obj);
                        }
                    }
                }
            }
        }
        else
        {
            Debug.LogError("要加载的资源未配置:" + assetName);
        }
    }
        public void ActLogic(List <T_GelStep> act_group, List <T_GelStep> act_group_next, double dt)
        {
            if (act_group != null && act_group.Count != 0 && act_group[0].State == 0)
            {
                int next_state    = 2;
                var seque_act     = Sequence.create();
                var exper_package = ((ExperimentPackage)act_group[0].ExperPackage);
                seque_act.exp_pack = exper_package;
                AbstractCanDevice device = null;
                foreach (var act in act_group)
                {
                    resmanager.tip_count += act.InjectCount;
                }
                if (act_group[0].InjectCount != 0)
                {
                    var act_next = act_group_next == null ? null : act_group_next[0];
                    device = injectorDevice;
                    act_group.Sort((a, b) => { return(((ExperimentPackage)a.ExperPackage).piercer_index > ((ExperimentPackage)b.ExperPackage).piercer_index ? 1 : -1); });
                    seque_act = generater.GenerateAction(act_group);
                    if (act_next != null && act_next.InjectCount == 0)
                    {
                        seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) =>
                        {
                            inj_wait_time = 9999;
                            return(true);
                        }));
                    }
                }
                else
                {
                    var act      = act_group[0];
                    var act_next = act_group_next == null ? null : act_group_next[0];
                    var resinfo  = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat");
                    if (resinfo == null)
                    {
                        resinfo = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_Centrifuge");
                    }
                    if ((resinfo == null || !resinfo.PutOk) && act.StepClass != TestStepEnum.LoadGel)
                    {
                        return;
                    }
                    switch (act.StepClass)
                    {
                    case TestStepEnum.LoadGel:
                    {
                        if (actionmanager.getAllActionsCount(handDevice) == 0)
                        {
                            var take_seat  = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat", "", "3");
                            var paper_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "4", null, exper_package.is_crossmatching);
                            if (paper_seat != null)
                            {
                                device = handDevice;
                                if (take_seat != null)
                                {
                                    generater.GenerateTakeGelFromNormal(take_seat, ref seque_act);
                                }
                                else
                                {
                                    seque_act.AddAction(HandTakeGelFromWare.create(handDevice, 3001, gelwareDevice, exper_package.gel_mask_id, exper_package.GetGelMask(), exper_package.GetSampleCode(act.SampleIndex)));
                                }
                                seque_act.AddAction(HandPutGelToNormal.create(handDevice, 3001, gelwareDevice, paper_seat));
                                if (act_next != null && act_next.StepClass != TestStepEnum.LoadGel)
                                {
                                    seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) => {
                                            hand_wait_time = 999999;
                                            var ware_act   = MoveTo.create(gelwareDevice, 3000, 0);
                                            ware_act.runAction(gelwareDevice);
                                            return(true);
                                        }));
                                }
                                exper_package.piercer_index             = paper_seat.CountX;
                                paper_seat.Values[paper_seat.CountX, 0] = new ResInfoData();
                                seque_act.destroyfun = (ActionBase act_tem) =>
                                {
                                    paper_seat.Values[paper_seat.CountX, 0] = null;
                                    return(true);
                                };
                                next_state = 2;
                            }
                            else
                            {
                                next_state = 0;
                            }
                        }
                        else
                        {
                            next_state = 0;
                        }
                    }
                    break;

                    case TestStepEnum.KaiKongGel:
                    {
                        int handrx      = 0;
                        int injrx       = 0;
                        var device_hand = new ActionDevice(handDevice);
                        var device_inj  = new ActionDevice(injectorDevice);
                        next_state = 0;
                        if (resinfo.Purpose != "4")
                        {
                            var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "4");
                            if (put_seat == null && resinfo.Purpose != "3")
                            {
                                put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                            }
                            if (put_seat != null)
                            {
                                device = handDevice;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }
                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                next_state = 0;
                            }
                        }
                        else
                        {
                            bool is_next_kaikong = act_next != null ? act_next.StepClass == TestStepEnum.KaiKongGel : false;
                            var  paper_seat      = resmanager.GetResByCode(exper_package.GetGelMask(), "T_BJ_GelSeat", "", "4");
                            int  yb = is_next_kaikong ? -1 : 0;
                            if (paper_seat != null &&
                                device_hand.GetRealX(ref handrx) &&
                                (handrx + 1000) < paper_seat.X && ActionDevice.hand_tx < paper_seat.X &&
                                device_inj.GetRealX(ref injrx) &&
                                (injrx + 1000) < paper_seat.InjectorX && ActionDevice.inj_tx < paper_seat.InjectorX + 1000)
                            {
                                device = piercerDevice;
                                seque_act.AddAction(PaperCard.create(piercerDevice, 3000, paper_seat, yb));
                                seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                                    {
                                        exper_package.is_open = true;
                                        resmanager.gel_count++;
                                        return(true);
                                    }));
                                next_state = 2;
                            }
                        }
                    }
                    break;

                    case TestStepEnum.JYJS:
                    {
                        exper_package.is_jyjs = true;
                        next_state            = 2;
                    }
                    break;

                    case TestStepEnum.ZKDFY:
                    {
                        next_state = 0;
                        if (resinfo.Purpose == "1")
                        {
                            next_state = 0;
                            exper_package.hatch_cur_time += dt;
                            if (exper_package.hatch_cur_time >= exper_package.hatch_time)
                            {
                                next_state = 2;
                            }
                        }
                        else if (!(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                        {
                            var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "1");
                            if (put_seat == null && resinfo.Purpose != "3")
                            {
                                put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                            }
                            if (put_seat != null)
                            {
                                device = handDevice;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }
                                exper_package.hatch_cur_time = 0;
                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                next_state = 0;
                            }
                            else
                            {
                                next_state = 0;
                            }
                        }
                    }
                    break;

                    case TestStepEnum.ZKDLXJ:
                    {
                        if (actionmanager.getAllActionsCount(handDevice) == 0)
                        {
                            next_state = 0;
                            if (resinfo.Purpose != "lxj" && !(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                            {
                                //查看可用离心机
                                var centrifuge_list = resmanager.centrifuge_list.Where(item => item.Status == 1).ToList();
                                centrifuge_list.Sort((a, b) => { return(a.LastUseTime < b.LastUseTime ? 1 : -1); });
                                foreach (var seat in centrifuge_list)
                                {
                                    CentrifugeMDevice cendev = cenMrg.GetCentrifugeByCode(seat.Code);
                                    if (seat.Status == 1 && cendev != null)
                                    {
                                        device = handDevice;
                                        bool is_last_cent = seat == centrifuge_list[centrifuge_list.Count - 1];
                                        bool iscanputcen  = IsCanPutCen(cendev);
                                        var  put_seat     = resmanager.GetResByCode("null", "T_BJ_Centrifuge", cendev.Centrifugem.Code.SetValue);
                                        if (iscanputcen == false)
                                        {
                                            put_seat = null;
                                        }
                                        //放进待定位
                                        if (put_seat == null && resinfo.Purpose != "3" && is_last_cent)
                                        {
                                            put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                                        }
                                        if (put_seat != null)
                                        {
                                            var spaw      = Spawn.create();
                                            var put_seque = Sequence.create();
                                            if (put_seat.Purpose == "lxj")
                                            {
                                                //打开离心机门
                                                var opendoor_act = HandOpenCloseDoor.create(handDevice, 5000, cendev.Centrifugem.Code.SetValue, true);
                                                put_seque.AddAction(opendoor_act);
                                            }
                                            var put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref put_seque);
                                            spaw.AddAction(put_seque);
                                            seque_act.AddAction(spaw);
                                            if (put_seat.Purpose == "lxj")
                                            {
                                                spaw.AddAction(MoveTo.create(cendev, 30001, -1, -1, put_seat.CenGelP[put_seat.CountX]));
                                                generater.GeneratePutGelToCent(cendev.Centrifugem.Code.SetValue, put_seat, put_gel, ref seque_act);
                                            }
                                            else
                                            {
                                                generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                                            }
                                            seat.LastUseTime = Engine.getInstance().getSystemMs();
                                            break;
                                        }
                                        else
                                        {
                                            next_state = 0;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            next_state = 0;
                        }
                    }
                    break;

                    case TestStepEnum.PutPeiGelBack:
                    {
                        var put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "2");
                        if (put_seat != null && resinfo.Purpose == "lxj")
                        {
                            device = handDevice;
                            var put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                            generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque_act);
                            next_state = 2;
                        }
                    }
                    break;

                    case TestStepEnum.XJPD:
                    {
                        var put_seat     = resmanager.GetResByCode("", "T_BJ_Camera");               //相机位
                        var wasted_seat  = resmanager.GetResByCode("", "T_BJ_WastedSeat", "", "1");  //垃圾位
                        var daiding_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3"); //待定位
                        if (put_seat != null && wasted_seat != null && !(resinfo.Purpose == "4" && actionmanager.getAllActionsCount(piercerDevice) != 0))
                        {
                            device = handDevice;
                            ResInfoData put_gel = null;
                            if (resinfo.Purpose == "lxj")
                            {
                                put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                            }
                            else
                            {
                                put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                            }

                            seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                            seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)put_seat.X, (int)(put_seat.Y), -1));
                            seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, (int)(put_seat.Z)));
                            //拍照分析
                            seque_act.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                                {
                                    opDevice.CameraLight(true);
                                    bool result = true;
                                    if (cameraDevice.IsOpen == false)
                                    {
                                        result = cameraDevice.Open();
                                    }
                                    var bm = cameraDevice.CaptureImage();
                                    cameraDevice.Save(bm, exper_package);
                                    opDevice.CameraLight(false);
                                    return(true);
                                }));
                            //是否还有动作
                            if (exper_package.action_list.Count > 1 && daiding_seat != null)
                            {
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                generater.GeneratePutGelToNormal(daiding_seat, put_gel, ref seque_act);
                            }
                            else
                            {
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)wasted_seat.X, (int)(wasted_seat.Y)));
                                seque_act.AddAction(HandPutCard.create(handDevice, 3000, (int)wasted_seat.ZPut, 0));
                                seque_act.AddAction(SkCallBackFun.create((ActionBase act_tem) => {
                                        DelPackage(exper_package);
                                        return(true);
                                    }));
                            }
                            next_state = 2;
                        }
                    }
                    break;

                    case TestStepEnum.ECONOMIZECOUNTTIME:
                    {
                        next_state = 0;
                        if (exper_package.is_open)
                        {
                            exper_package.after_kktime -= dt;
                            if (exper_package.after_kktime <= 0)
                            {
                                device     = handDevice;
                                next_state = 2;
                                exper_package.after_kktime = 0;
                                ResInfoData put_gel = null;
                                if (resinfo.Purpose == "lxj")
                                {
                                    put_gel = generater.GenerateTakeGelFromCent(resinfo, resinfo.CenCode, ref seque_act);
                                }
                                else
                                {
                                    put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque_act);
                                }

                                var wasted_seat = resmanager.GetResByCode("", "T_BJ_WastedSeat");        //垃圾位
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                                seque_act.AddAction(MoveTo.create(handDevice, 3000, (int)wasted_seat.X, (int)(wasted_seat.Y)));
                                seque_act.AddAction(HandPutCard.create(handDevice, 3000, (int)wasted_seat.ZPut, 0));
                            }
                        }
                    }
                    break;
                    }
                }
                if (device != null)
                {
                    seque_act.AddAction(SkCallBackFun.create((ActionBase act) =>
                    {
                        foreach (var act_tem in act_group)
                        {
                            act_tem.State = next_state;
                        }
                        return(true);
                    }));
                    foreach (var act_tem in act_group)
                    {
                        act_tem.State = 1;
                    }
                    seque_act.runAction(device);
                }
                else
                {
                    foreach (var act_tem in act_group)
                    {
                        act_tem.State = next_state;
                    }
                }
            }
        }
        //离心开始逻辑
        public bool CenRunLogic(CentrifugeMDevice cendev)
        {
            bool is_allcenact = true;  //是否全是离心动作
            bool is_allputok  = true;  //是否全是已放好
            bool is_empty     = true;  //是否为空
            bool is_gelfull   = false; //是否已满
            bool is_gelsoon   = false; //是否有卡快要离心
            int  gel_count    = 0;
            List <ResInfoData> resinfo_list = new List <ResInfoData>();

            if (experiment_package_list.Count == 0)
            {
                return(false);
            }
            foreach (var seat in resmanager.centrifuge_list)
            {
                if (seat.Code == cendev.Centrifugem.Code.SetValue)
                {
                    for (int i = 0; i < seat.Values.Length; i++)
                    {
                        ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                        if (resinfo != null && resinfo.PutOk)
                        {
                            is_empty = false;
                            var exp_pack = GetExpPackageByMask(resinfo.GetGelMask());
                            if (exp_pack == null)
                            {
                                exp_pack = GetExpPackageByMask(resinfo.GetCodeAt(0));
                            }
                            System.Diagnostics.Debug.Assert(exp_pack != null);
                            if (exp_pack == null)
                            {
                                return(false);
                            }
                            is_allcenact = is_allcenact && exp_pack.GetActionTypeAt(0) == TestStepEnum.ZKDLXJ;
                            is_allputok  = is_allputok && resinfo.PutOk;
                            resinfo_list.Add(resinfo);
                            gel_count++;
                        }
                    }
                    is_gelfull = gel_count >= seat.Values.Length;
                }
            }
            if ((is_gelfull == false && actionmanager.getAllActionsCount(handDevice) != 0) || actionmanager.getAllActionsCount(cendev) != 0)
            {
                return(false);
            }
            //普通卡位是否有卡快要离心
            foreach (var seat in resmanager.gelseat_list)
            {
                for (int i = 0; i < seat.Values.Length; i++)
                {
                    ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                    if (resinfo != null && resinfo.PutOk && resinfo.FindCode("pei*", false) == false)
                    {
                        var exp_pack = GetExpPackageByMask(resinfo.GetGelMask());
                        if (exp_pack == null)
                        {
                            continue;
                        }
                        is_gelsoon = (exp_pack.GetActionTypeAt(0) == TestStepEnum.ZKDLXJ) ||
                                     (exp_pack.GetActionTypeAt(0) == TestStepEnum.ZKDFY &&
                                      exp_pack.GetActionTypeAt(1) == TestStepEnum.ZKDLXJ &&
                                      exp_pack.hatch_time - exp_pack.hatch_cur_time <= 20000);
                        if (seat.Purpose == 4 && exp_pack.FindAct(TestStepEnum.ZKDLXJ) && exp_pack.FindAct(TestStepEnum.ZKDFY) == false)
                        {
                            is_gelsoon = true;
                        }
                        if (is_gelsoon)
                        {
                            break;
                        }
                    }
                }
                if (is_gelsoon)
                {
                    break;
                }
            }
            //检测是否满足运行条件
            if (is_allcenact && is_allputok && !is_empty && (!is_gelsoon || is_gelfull))
            {
                int hspeed  = (int)cendev.Centrifugem.HightSpeed.SetValue;
                int lspeed  = (int)cendev.Centrifugem.LowSpeed.SetValue;
                int htime   = (int)cendev.Centrifugem.HightSpeedTime.SetValue;
                int ltime   = (int)cendev.Centrifugem.LowSpeedTime.SetValue;
                int uphtime = (int)cendev.Centrifugem.AddHSpeedTime.SetValue;
                int upltime = (int)cendev.Centrifugem.AddLSpeedTime.SetValue;
                int stime   = (int)cendev.Centrifugem.StopSpeedTime.SetValue;
                //配平卡动作(如果离心机内卡是单数就再放一张配平卡)
                var seque_pei = Sequence.create();
                var seque     = Sequence.create();
                if (resinfo_list.Count() % 2 != 0)
                {
                    var spaw      = Spawn.create();
                    var put_seque = Sequence.create();
                    //得到配平卡
                    var         pei_gel  = resmanager.GetResByCode("pei" + cendev.Centrifugem.Code.SetValue, "T_BJ_GelSeat");
                    var         put_gel  = generater.GenerateTakeGelFromNormal(pei_gel, ref put_seque);
                    T_GelStep[] pei_step = { new T_GelStep(), new T_GelStep() };
                    pei_step[0].StepClass = TestStepEnum.ZKDLXJ;
                    pei_step[1].StepClass = TestStepEnum.PutPeiGelBack;
                    var exp_pack = ExperimentPackage.Create(pei_step.ToList(), pei_gel.GetCodeAt(0), "123", 8, 0, 1, 0, false, 0, 0, false);
                    exp_pack.is_jyjs = true;
                    experiment_package_list.Add(exp_pack);
                    resinfo_list.Add(put_gel);
                    var put_seat = resmanager.GetResByCode("null", "T_BJ_Centrifuge", cendev.Centrifugem.Code.SetValue);
                    spaw.AddAction(put_seque);
                    spaw.AddAction(MoveTo.create(cendev, 30001, -1, -1, put_seat.CenGelP[put_seat.CountX]));
                    seque_pei.AddAction(spaw);
                    generater.GeneratePutGelToCent(cendev.Centrifugem.Code.SetValue, put_seat, put_gel, ref seque_pei);
                }
                seque_pei.AddAction(HandOpenCloseDoor.create(handDevice, 5000, cendev.Centrifugem.Code.SetValue, false));
                seque.AddAction(SkWaitForAction.create(handDevice, seque_pei));
                seque.AddAction(CentrifugeStart.create(cendev, 6000000, hspeed, lspeed, htime, ltime, uphtime, upltime, stime));
                seque.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                {
                    foreach (var resinfo in resinfo_list)
                    {
                        var exp_pack = GetExpPackageByMask(resinfo.GetGelMask());
                        if (exp_pack == null)
                        {
                            exp_pack = GetExpPackageByMask(resinfo.GetCodeAt(0));
                        }
                        System.Diagnostics.Debug.Assert(exp_pack != null);
                        var act   = exp_pack.GetActionAt(0);
                        act.State = 2;
                    }
                    return(true);
                }));
                seque_pei.runAction(handDevice);
                seque.runAction(cendev);
                return(true);
            }
            return(false);
        }
        //放卡到离心逻辑
        public bool CenPutLogic(CentrifugeMDevice cendev)
        {
            if (resmanager.handseat_resinfo != null ||
                actionmanager.getAllActionsCount(piercerDevice) != 0 ||
                actionmanager.getAllActionsCount(handDevice) != 0 ||
                actionmanager.getAllActionsCount(cendev) != 0)
            {
                return(false);
            }
            bool isallcen = true;//是否在离心机内的所有卡当前动作是离心

            foreach (var seat in resmanager.centrifuge_list)
            {
                if (seat.Code == cendev.Centrifugem.Code.SetValue)
                {
                    for (int i = 0; i < seat.Values.Length; i++)
                    {
                        ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                        if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk)
                        {
                            isallcen = resinfo.GetActionAt(0) == ActionPoint.ActionPointType.Centrifugal;
                            if (isallcen == false)
                            {
                                break;
                            }
                        }
                    }
                    break;
                }
            }
            //普通卡位
            List <ResInfoData> resinfo_list = new List <ResInfoData>();

            foreach (var seat in resmanager.gelseat_list)
            {
                for (int i = 0; i < seat.Values.Length; i++)
                {
                    ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                    if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk)
                    {
                        if (resinfo.GetActionAt(0) == ActionPoint.ActionPointType.Centrifugal)
                        {
                            resinfo_list.Add(resinfo);
                        }
                    }
                }
            }

            //把卡转到离心位
            if (resinfo_list.Count != 0)
            {
                var  seque  = Sequence.create();
                bool is_put = false;
                seque.AddAction(InitXyz.create(cendev, 30000, false, false, true));
                foreach (var resinfo in resinfo_list)
                {
                    var put_seat = resmanager.GetResByCode("null", "T_BJ_Centrifuge", cendev.Centrifugem.Code.SetValue);
                    if (isallcen == false)
                    {
                        put_seat = null;
                    }
                    if (put_seat == null && resinfo.Purpose != "3")
                    {
                        put_seat = resmanager.GetResByCode("null", "T_BJ_GelSeat", "", "3");
                    }
                    if (put_seat != null)
                    {
                        var put_gel = generater.GenerateTakeGelFromNormal(resinfo, ref seque);
                        if (put_seat.Purpose == "lxj")
                        {
                            generater.GeneratePutGelToCent(cendev.Centrifugem.Code.SetValue, put_seat, put_gel, ref seque);
                        }
                        else
                        {
                            generater.GeneratePutGelToNormal(put_seat, put_gel, ref seque);
                        }
                        is_put = true;
                    }
                }
                if (is_put)
                {
                    seque.runAction(handDevice);
                    return(true);
                }
            }
            return(false);
        }
        //垃圾箱逻辑
        public bool RubbishLogic(double dt)
        {
            if (actionmanager.getAllActionsCount(handDevice) != 0)
            {
                return(false);
            }
            //普通卡位
            ResInfoData camer_gel = null;

            if (resmanager.handseat_resinfo != null && resmanager.handseat_resinfo.GetActionAt(0) == ActionPoint.ActionPointType.Rubbish)
            {
                camer_gel         = resmanager.handseat_resinfo;
                camer_gel.Purpose = "hand";
            }
            if (camer_gel == null)
            {
                foreach (var seat in resmanager.gelseat_list)
                {
                    for (int i = 0; i < seat.Values.Length; i++)
                    {
                        ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                        if (resinfo != null && resinfo.InjectFinish && resinfo.PutOk)
                        {
                            if (resinfo.GetActionAt(0) == ActionPoint.ActionPointType.Rubbish)
                            {
                                camer_gel = resinfo;
                            }
                            break;
                        }
                    }
                    if (camer_gel != null)
                    {
                        break;
                    }
                }
            }
            //检测离心机只的卡
            if (camer_gel == null)
            {
                foreach (var seat in resmanager.centrifuge_list)
                {
                    for (int i = 0; i < seat.Values.Length; i++)
                    {
                        ResInfoData resinfo = (ResInfoData)seat.Values[i, 0];
                        if (seat.Status == 1 && resinfo != null && resinfo.InjectFinish && resinfo.PutOk)
                        {
                            if (resinfo.GetActionAt(0) == ActionPoint.ActionPointType.Rubbish)
                            {
                                resinfo.Purpose = "lxj";
                                resinfo.CenCode = seat.Code;
                                camer_gel       = resinfo;
                                break;
                            }
                        }
                    }
                    if (camer_gel != null)
                    {
                        break;
                    }
                }
            }
            //把卡转到垃圾位
            if (camer_gel != null && camer_gel.GetActionAt(0) == ActionPoint.ActionPointType.Rubbish)
            {
                var  seque    = Sequence.create();
                bool is_put   = false;
                var  put_seat = resmanager.GetResByCode("", "T_BJ_WastedSeat");
                if (put_seat != null)
                {
                    ResInfoData put_gel = null;
                    if (camer_gel.Purpose == "lxj")
                    {
                        put_gel = generater.GenerateTakeGelFromCent(camer_gel, camer_gel.CenCode, ref seque);
                    }
                    else if (camer_gel.Purpose == "hand")
                    {
                        put_gel = camer_gel;
                    }
                    else
                    {
                        put_gel = generater.GenerateTakeGelFromNormal(camer_gel, ref seque);
                    }

                    seque.AddAction(MoveTo.create(handDevice, 3000, (int)put_seat.X, (int)(put_seat.Y)));
                    seque.AddAction(HandPutCard.create(handDevice, 3000, (int)put_seat.ZPut, 0));
                    seque.AddAction(MoveTo.create(handDevice, 3000, -1, -1, 0));
                    seque.AddAction(SkCallBackFun.create((ActionBase acttem) =>
                    {
                        if (camer_gel.Purpose == "hand")
                        {
                            resmanager.handseat_resinfo = null;
                        }
                        put_gel.RemoveActionAt(0);
                        return(true);
                    }));
                    is_put = true;
                }
                if (is_put)
                {
                    seque.runAction(handDevice);
                    return(true);
                }
            }
            return(false);
        }
Beispiel #29
0
        //把转换为action point
        public ActionPoint GelStepToActionPoint(T_GelStep gel_step, TestStepEnum type)
        {
            if (gel_step.StepClass == TestStepEnum.FPYT && gel_step.GetLiquidInfo().IsDetector&& type != TestStepEnum.MixLiquid && type != TestStepEnum.SpuLiquid)
            {
                type = TestStepEnum.FollowAbsLiquid;
            }
            ActionPoint action_point = new ActionPoint(-1, -1, -1, type);
            var         resmanager   = ResManager.getInstance();
            var         exp_pack     = ((ExperimentPackage)gel_step.ExperPackage);

            if (gel_step.StepClass == TestStepEnum.FPYT)
            {
                //是否为混合
                bool is_mix     = gel_step.is_mix;
                var  fpytinfo   = gel_step.GetFpytInfo();
                var  liquidinfo = gel_step.GetLiquidInfo();
                action_point.deep         = (int)liquidinfo.Deep;
                action_point.deepspeed    = (int)liquidinfo.DeeSpeed;
                action_point.detectordeep = (int)liquidinfo.DetectorDeep;
                action_point.tube         = (int)(fpytinfo.TubeValue >> gel_step.SampleIndex);
                action_point.capacity     = (int)liquidinfo.Vol;
                action_point.absbspeed    = (int)liquidinfo.AbsSpeed;
                action_point.spuspeed     = (int)liquidinfo.SpuSpeed;
                action_point.backcapacity = (int)liquidinfo.BackCapacity;
                action_point.backspeed    = (int)liquidinfo.BackCapacitySpeed;
                action_point.mixtimes     = (int)(gel_step.is_spu?fpytinfo.MixTimes:0);
                action_point.mixdeep      = (int)fpytinfo.MixDeep;
                action_point.spucapacity  = (int)fpytinfo.Vol;
                if (action_point.type == TestStepEnum.AbsLiquid || action_point.type == TestStepEnum.FollowAbsLiquid)
                {
                    ResInfoData abs_tager = null;//吸取的液体
                    if (liquidinfo.LiquidType == "病人红细胞" || liquidinfo.LiquidType == "病人血清")
                    {
                        abs_tager = resmanager.GetResByCode(exp_pack.GetSampleCode(gel_step.SampleIndex), "T_BJ_SampleRack");
                    }
                    else
                    {
                        abs_tager = resmanager.GetResByCode(liquidinfo.LiquidType, "T_BJ_AgentiaWarehouse");
                    }
                    System.Diagnostics.Debug.Assert(abs_tager != null);
                    action_point.x = abs_tager.InjectorX;
                    action_point.y = abs_tager.InjectorY;
                    action_point.z = abs_tager.InjectorZ;
                }
                else if (action_point.type == TestStepEnum.MixLiquid)
                {
                    //查找deep盘
                    ResInfoData deep_plane = resmanager.GetResByCode(gel_step.MixCode, "T_BJ_DeepPlate");
                    if (deep_plane == null)
                    {
                        //deep_plane = resmanager.GetFreeDeepPlate(5);
                        deep_plane = resmanager.GetResByCode("null", "T_BJ_DeepPlate");
                        deep_plane.Values[deep_plane.CountX, deep_plane.CountY] = deep_plane;
                    }
                    System.Diagnostics.Debug.Assert(deep_plane != null);
                    if (deep_plane.FindCode(gel_step.MixCode, false) == false)
                    {
                        deep_plane.AddCode(gel_step.MixCode);
                    }
                    action_point.x = deep_plane.InjectorX;
                    action_point.y = deep_plane.InjectorY;
                    action_point.z = deep_plane.InjectorZ;
                }
                else if (action_point.type == TestStepEnum.SpuLiquid)
                {
                    //查找gel卡
                    ResInfoData gel_seat = resmanager.GetResByCode(exp_pack.GetGelMask(), "T_BJ_GelSeat");
                    System.Diagnostics.Debug.Assert(gel_seat != null);
                    action_point.x        = gel_seat.InjectorX;
                    action_point.y        = gel_seat.InjectorY;
                    action_point.z        = gel_seat.InjectorZ;
                    action_point.tube_gap = gel_seat.InjectorGap;
                }
            }
            return(action_point);
        }
Beispiel #30
0
        public static bool Update()
        {
            bool ret = false;

            if (resInfo == null)
            {
                return(ret);
            }

            if (loaclFileresInfo == null || loaclFileresInfo.groups.Count != resInfo.groups.Count ||
                loaclFileresInfo.resources.Count != resInfo.resources.Count)
            {
                ret = true;
            }
            else
            {
                if (loaclFileresInfo == null || loaclFileresInfo.groups.Count == resInfo.groups.Count)
                {
                    foreach (ResGroupCfg da in loaclFileresInfo.groups)
                    {
                        bool flag = false;
                        foreach (ResGroupCfg da2 in resInfo.groups)
                        {
                            if (da.groupName == da2.groupName && !ListIsSame(da.keys, da2.keys))
                            {
                                flag = true;
                                break;
                            }
                        }

                        if (flag)
                        {
                            ret = true;
                            break;
                        }
                    }

                    if (!ListIsSame(loaclFileresInfo.groups, resInfo.groups))
                    {
                        ret = true;
                    }
                }

                if (loaclFileresInfo == null || loaclFileresInfo.resources.Count == resInfo.resources.Count)
                {
                    foreach (ResInfoData da in loaclFileresInfo.resources)
                    {
                        ResInfoData da2 = resInfo.GetResInfo(da.address);
                        if (da2 == null || da.IsDirty(da2))
                        {
                            ret = true;
                            break;
                        }
                    }
                }
            }

            if (!ret)
            {
                return(false);
            }
            string jsonStr = JsonUtility.ToJson(resInfo, true);

            loaclFileresInfo = JsonUtility.FromJson <ResJsonData>(jsonStr);
            if (!System.IO.Directory.Exists(Path.GetDirectoryName(ResConfig.ResJsonCfgFilePath)))
            {
                System.IO.Directory.CreateDirectory(Path.GetDirectoryName(ResConfig.ResJsonCfgFilePath));
            }

            File.WriteAllText(ResConfig.ResJsonCfgFilePath, jsonStr);
            UnityEditor.AssetDatabase.SaveAssets();
            UnityEditor.AssetDatabase.Refresh();

            return(true);
        }