public void OpenAt(Vector2 pos, IContextItem context)
    {
        transform.position   = pos;
        group.alpha          = 1;
        group.interactable   = true;
        group.blocksRaycasts = true;
        transform.SetAsLastSibling();

        selected = context;
    }
        public override void Execute(Stack <Value> stack, Dictionary <string, object> context)
        {
            object val;

            if (!Find(context, out val))
            {
                stack.Push(new Value(0));
                return;
            }

            Expression expr = val as Expression;

            if (expr != null)
            {
                stack.Push(expr.Evaluate(context));
            }
            else
            {
                IContextItem item = val as IContextItem;

                if (item != null)
                {
                    stack.Push(item.Value);
                }
                else if (val.GetType() == typeof(double[]))
                {
                    stack.Push(new Value((double[])val));
                }
                else if (val is Value)
                {
                    stack.Push((Value)val);
                }
                else
                {
                    try
                    {
                        stack.Push(new Value(Convert.ToDouble(val)));
                    }
                    catch (InvalidCastException)
                    {
                        Console.Error.WriteLine("Failed to convert `{0}' to double!", val);
                        stack.Push(new Value(0));
                    }
                }
            }
        }
        public bool Find(Dictionary <string, object> context, out object obj)
        {
            string ident;

            obj = null;

            for (int i = 0; i < Identifier.Length - 1; ++i)
            {
                ident = Identifier[i];

                if (!context.ContainsKey(ident))
                {
                    return(false);
                }

                IContextItem item = context[ident] as IContextItem;

                if (item != null)
                {
                    context = item.Members;
                }
                else
                {
                    context = null;
                }

                if (context == null)
                {
                    return(false);
                }
            }

            ident = Identifier[Identifier.Length - 1];

            if (!context.ContainsKey(ident))
            {
                return(false);
            }

            obj = context[ident];
            return(true);
        }
示例#4
0
 public void Open(IContextItem selected)
 {
     this.selected = selected;
     gameObject.SetActive(true);
 }
 public void ShowContextMenu(IContextItem sceneHierarcyItem, Vector2 position)
 {
     RemoveContextMenu.OpenAt(position, sceneHierarcyItem);
 }