public override void OnInspectorGUI()
    {
        rtObject me = target as rtObject;

        GUILayout.Space(20);
        EditorGUILayout.PropertyField(mat, new GUIContent("mat"));
        EditorGUILayout.PropertyField(type, new GUIContent("type"));
        if (me.type == rtObject.ObjType.Sphere)
        {
            me.isPlane  = GUILayout.Toggle(me.isPlane, "isPlane");
            me.isMoving = GUILayout.Toggle(me.isMoving, "isMoving");
        }
        else
        {
        }

        if (GUILayout.Button("preview"))
        {
            me.DoPreview();
        }

        //if(GUILayout.Button("Test"))
        //{
        //    me.test();
        //}

        serializedObject.ApplyModifiedProperties();
    }
            public sealed override object Clone()
            {
                LinkSystemObject lobj = (LinkSystemObject)value;

                rtObject clone = new rtObject((lobj).Clone(),
                                              null
                                              );

                RunTimeScope scope =
                    new RunTimeScope(null, objScope.blockId, null,
                                     clone, RunTimeScopeType.objectinstance);

                clone.objScope = scope;

                return(clone);
            }
示例#3
0
        public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
//
            //((rtObject)thisObj).value.memberData[0].directSet(newvalue);

            string pattern = TypeConverter.ConvertToString(argements[0],stackframe,token);
            string options = TypeConverter.ConvertToString(argements[1],stackframe,token);

            string pv = "/";

            if (pattern != null)
            {
                pv = pv + pattern;
            }

            pv = pv + "/";



            var Options = System.Text.RegularExpressions.RegexOptions.None;

            if (options != null)
            {
                pv = pv + options;

                if (options.IndexOf('s') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[1].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.Singleline;
                }

                if (options.IndexOf('x') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[2].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace;
                }

                if (options.IndexOf('g') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[3].directSet(rtBoolean.True);
                }

                if (options.IndexOf('i') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[4].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.IgnoreCase;
                }

                if (options.IndexOf('m') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[5].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.Multiline;
                }
            }

            ((rtObjectBase)thisObj).value.memberData[0].directSet(new rtString(pv));

            if (pattern != null)
            {
                ((rtObjectBase)thisObj).value.memberData[6].directSet(new rtString(pattern));
            }
            else
            {
                ((rtObjectBase)thisObj).value.memberData[6].directSet(rtNull.nullptr);
            }

            ((rtObjectBase)thisObj).value.memberData[7].directSet(new rtNumber(0));

            try
            {
                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern, Options);
                HostedObject hobj = new HostedObject(stackframe.player.swc.ObjectClass);
                hobj.hosted_object = regex;
                rtObject rtobj = new rtObject(hobj, null);

                ((rtObjectBase)thisObj).value.memberData[8].directSet(rtobj);


                success = true;
                returnSlot.directSet(rtUndefined.undefined);
            }
            catch (ArgumentException ex)
            {
                success = false;
                stackframe.throwArgementException(token, ex.Message);
            }

            //((HostedObject)((rtObject)thisObj).value).hosted_object = regex;
        }
        public static void forin_get_enumerator(StackFrame frame, OpStep step, RunTimeScope scope)
        {
            var player = frame.player;

            SLOT slot = step.reg.getSlot(scope,frame);

            ASBinCode.rtti.HostedDynamicObject saveObj = new HostedDynamicObject(player.swc.ObjectClass);
            rtObject save = new rtObject(saveObj,null);

            slot.directSet(save);

            var obj = step.arg1.getValue(scope,frame);

            if (obj.rtType > RunTimeDataType.unknown)
            {
                rtObject rtObj = (rtObject)obj;

                if (ClassMemberFinder.isInherits(rtObj.value._class,
                                                 player.swc.primitive_to_class_table[RunTimeDataType.rt_array]))
                {
                    rtArray arr = (rtArray)rtObj.value.memberData[0].getValue();
                    saveObj.hosted_object = getArrayForIn(arr.innerArray);
                }
                else if (player.swc.dict_Vector_type.ContainsKey(rtObj.value._class))
                {
                    saveObj.hosted_object = getArrayForIn(((Vector_Data)((HostedObject)rtObj.value).hosted_object).innnerList);
                }
                else if (ClassMemberFinder.isImplements(rtObj.value._class,player.swc.IEnumerableInterface))
                {
                    //***调用getIEnumerator方法****
                    var movenext = ClassMemberFinder.find(
                        frame.player.swc.IEnumerableInterface,"getEnumerator",
                        frame.player.swc.IEnumerableInterface);

                    var method = ((InterfaceMethodGetter)movenext.bindField).getMethod(
                        rtObj);

                    //***调用方法***
                    var funCaller = player.funcCallerPool.create(frame,step.token);
                    //funCaller.releaseAfterCall = true;
                    funCaller.SetFunction((rtFunction)method); ((rtFunction)method).Clear();
                    funCaller.loadDefineFromFunction();
                    if (!funCaller.createParaScope())
                    {
                        return;
                    }

                    funCaller._tempSlot  = frame._tempSlot1;
                    funCaller.returnSlot = frame._tempSlot1;

                    BlockCallBackBase cb = frame.player.blockCallBackPool.create();
                    cb.setCallBacker(D_getEnumerator_callbacker);
                    cb.step  = step;
                    cb.args  = frame;
                    cb.scope = scope;

                    funCaller.callbacker = cb;
                    funCaller.call();

                    return;
                }
                else if (ClassMemberFinder.isImplements(
                             rtObj.value._class,player.swc.IEnumeratorInterface))
                {
                    saveObj.hosted_object = rtObj;
                }
                else
                {
                    IEnumerator <RunTimeValueBase> forinenum = getForinIEnumerator(player,rtObj.value,frame,step,scope);
                    saveObj.hosted_object = forinenum;
                }
            }

            frame.endStep();
        }