Exemplo n.º 1
0
        void RemoveTool(PaintGunItem item, int index)
        {
            ToolRemoved?.Invoke(item);

            Tools.RemoveAtFast(index);
            itemPool.Return(item);

            if (Tools.Count == 0)
            {
                SetUpdateMethods(UpdateFlags.UPDATE_DRAW, false);

                if (spawnedRifles.Count == 0)
                {
                    SetUpdateMethods(UpdateFlags.UPDATE_AFTER_SIM, false);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Tool unRegister
        /// </summary>
        /// <param name="info">Tool information</param>
        /// <returns>result</returns>
        public bool UnRegisterTool(HcToolInfo info)
        {
            var lockTakenScan     = false;
            var lockTakenRegister = false;

            try
            {
                // lock
                Monitor.TryEnter(ScannedTools, Timeout, ref lockTakenScan);
                Monitor.TryEnter(RegisteredTools, Timeout, ref lockTakenRegister);
                // check lock taken
                if (!lockTakenScan || !lockTakenRegister)
                {
                    return(false);
                }

                // get register tool
                var register = FindToolInfo(RegisteredTools, info.Mac);
                if (register == null)
                {
                    return(false);
                }
                // remove register tool
                RegisteredTools.Remove(register);
                // tool removed event
                ToolRemoved?.Invoke(info);

                return(true);
            }
            finally
            {
                // unlock
                if (lockTakenScan)
                {
                    Monitor.Exit(ScannedTools);
                }
                if (lockTakenRegister)
                {
                    Monitor.Exit(RegisteredTools);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Handles the <see cref="Tool.Disposed"/> event of a <see cref="Tool"/> in this <see cref="ToolManager"/>.
        /// </summary>
        /// <param name="sender">The <see cref="Tool"/> the event came from.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        void tool_Disposed(Tool sender, EventArgs e)
        {
            if (sender == null)
            {
                Debug.Fail("How the hell was the sender null?");
                return;
            }

            try
            {
                // Remove the event hooks
                SetToolListeners(sender, false);

                // Remove the tool
                var wasRemoved = _tools.Remove(sender.GetType());

                if (wasRemoved)
                {
                    if (ToolRemoved != null)
                    {
                        ToolRemoved.Raise(this, EventArgsHelper.Create(sender));
                    }
                }

                Debug.Assert(wasRemoved);
            }
            catch (Exception ex)
            {
                const string errmsg = "Failed to remove tool `{0}`. Exception: {1}";
                if (log.IsErrorEnabled)
                {
                    log.ErrorFormat(errmsg, sender, ex);
                }
                Debug.Fail(string.Format(errmsg, sender, ex));
            }
        }