示例#1
0
        private void New()
        {
            var per = new TB_Permission();

            per.Name      = txtName.Value.Trim();
            per.Image     = hidImage.Value;
            per.Delete    = false;
            per.IsDefault = isDefault.Checked;
            per.Url       = txtURL.Value.Trim();
            // 父级菜单,为空时默认为顶级菜单
            var parent = int.Parse("" == hidParent.Value ? "0" : hidParent.Value);

            per.Parent = parent;
            var brothers = PermissionInstance.FindList(p => p.Parent == parent);

            per.DisplayOrder = brothers.Count();
            per.AddTime      = DateTime.Now;
            per.Description  = txtDescription.Value.Trim();
            PermissionInstance.Add(per);

            // 记录历史
            SaveHistory(new TB_AccountHistory
            {
                ActionId = ActionInstance.Find(f => f.Name.Equals("AddPermission")).id,
                ObjectA  = "[id=" + per.id + "] " + per.Name
            });
            UpdateRole(per);
            ShowNotification("./permission_list.aspx", "Success: You added a new menu.", true);
        }
示例#2
0
    private bool EstimateBindingsQuality(ActionInstance instance, WorldModel context)//calculate expected affinity from the instance, as well as expected utility, recursion would happen here to evaluate future actions
    {
        var OpenCandidateList = new List <CharModel>(context.Characters.Values);

        for (int i = 0; i < OpenCandidateList.Count;)
        {
            if (instance.InvolvedCharacters.ContainsValue(OpenCandidateList[i].Character))
            {
                OpenCandidateList.RemoveAt(i);
            }
            else
            {
                i++;
            }
        }
        instance.RunCharacterControlledPreferenceRules();
        var possibleBindingsinstances = RecursiveBindings(instance, OpenCandidateList, instance.Template.EngineControlledRoles);

        SetBindingsProbability(possibleBindingsinstances);

        instance.Affinity = EvaluateBindingsAffinity(possibleBindingsinstances);
        if (instance.Affinity < Electrum.affinityTreshold)
        {
            return(false);                                              //the action will be discarded, as it is too unattractive
        }
        //utility estimation
        instance.ExpectedImmediateUtility = EvaluateBindingsUtility(context, possibleBindingsinstances);
        return(true);
    }
示例#3
0
        private void EditSatellite()
        {
            var num = txtNumber.Value.Trim();
            var t   = SatelliteInstance.Find(f => f.id == ParseInt(Utility.Decrypt(hidID.Value)));

            if (null != t)
            {
                var old = SatelliteInstance.Find(f => f.CardNo.Equals(num));
                if (null != old && old.id != t.id)
                {
                    ShowNotification("./satellite_manage.aspx", "Cannot edit the satellite object: The number has exist.", false);
                }
                else
                {
                    SatelliteInstance.Update(f => f.id == t.id, act => { act.CardNo = num; });
                    SaveHistory(new TB_AccountHistory()
                    {
                        ActionId = ActionInstance.Find(f => f.Name.Equals("EditSat")).id,
                        ObjectA  = SatelliteInstance.ToString(t)
                    });
                    ShowNotification("./satellite_manage.aspx", "You saved the satellite information.");
                }
            }
            else
            {
                ShowNotification("./satellite_manage.aspx", "Cannot edit the satellite object: no record exist.", false);
            }
        }
示例#4
0
 public void Trigger(ActionInstance param)
 {
     for (int i = 0; i < Mods.Count; i++)
     {
         Mods[i].Mod(param);
     }
 }
示例#5
0
        private void EditCustomer()
        {
            var id  = ParseInt(Utility.Decrypt(_key));
            var obj = CustomerInstance.Find(f => f.id == id);

            if (null == obj)
            {
                ShowNotification("./customers.aspx", "Error: could not find the customer.", false);
            }
            else
            {
                BuilldCustomer(obj);
                var chk = CustomerInstance.Find(f => f.Code.Equals(obj.Code) && f.id != id);
                if (null != chk)
                {
                    ShowNotification("./customer_new.aspx", "Error: there have a same customer code exists.", false);
                }
                else
                {
                    Update(obj);

                    // 保存历史记录
                    SaveHistory(new TB_AccountHistory()
                    {
                        ActionId = ActionInstance.Find(f => f.Name.Equals("EditCustomer")).id,
                        ObjectA  = CustomerInstance.ToString(obj)
                    });

                    ShowNotification("./customers.aspx", "You have changed the customer: " + CustomerInstance.ToString(obj) + ".");
                }
            }
        }
示例#6
0
        protected void btDelete_Click(object sender, EventArgs e)
        {
            if (!HasSessionLose)
            {
                if ("" != hidID.Value)
                {
                    var ids  = GetIdList(hidID.Value.Split(new char[] { ',' }));
                    var list = RoleInstance.FindList(f => ids.Contains(f.id) && f.Delete == false);
                    foreach (var role in list)
                    {
                        role.Delete = true;
                        Update(role);

                        SaveHistory(new TB_AccountHistory
                        {
                            ActionId = ActionInstance.Find(f => f.Name.Equals("DeleteRole")).id,
                            ObjectA  = "[id=" + role.id + "] " + role.Name
                        });
                    }
                    // 更新默认角色
                    var dftRole = RoleInstance.Find(f => f.IsDefault == true && f.Delete == false);
                    foreach (var role in ids)
                    {
                        AccountInstance.ClearRoleInfo(role, null == dftRole ? 0 : dftRole.id);
                    }
                    ShowNotification("./role_list.aspx", "Success: You have delete " + ids.Count() + " role(s).");
                }
            }
        }
示例#7
0
        private void Edit()
        {
            // 记录历史
            var his = new TB_AccountHistory();

            his.Account  = Account.id;
            his.ActionId = ActionInstance.Find(f => f.Name.Equals("EditRole")).id;
            his.Ip       = Utility.GetClientIP(this.Context);

            var id   = int.Parse(Utility.Decrypt(hidID.Value));
            var role = RoleInstance.Find(f => f.id == id && f.Delete == false);

            role.Description     = txtDescription.Value.Trim();
            role.IsAdministrator = cbIsAdmin.Checked;
            role.IsDefault       = cbIsDefault.Checked;
            var name = txtName.Value.Trim();

            if (!role.Name.Equals(name))
            {
                his.ObjectA = "[id=" + role.id + "] " + role.Name + " to " + name;
            }
            else
            {
                his.ObjectA = "[id=" + role.id + "] " + role.Name;
            }
            role.Name = name;
            Update(role);

            SaveHistory(his);

            ShowNotification("./role_list.aspx", "Success: You have changed role \"" + role.Name + "\".", true);
        }
示例#8
0
        protected void btSave_Click(object sender, EventArgs e)
        {
            var role = GetRole();

            if (null != role)
            {
                string rights = "";
                foreach (TreeNode tn in tvMenus.CheckedNodes)
                {
                    var id = tn.NavigateUrl.Replace("#", "");
                    rights += "" == rights ? id : ("," + id);
                }
                RoleInstance.Update(f => f.id == role.id && f.Delete == false, action =>
                {
                    action.Permission = rights;
                });

                // 记录历史
                var his = new TB_AccountHistory();
                his.ActionId = ActionInstance.Find(f => f.Name.Equals("RolePermission")).id;
                his.Ip       = Utility.GetClientIP(this.Context);
                his.ObjectA  = "[id=" + role.id + "] " + role.Name;
                SaveHistory(his);

                ShowNotification("./role_list.aspx", "You have changed permission of role \"" + role.Name + "\".");
            }
        }
示例#9
0
        private void Edit(int id)
        {
            var obj = WorkInstance.Find(f => f.id == id && f.Deleted == false);

            if (null == obj)
            {
                ShowNotification("../service/as_work_dispatch.aspx", "No work exist.", false);
            }
            else
            {
                WorkInstance.Update(f => f.id == id && f.Deleted == false, act =>
                {
                    act.Description = description.Value;
                    act.Director    = director.Value.Trim();
                    if (!string.IsNullOrEmpty(end1.Value))
                    {
                        act.ScheduleEnd = DateTime.Parse(end1.Value.Trim());
                    }
                    if (!string.IsNullOrEmpty(start1.Value.Trim()))
                    {
                        act.ScheduleStart = DateTime.Parse(start1.Value);
                    }
                    act.Title = title.Value.Trim();
                });

                SaveHistory(new TB_AccountHistory()
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("EditWork")).id,
                    ObjectA  = WorkInstance.ToString(obj)
                });

                ShowNotification("../service/as_work_dispatch.aspx", "The work has changed.");
            }
        }
    public void CompleteAnimateAction()
    {
        // Action Complete callback
        if (_actionBeingExecuted != null)
        {
            _actionBeingExecuted.Template.CompleteAction(_actionBeingExecuted);
        }

        // Action sfx's
        if (_actionBeingExecuted.UserSfx != null)
        {
            ParticleSystem sfx = _actionBeingExecuted.UserSfx.GetNext();
            AttachSpecialEffect(sfx);
        }
        if (_actionBeingExecuted.TargetSfx != null)
        {
            ParticleSystem sfx = _actionBeingExecuted.TargetSfx.GetNext();
            _actionBeingExecuted.Target.AttachSpecialEffect(sfx);
        }

        // Move character back
        if (_mover != null && _actionBeingExecuted.MoveToAttackPosition)
        {
            _mover.GoBack();
        }

        // Reset action being executed
        _actionBeingExecuted = null;
    }
示例#11
0
        private void NewTerminal()
        {
            TB_Terminal t = null;

            // 如果没有输入Sim卡号码则查询是否具有相同终端号码的记录
            if (string.IsNullOrEmpty(txtSimcard.Value.Trim()))
            {
                t = TerminalInstance.Find(f => f.Number.Equals(txtNumber.Value.Trim()) && f.Delete == false);
            }
            else
            {
                // 如果有Sim卡号码输入则查询终端或Sim卡号码是否有相同记录存在
                t = TerminalInstance.Find(f => (f.Number.Equals(txtNumber.Value.Trim()) || f.Sim.Equals(txtSimcard.Value.Trim())) && f.Delete == false);
            }

            if (null != t)
            {
                ShowNotification("./terminal_register.aspx", "Terminal exist: " + TerminalInstance.ToString(t), false);
            }
            else
            {
                t = TerminalInstance.GetObject();
                BuildObject(t);
                TerminalInstance.Add(t);

                SaveHistory(new TB_AccountHistory
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("AddTerminal")).id,
                    ObjectA  = TerminalInstance.ToString(t)
                });

                ShowNotification("./terminal_list.aspx", "You added a new terminal: " + TerminalInstance.ToString(t));
            }
        }
 void Die()
 {
     _actionBeingExecuted = null;
     _mover.GoToMainPosition();
     _character.Buffs.ForEach(buff => buff.RemoveEffect());
     _animator.SetTrigger("Death");
 }
示例#13
0
        private void New()
        {
            var old = TrackerInstance.Find(f => f.SimCard.Equals(number.Value.Trim()) && f.Deleted == false);

            if (null == old)
            {
                var newOne = TrackerInstance.GetObject();
                newOne.SimCard   = number.Value.Trim();
                newOne.CarNumber = vehicle.Value.Trim();
                newOne.Director  = director.Value.Trim();
                TrackerInstance.Add(newOne);

                // 保存操作历史记录
                SaveHistory(new TB_AccountHistory()
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("AddTracker")).id,
                    ObjectA  = TrackerInstance.ToString(newOne)
                });
                ShowNotification("/service/as_trackers.aspx", "New tracker added.");
            }
            else
            {
                ShowNotification("/service/as_trackers.aspx", "Same number of " + number.Value.Trim() + " exists.", false);
            }
        }
示例#14
0
        private void EditTerminal()
        {
            var id = ParseInt(Utility.Decrypt(hidID.Value));
            var t  = TerminalInstance.Find(f => (f.Number.Equals(txtNumber.Value.Trim()) || f.Sim.Equals(txtSimcard.Value.Trim())) &&
                                           f.id != id && f.Delete == false);

            if (null == t)
            {
                t = TerminalInstance.Find(f => f.id == ParseInt(Utility.Decrypt(hidID.Value)));
                if (null != t)
                {
                    BuildObject(t);
                    Update(t);

                    SaveHistory(new TB_AccountHistory
                    {
                        ActionId = ActionInstance.Find(f => f.Name.Equals("EditTerminal")).id,
                        ObjectA  = TerminalInstance.ToString(t)
                    });
                    ShowNotification("./terminal_list.aspx", "You changed terminal: " + TerminalInstance.ToString(t));
                }
                else
                {
                    ShowNotification("./terminal_list.aspx", "Error: Cannot edit null object of Terminal.", false);
                }
            }
            else
            {
                ShowNotification("./terminal_register.aspx?key=" + Utility.UrlEncode(hidID.Value),
                                 "Error: New terminal number or sim card number has exists: " + TerminalInstance.ToString(t), false);
            }
        }
示例#15
0
 private void WriteActionInstance(ActionInstance actionInst, BinaryWriter spbifWriter, PageContext pageContext)
 {
     if (actionInst != null)
     {
         spbifWriter.Write((byte)11);
         spbifWriter.Write((byte)2);
         spbifWriter.Write(1);
         spbifWriter.Write((byte)3);
         if (actionInst.Label != null)
         {
             spbifWriter.Write((byte)4);
             spbifWriter.Write(actionInst.Label);
         }
         if (actionInst.Hyperlink != null)
         {
             ReportUrl hyperlink = actionInst.Hyperlink;
             if (hyperlink != null)
             {
                 Uri uri = hyperlink.ToUri();
                 if ((Uri)null != uri)
                 {
                     spbifWriter.Write((byte)6);
                     spbifWriter.Write(uri.AbsoluteUri);
                 }
             }
         }
         else if (actionInst.BookmarkLink != null)
         {
             spbifWriter.Write((byte)7);
             spbifWriter.Write(actionInst.BookmarkLink);
         }
         spbifWriter.Write((byte)255);
         spbifWriter.Write((byte)255);
     }
 }
示例#16
0
        private void NewAccount()
        {
            var account = AccountInstance.GetObject();

            BuildAccountInfo(account);
            // check the same login code
            var chk = AccountInstance.Find(f => f.Code.Equals(account.Code));

            if (null != chk)
            {
                ShowNotification("./account_add.aspx", "The login code \"" + account.Code + "\" is exist.", false);
            }
            else
            {
                AccountInstance.Add(account);

                // 保存历史记录
                SaveHistory(new TB_AccountHistory()
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("AddAccount")).id,
                    ObjectA  = "[id=" + account.id + "] " + account.Name + ", " + account.Code
                });

                ShowNotification("./account_add.aspx", "You add a new account: " + account.Name + "(" + account.Code + ").");
            }
        }
示例#17
0
    public bool recognizeSequence(ActionInstance inst)
    {
        if (_isProcessing)
        {
            return(false);
        }

        StopCoroutine("CheckThreadsCoroutine");

        _isProcessing = true;
        List <ActionData> actions = ActionDatabase.instance.actionsData;

        foreach (ActionData d in actions)
        {
            RecognitionThread w = new RecognitionThread(inst, d, stepConstraints);
            Thread            t = new Thread(new ThreadStart(w.process));
            _recognitionThreads.Add(t);
            _recognitionWorkers.Add(w);
            t.Start();
        }

        StartCoroutine(CheckThreadsCoroutine());

        return(true);
    }
示例#18
0
        private RPLActionInfo WriteActionInstance(ActionInstance actionInst, PageContext pageContext)
        {
            if (actionInst == null)
            {
                return(null);
            }
            RPLActionInfo rPLActionInfo = new RPLActionInfo(1);
            RPLAction     rPLAction     = null;

            rPLAction = ((actionInst.Label == null) ? new RPLAction() : new RPLAction(actionInst.Label));
            if (actionInst.Hyperlink != null)
            {
                ReportUrl hyperlink = actionInst.Hyperlink;
                if (hyperlink != null)
                {
                    Uri uri = hyperlink.ToUri();
                    if ((Uri)null != uri)
                    {
                        rPLAction.Hyperlink = uri.AbsoluteUri;
                    }
                }
            }
            else if (actionInst.BookmarkLink != null)
            {
                rPLAction.BookmarkLink = actionInst.BookmarkLink;
            }
            rPLActionInfo.Actions[0] = rPLAction;
            return(rPLActionInfo);
        }
示例#19
0
        private void NewType()
        {
            var t = TypeInstance.GetObject();

            BuildType(t);
            var check = TypeInstance.Find(f => f.Name.Equals(t.Name));

            if (null != check)
            {
                ShowNotification("./equipment_type.aspx", "Cannot add new Equipment type, The name of \"" + t.Name + "(" + t.Code + ")\" is exist.", false);
                return;
            }
            else
            {
                TypeInstance.Add(t);

                // 保存历史记录
                SaveHistory(new TB_AccountHistory
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("AddEquipmentType")).id,
                    ObjectA  = "[id=" + t.id + "] " + t.Name + ", " + t.Code
                });

                ShowNotification("./equipment_type.aspx", "You have added a new Equipment type: " + t.Name + "(" + t.Code + ").");
            }
        }
 public void InterruptAnimateAction()
 {
     if (!_animator.GetCurrentAnimatorStateInfo(0).IsName("Death"))
     {
         _animator.SetTrigger("Idle");
     }
     _actionBeingExecuted = null;
 }
示例#21
0
    public RecognitionThread(ActionInstance seq, ActionData subseq, mIndex[] stepConstraints)
    {
        _seq    = seq;
        _subseq = subseq;
        dtw     = new DTW(stepConstraints);

        _isDone = false;
    }
示例#22
0
        protected void btDelete_Click(object sender, EventArgs e)
        {
            // 删除设备
            var id        = ParseInt(Utility.Decrypt(_key));
            var equipment = EquipmentInstance.Find(f => f.id == id);

            if (null == equipment)
            {
                ShowNotification("./equipment_setting.aspx?key=" + Utility.UrlEncode(_key), "Not found the equipment", false);
            }
            else
            {
                string number = EquipmentInstance.GetFullNumber(equipment);
                if ((int?)null != equipment.Terminal)
                {
                    var ter = equipment.TB_Terminal.Number;
                    // 解绑终端
                    TerminalInstance.Update(f => f.id == equipment.Terminal, act =>
                    {
                        act.HasBound = false;
                    });
                    // 保存解绑终端历史
                    SaveHistory(new TB_AccountHistory()
                    {
                        ActionId = ActionInstance.Find(f => f.Name.Equals("Unbind")).id,
                        ObjectA  = "unbind terminal(delete equipment) " + ter + " and equipment " + EquipmentInstance.GetFullNumber(equipment)
                    });
                }
                // 更新Deleted=true
                EquipmentInstance.Update(f => f.id == equipment.id, act => {
                    act.Deleted        = true;
                    act.GpsAddress     = "";
                    act.IP             = "";
                    act.LastAction     = "";
                    act.LastActionBy   = "";
                    act.LastActionTime = null;
                    act.Latitude       = 0.0;
                    act.Longitude      = 0.0;
                    act.OnlineStyle    = null;
                    act.OnlineTime     = null;
                    act.Port           = 0;
                    act.Rpm            = 0;
                    act.Runtime        = 0;
                    act.ServerName     = "";
                    act.Signal         = 0;
                    act.Socket         = 0;
                    act.Terminal       = null;
                    act.Voltage        = "G0000";
                });
                // 保存删除设备历史
                SaveHistory(new TB_AccountHistory()
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("Unbind")).id,
                    ObjectA  = "delete equipment " + number
                });
                ShowNotification("./equipment_inquiry.aspx", "You have deleted a equipment: " + number);
            }
        }
示例#23
0
 void _playAction(ActionInstance data)
 {
     AgentController[] agents = (AgentController[])FindObjectsOfType(typeof(AgentController));
     foreach (AgentController agent in agents)
     {
         agent.playOnce = playOnce;
         agent.StartAction(data);
     }
 }
示例#24
0
        private static void Subscribe(int id, ActionInstance instance, Dictionary <int, List <ActionInstance> > dictionary)
        {
            if (!dictionary.ContainsKey(id))
            {
                dictionary.Add(id, new List <ActionInstance>());
            }

            dictionary[id].Add(instance);
        }
示例#25
0
        protected void btCheckoutStorage_Click(object sender, EventArgs e)
        {
            var id        = int.Parse(hidCheckEquipmentId.Value);
            var equipment = EquipmentInstance.Find(f => f.id == id && f.Deleted == false);

            if (null == equipment)
            {
                ShowNotification("./equipment_checkout.aspx", "Cannot find the equipment.", false);
                //return;
            }
            else
            {
                DateTime begin;
                try { begin = DateTime.Parse(outTime.Value.Trim()); }
                catch { begin = DateTime.Now; }

                EquipmentInstance.Update(f => f.id == equipment.id, act =>
                {
                    // 出厂时,如果是普通车辆,则直接划为车辆状态,不参与出库/入库流程
                    if (act.TB_EquipmentModel.TB_EquipmentType.IsVehicle == true)
                    {
                        act.Status = StatusInstance.Find(f => f.IsItVehicle == true).id;
                    }
                    else
                    {
                        act.Status = int.Parse(ddlOuttype.SelectedValue);
                    }
                    act.Customer = int.Parse(hidCheckCustomerId.Value);
                    // 出库时的总运转时间
                    act.OutdoorWorktime = equipment.Runtime;
                    // 出库的时间
                    act.OutdoorTime = begin;
                    // 出库后库存信息置为null
                    act.Warehouse = null;
                });
                equipment = EquipmentInstance.Find(f => f.id == equipment.id);
                // 保存出库历史记录
                var history = StoreInstance.GetObject();
                history.Equipment = equipment.id;
                history.Status    = equipment.Status;
                history.Stocktime = begin;
                // 设备的出入库次数,入库时增1,出库时不变
                history.StoreTimes = equipment.StoreTimes;
                history.Warehouse  = null;
                StoreInstance.Add(history);

                // 保存操作历史记录
                SaveHistory(new TB_AccountHistory()
                {
                    ActionId = ActionInstance.Find(f => f.Name.Equals("Deliver")).id,
                    ObjectA  = EquipmentInstance.GetFullNumber(equipment) +
                               " check out(" + ddlOuttype.SelectedItem.Text + ") to: " + equipment.TB_Customer.Name
                });

                ShowNotification("./equipment_checkout.aspx", "\"" + EquipmentInstance.GetFullNumber(equipment) + "\" has delivered.");
            }
        }
示例#26
0
    public void process()
    {
        ActionInstance inst = _subseq.actionInstances[0];

        warppath = dtw.warpSubsequenceDTW(_seq.poses.ToArray(), inst.poses.ToArray());

        Debug.Log("worker thread done " + _subseq.actionId + ", cost " + dtw.getWarpPathCost());

        _isDone = true;
    }
    IEnumerator StartActionCoroutine(ActionInstance data)
    {
        if (isMoving)
        {
            yield return(StartCoroutine(StopActionCoroutine()));
        }

        isMoving = true;
        StartCoroutine(PerformCoroutine(data));
    }
    IEnumerator StartActionCoroutine(ActionInstance data)
    {
        if (isMoving)
        {
            yield return StartCoroutine(StopActionCoroutine());
        }

        isMoving = true;
        StartCoroutine(PerformCoroutine(data));
    }
示例#29
0
    internal List <ActionInstance> RecursiveBindings(ActionInstance instanceBase, List <CharModel> openCandidateList, List <RoleBinding> RoleSet, int depth = 0)//the ActionInstance passed at the base of the recursion should only have the actor role bound
    {
        List <ActionInstance> boundInstances = new List <ActionInstance>();

        if (RoleSet.Count == 0 || depth == RoleSet.Count)
        {
            return(boundInstances);
        }
        foreach (var character in openCandidateList)
        {
            ActionInstance RecursionInstance = new ActionInstance(instanceBase);
            RecursionInstance.InvolvedCharacters.Add(RoleSet[depth].role, character.Character);
            bool isValidCandidate = true;
            foreach (var condition in RoleSet[depth].conditions.conditions)
            {
                if (!condition.isMet(RecursionInstance.InvolvedCharacters, worldModel))//character did not meet a condition for this role
                {
                    isValidCandidate = false;
                    break;
                }
            }
            if (isValidCandidate)
            {
                var recursionOpenlist = new List <CharModel>(openCandidateList);
                recursionOpenlist.Remove(character);
                if (depth == RoleSet.Count - 1)//this is a completely bound instance, add it to the list to be returned
                {
                    //RecursionInstance.RunControlledPreferenceRules();
                    boundInstances.Add(RecursionInstance);
                }
                var additionalBindings = RecursiveBindings(RecursionInstance, recursionOpenlist, RoleSet, depth + 1);
                if (additionalBindings == null)
                {
                    return(null);                            //action has been aborted
                }
                boundInstances.AddRange(additionalBindings); //this will contain finished bindings only
            }
        }
        if (boundInstances.Count > Electrum.MaxBindingCandidatesAbort)
        {
            Debug.LogError("Error : " + name + " found more possible bindings combinations than the " + Electrum.MaxBindingCandidatesAbort + " limit on the " + instanceBase.Template.name + " action. Action discarded.");

            return(null);
        }
        if (!instanceBase.Template.ActorControlledRoles[depth].Mandatory && depth != instanceBase.Template.ActorControlledRoles.Count - 1)//creates an extra branch with current depth's role unassigned if it is not mandatory
        {
            var additionalBindings = RecursiveBindings(instanceBase, openCandidateList, RoleSet, depth + 1);
            if (additionalBindings == null)
            {
                return(null);                           //action is aborted
            }
            boundInstances.AddRange(additionalBindings);
        }
        return(boundInstances);//should contain all completely bound possible instances of the action. If empty it means no set of characters fullfilled all conditions
    }
示例#30
0
    private List <ActionInstance> FindControlledBindings(Action action)//Looks for all valid bindings that are under the character control, Proably a major memory hog on some "domains" and also slow
    {
        var unboundInstance = new ActionInstance(action, new Dictionary <Role, Character>());

        unboundInstance.InvolvedCharacters.Add(Role.actor, this);//binds the acting character
        var OpenCandidateList = new List <CharModel>(worldModel.Characters.Values);

        OpenCandidateList.Remove(worldModel.Characters[this]);
        //This is one of the point where we could do manual memory management, this is going to make a LOT of garbage
        return(RecursiveBindings(unboundInstance, OpenCandidateList, action.ActorControlledRoles));
    }
示例#31
0
    private float EvaluateBindingsAffinity(List <ActionInstance> possibleBindingsinstances)
    {
        float Attractiveness = 1.0f;

        for (int i = 0; i < possibleBindingsinstances.Count; i++)
        {
            ActionInstance binding = possibleBindingsinstances[i];
            Attractiveness *= Mathf.Pow(binding.Affinity, binding.expectedProbability);
        }
        return(Attractiveness);
    }
    // perform next pose
    //  update joint rotation or position based on which type of skeleton is used based on user input
    void perform(ActionInstance data)
    {
        Pose p = data.poses[currpose];

        for(int i = 0; i < p.joint_locations.Count; i++)
        {
            if (joints[i] != null)
            {
                if (xyzData)
                {
                    joints[i].UpdatePosition((Vector3)p.joint_locations[i]);
                }
                else
                {
                    joints[i].UpdateLocalRotation(p.getJointRot(joints[i].jointType));
                }
            }
        }
    }
    public bool recognizeSequence(ActionInstance inst)
    {
        if (_isProcessing)	return false;

        StopCoroutine("CheckThreadsCoroutine");

        _isProcessing = true;
        List<ActionData> actions = ActionDatabase.instance.actionsData;
        foreach(ActionData d in actions)
        {
            RecognitionThread w = new RecognitionThread(inst, d, stepConstraints);
            Thread t = new Thread(new ThreadStart(w.process));
            _recognitionThreads.Add(t);
            _recognitionWorkers.Add(w);
            t.Start();
        }

        StartCoroutine(CheckThreadsCoroutine());

        return true;
    }
    IEnumerator PerformCoroutine(ActionInstance data)
    {
        while(isMoving)
        {
            yield return new WaitForSeconds(1.0f/framesPerSecond);
            perform(data);

        //			print(currpose);

            currpose++;

            if (currpose >= data.poses.Count)
            {
                currpose = 0;
                if (playOnce)
                {
                    break;
                }
            }
        }
    }
 public void StartAction(ActionInstance data)
 {
     StartCoroutine(StartActionCoroutine(data));
 }
    void OnRecognitionDone(ActionData matchedinst, ActionInstance insttomatch, DTW dtw)
    {
        ActionInstance warpedinst = new ActionInstance();
        foreach(mIndex idx in dtw.WarpPath)
        {
            warpedinst.poses.Add(insttomatch.poses[idx.x]);
        }

        print("-- cost " + matchedinst.actionId + " " + dtw.getWarpPathCost());

        onRecognitionFinished(matchedinst.actionId, warpedinst);
    }
    public RecognitionThread(ActionInstance seq, ActionData subseq, mIndex[] stepConstraints)
    {
        _seq = seq;
        _subseq = subseq;
         	dtw = new DTW(stepConstraints);

        _isDone = false;
    }
 void OnRecognitionEnd(string actionId, ActionInstance newinst)
 {
     _message = "Recognition Done\n";
     _message += " - Class: " + actionId + "\n";
     _playAction(newinst);
 }
 void _playAction(ActionInstance data)
 {
     AgentController[] agents = (AgentController[])FindObjectsOfType(typeof(AgentController));
     foreach(AgentController agent in agents)
     {
         agent.playOnce = playOnce;
         agent.StartAction(data);
     }
 }
    void OnGUI()
    {
        GUI.skin = guiSkin;

        if (fileBrowser != null)
        {
            fileBrowser.OnGUI();
        }

        if (_displayMenu)
        {
            GUI.Box(new Rect(0.2f*Screen.width, 0.2f*Screen.height, 0.6f*Screen.width, 0.6f*Screen.height), "");

            GUILayout.BeginArea(new Rect(0.2f*Screen.width, 0.2f*Screen.height, 0.6f*Screen.width, 0.6f*Screen.height));

                GUILayout.BeginVertical();

                    // action id
                    GUILayout.BeginHorizontal();
                        GUILayout.Label("Action Name");
                        actionName = GUILayout.TextField(actionName, GUILayout.MinWidth(0.4f*Screen.width), GUILayout.MaxWidth(0.4f*Screen.width));
                    GUILayout.EndHorizontal();

                    // action instance
                    GUILayout.BeginHorizontal();
                        GUILayout.Label("Action File path");
                        if (GUILayout.Button(actionFileName, GUILayout.MinWidth(0.4f*Screen.width), GUILayout.MaxWidth(0.4f*Screen.width)))
                        {
                            fileBrowser = new FileBrowser(
                                                            new Rect(0.2f*Screen.width, 0.2f*Screen.height, 0.6f*Screen.width, 0.6f*Screen.height),
                                                            "Action File",
                                                            actionFileName,
                                                            onActionChosen);
                            fileBrowser.SelectionPattern = "*.txt";
                            _displayMenu = false;
                        }
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                        if (GUILayout.Button("Perform Action", GUILayout.MinWidth(0.4f*Screen.width), GUILayout.MaxWidth(0.4f*Screen.width)))
                        {
                            ActionInstance data = new ActionInstance(actionFileName);
                            _playAction(data);
                            setMenuVisible(false);
                        }
                        playOnce = GUILayout.Toggle(playOnce, "Once");
                    GUILayout.EndHorizontal();

                    if (GUILayout.Button("Add Action"))
                    {
                        // create action data if not exist in database
                        // add new action instance to actiondata
                        // save action data to database
                        ActionData data = ActionDatabase.instance.getAction(actionName);
                        if (data == null)
                        {
                            data = new ActionData(actionName);
                        }

                        ActionInstance actionInst = new ActionInstance(actionFileName);
                        data.actionInstances.Add(actionInst);
                        ActionDatabase.instance.addAction(data);

                        setMenuVisible(false);
                    }

                    if (GUILayout.Button("Remove Action"))
                    {
                        ActionDatabase.instance.removeAction(actionName);
                        setMenuVisible(false);
                    }

                    if (GUILayout.Button("Recognize Action"))
                    {
                        // recognize a sequence
                        //  if nothing exists or no matching subsequence, add as a new sequence
                        //  otherwise, add new subsequence to data

                        if (ActionRecognizer.instance.recognizeSequence(new ActionInstance(actionFileName)))
                        {
                            _message = "Performing Recognition...";
                        }
                        else
                        {
                            _message = "Recognition already in progress";
                        }
                        setMenuVisible(false);
                    }

                GUILayout.EndVertical();
            GUILayout.EndArea();
        }

        GUI.Box(new Rect(0,0,0.2f*Screen.width,0.2f*Screen.height), "");
        GUILayout.BeginArea(new Rect(0,0,0.2f*Screen.width,0.2f*Screen.height));
            GUILayout.Label(_actionsList+"\n--\n"+_message);
        GUILayout.EndArea();
    }