示例#1
0
 protected override void AwakeOverride()
 {
     WindowType = RuntimeWindowType.SaveFile;
     base.AwakeOverride();
     m_localization = IOC.Resolve <ILocalization>();
     IOC.RegisterFallback <IOpenFileDialog>(this);
 }
        protected override void OnEditorExist()
        {
            base.OnEditorExist();

            m_editor = IOC.Resolve <IRTE>();

            m_compiler = new Complier();
            IOC.RegisterFallback(m_compiler);

            if (m_scriptManager == null)
            {
                m_scriptManager = gameObject.AddComponent <RuntimeScriptsManager>();
                m_scriptManager.AddReference(typeof(IRTE).Assembly.Location);
                m_scriptManager.AddReference(typeof(ILocalization).Assembly.Location);
                m_scriptManager.AddReference(typeof(IRuntimeEditor).Assembly.Location);
                m_scriptManager.AddReference(typeof(BHRoot).Assembly.Location);
                m_scriptManager.AddReference(typeof(VirtualizingTreeView).Assembly.Location);
                m_scriptManager.AddReference(typeof(RTSLVersion).Assembly.Location);
                m_scriptManager.AddReference(typeof(TextMeshProUGUI).Assembly.Location);
            }

            Subscribe();

            IRTEAppearance   appearance = IOC.Resolve <IRTEAppearance>();
            List <AssetIcon> icons      = appearance.AssetIcons.ToList();

            icons.Add(new AssetIcon {
                AssetTypeName = typeof(RuntimeTextAsset).FullName + Ext, Icon = Resources.Load <Sprite>("RTE_Script")
            });
            appearance.AssetIcons = icons.ToArray();
            Register();
        }
        private void Awake()
        {
            m_ligthIntensityDefault = RenderPipelineInfo.Type == RPType.Standard ? 1 : 2;
            m_shadowStrengthDefault = RenderPipelineInfo.Type == RPType.Standard ? 1 : 0.75f;

            //simplified user's hardware configuration evaluation
            if (SystemInfo.graphicsMemorySize > 4096)
            {
                m_graphicsQualityDefault = GraphicsQuality.High;
            }
            else if (SystemInfo.graphicsMemorySize > 2048)
            {
                m_graphicsQualityDefault = GraphicsQuality.Medium;
            }
            else
            {
                m_graphicsQualityDefault = GraphicsQuality.Low;
            }

            IOC.RegisterFallback <ISettingsComponent>(this);
            m_wm                  = IOC.Resolve <IWindowManager>();
            m_wm.AfterLayout     += OnAfterLayout;
            m_wm.WindowCreated   += OnWindowCreated;
            m_wm.WindowDestroyed += OnWindowDestoryed;
        }
        protected override void Awake()
        {
            base.Awake();
            m_editor = IOC.Resolve <IRuntimeEditor>();

            m_pivotPoint           = new GameObject("MeshEditorPivotPoint");
            m_pivotPoint.hideFlags = HideFlags.HideInHierarchy;
            m_pivotPoint.transform.SetParent(transform);
            ExposeToEditor exposeToEditor = m_pivotPoint.AddComponent <ExposeToEditor>();

            exposeToEditor.CanInspect      = false;
            exposeToEditor.CanDelete       = false;
            exposeToEditor.CanDuplicate    = false;
            exposeToEditor.CanRename       = false;
            exposeToEditor.CanCreatePrefab = false;

            LockAxes la = m_pivotPoint.AddComponent <LockAxes>();

            la.PositionZ          = true;
            la.RotationX          = la.RotationY = la.RotationScreen = la.RotationFree = true;
            la.ScaleZ             = true;
            la.PivotRotation      = true;
            la.PivotRotationValue = RuntimePivotRotation.Local;

            IOC.RegisterFallback <IMeshEditor>(this);

            if (m_editor != null)
            {
                m_editor.Selection.SelectionChanged += OnEditorSelectionChanged;
            }
        }
        protected override void OnEditorExist()
        {
            base.OnEditorExist();

            m_editor = IOC.Resolve <IRTE>();

            m_compiler = new Complier();
            IOC.RegisterFallback(m_compiler);

            if (m_scriptManager == null)
            {
                m_scriptManager = gameObject.AddComponent <RuntimeScriptsManager>();
            }

            Subscribe();

            IRTEAppearance   appearance = IOC.Resolve <IRTEAppearance>();
            List <AssetIcon> icons      = appearance.AssetIcons.ToList();

            icons.Add(new AssetIcon {
                AssetTypeName = typeof(RuntimeTextAsset).FullName + Ext, Icon = Resources.Load <Sprite>("RTE_Script")
            });
            appearance.AssetIcons = icons.ToArray();
            Register();
        }
 private void Awake()
 {
     IOC.RegisterFallback <ISettingsComponent>(this);
     m_wm                  = IOC.Resolve <IWindowManager>();
     m_wm.AfterLayout     += OnAfterLayout;
     m_wm.WindowCreated   += OnWindowCreated;
     m_wm.WindowDestroyed += OnWindowDestoryed;
 }
示例#7
0
 private void Awake()
 {
     m_editor = IOC.Resolve <IRTE>();
     IOC.RegisterFallback <ITerrainTool>(this);
     m_cutoutMaskRenderer = IOC.Resolve <ITerrainCutoutMaskRenderer>();
     m_cutoutMaskRenderer.ObjectImageLayer = m_editor.CameraLayerSettings.ResourcePreviewLayer;
     Enabled = false;
 }
示例#8
0
        protected override void AwakeOverride()
        {
            IOC.RegisterFallback <ISelectObjectDialog>(this);
            WindowType = RuntimeWindowType.SelectObject;
            base.AwakeOverride();

            m_localization = IOC.Resolve <ILocalization>();
        }
        protected override void AwakeOverride()
        {
            IOC.RegisterFallback <IEditRuntimeScriptDialog>(this);
            WindowType = RuntimeWindowType.Custom;
            base.AwakeOverride();

            m_project       = IOC.Resolve <IProject>();
            m_scriptManager = IOC.Resolve <IRuntimeScriptManager>();
        }
示例#10
0
 protected override void OnEditorExist()
 {
     base.OnEditorExist();
     m_editor = IOC.Resolve <IRTE>();
     IOC.RegisterFallback <ITerrainTool>(this);
     m_cutoutMaskRenderer = IOC.Resolve <ITerrainCutoutMaskRenderer>();
     m_cutoutMaskRenderer.ObjectImageLayer = m_editor.CameraLayerSettings.ResourcePreviewLayer;
     ActiveTerrain = null;
 }
 protected void Awake()
 {
     m_wm                   = IOC.Resolve <IWindowManager>();
     m_editor               = IOC.Resolve <IRTE>();
     m_selection            = new RuntimeSelection(m_editor);
     m_selection.EnableUndo = false;
     IOC.RegisterFallback <ICustomSelectionComponent>(this);
     Enabled = false;
 }
示例#12
0
        private void Awake()
        {
            if (RenderPipelineInfo.Type != RPType.HDRP)
            {
                Destroy(this);
                return;
            }

            IOC.RegisterFallback <IRenderPipelineCameraUtility>(this);
        }
示例#13
0
 private void Awake()
 {
     m_editor                   = IOC.Resolve <IRTE>();
     m_localization             = IOC.Resolve <ILocalization>();
     m_project                  = IOC.Resolve <IProject>();
     m_project.DeleteCompleted += OnDeleteProjectItemCompleted;
     m_editorsMap               = IOC.Resolve <IEditorsMap>();
     m_typeMap                  = IOC.Resolve <ITypeMap>();
     IOC.RegisterFallback <IRuntimeScriptManager>(this);
 }
        protected override void AwakeOverride()
        {
            base.AwakeOverride();

            m_registerAssetDB = () => (IAssetDB)AssetDB;
            m_registerIDMap   = () => (IIDMap)AssetDB;

            IOC.RegisterFallback(m_registerAssetDB);
            IOC.RegisterFallback(m_registerIDMap);
        }
示例#15
0
 private static void Init()
 {
     IOC.RegisterFallback(() => Instance.m_typeMap);
     IOC.RegisterFallback(() => Instance.m_objectFactory);
     IOC.RegisterFallback(() => Instance.m_serializer);
     IOC.RegisterFallback(() => Instance.m_storage);
     IOC.RegisterFallback(() => Instance.m_assetDB);
     IOC.RegisterFallback <IIDMap>(() => Instance.m_assetDB);
     IOC.RegisterFallback(() => Instance.m_project);
     IOC.RegisterFallback(() => Instance.m_shaderUtil);
 }
示例#16
0
        protected override void AwakeOverride()
        {
            WindowType = RuntimeWindowType.ProjectTree;
            base.AwakeOverride();
            if (Editor == null)
            {
                Debug.LogError("Editor is null");
                return;
            }

            if (TreeViewPrefab == null)
            {
                Debug.LogError("TreeViewPrefab is null");
                return;
            }

            m_project      = IOC.Resolve <IProject>();
            m_wm           = IOC.Resolve <IWindowManager>();
            m_localization = IOC.Resolve <ILocalization>();

            m_treeView      = Instantiate(TreeViewPrefab, transform).GetComponent <VirtualizingTreeView>();
            m_treeView.name = "ProjectTreeView";

            m_treeView.CanReorder     = false;
            m_treeView.CanReparent    = ShowRootFolder;
            m_treeView.CanUnselectAll = false;
            m_treeView.CanDrag        = ShowRootFolder;
            m_treeView.CanRemove      = false;
            m_treeView.CanSelectAll   = false;

            m_treeView.SelectionChanged += OnSelectionChanged;
            m_treeView.ItemDataBinding  += OnItemDataBinding;
            m_treeView.ItemExpanding    += OnItemExpanding;
            m_treeView.ItemsRemoving    += OnItemsRemoving;
            m_treeView.ItemsRemoved     += OnItemsRemoved;
            m_treeView.ItemBeginEdit    += OnItemBeginEdit;
            m_treeView.ItemEndEdit      += OnItemEndEdit;
            m_treeView.ItemBeginDrag    += OnItemBeginDrag;
            m_treeView.ItemBeginDrop    += OnItemBeginDrop;
            m_treeView.ItemDragEnter    += OnItemDragEnter;
            m_treeView.ItemDrag         += OnItemDrag;
            m_treeView.ItemDragExit     += OnItemDragExit;
            m_treeView.ItemDrop         += OnItemDrop;
            m_treeView.ItemEndDrag      += OnItemEndDrag;
            m_treeView.ItemDoubleClick  += OnItemDoubleClick;
            m_treeView.ItemClick        += OnItemClick;

            if (!GetComponent <ProjectTreeViewInput>())
            {
                gameObject.AddComponent <ProjectTreeViewInput>();
            }

            IOC.RegisterFallback <IProjectTree>(this);
        }
 private static void Init()
 {
     IOC.RegisterFallback(() => Instance != null ? Instance.m_console : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_resourcePreview : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_rteAppearance : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_windowManager : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_gameObjectCmd : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_editCmd : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_contextMenu : null);
     IOC.RegisterFallback(() => Instance != null ? Instance.m_runtimeHandlesComponent : null);
 }
        protected override void AwakeOverride()
        {
            WindowType = RuntimeWindowType.ProjectFolder;
            base.AwakeOverride();

            if (!ListBoxPrefab)
            {
                Debug.LogError("Set ListBoxPrefab field");
                return;
            }

            m_project       = IOC.Resolve <IProject>();
            m_windowManager = IOC.Resolve <IWindowManager>();
            m_localization  = IOC.Resolve <ILocalization>();

            m_listBox = GetComponentInChildren <VirtualizingTreeView>();
            if (m_listBox == null)
            {
                m_listBox      = Instantiate(ListBoxPrefab, transform).GetComponent <VirtualizingTreeView>();
                m_listBox.name = "AssetsListBox";
            }

            m_listBox.CanDrag           = true;
            m_listBox.CanReorder        = false;
            m_listBox.SelectOnPointerUp = true;
            m_listBox.CanRemove         = false;
            m_listBox.CanSelectAll      = false;

            m_listBox.ItemDataBinding  += OnItemDataBinding;
            m_listBox.ItemBeginDrag    += OnItemBeginDrag;
            m_listBox.ItemDragEnter    += OnItemDragEnter;
            m_listBox.ItemDrag         += OnItemDrag;
            m_listBox.ItemDragExit     += OnItemDragExit;
            m_listBox.ItemDrop         += OnItemDrop;
            m_listBox.ItemEndDrag      += OnItemEndDrag;
            m_listBox.ItemsRemoving    += OnItemRemoving;
            m_listBox.ItemsRemoved     += OnItemRemoved;
            m_listBox.ItemDoubleClick  += OnItemDoubleClick;
            m_listBox.ItemBeginEdit    += OnItemBeginEdit;
            m_listBox.ItemEndEdit      += OnItemEndEdit;
            m_listBox.SelectionChanged += OnSelectionChanged;
            m_listBox.ItemClick        += OnItemClick;
            m_listBox.Click            += OnListBoxClick;

            Editor.Selection.SelectionChanged += EditorSelectionChanged;
            Editor.Object.NameChanged         += OnNameChanged;

            if (!GetComponent <ProjectFolderViewInput>())
            {
                gameObject.AddComponent <ProjectFolderViewInput>();
            }

            IOC.RegisterFallback <IProjectFolder>(this);
        }
        private void Awake()
        {
            IOC.RegisterFallback <IMaterialPaletteManager>(this);

            m_editor              = IOC.Resolve <IRuntimeEditor>();
            m_editor.SceneLoaded += OnSceneLoaded;

            m_proBuilderTool = IOC.Resolve <IProBuilderTool>();

            InitPalette();
            IsReady = true;
        }
示例#20
0
        private void Awake()
        {
            if (Camera == null)
            {
                Camera = gameObject.AddComponent <Camera>();
                Camera.orthographic = true;
                Camera.clearFlags   = CameraClearFlags.Depth;
            }
            Camera.enabled = false;

            IOC.RegisterFallback <ITerrainCutoutMaskRenderer>(this);
        }
        private void Start()
        {
            m_cache = GetComponentInChildren <IRenderersCache>();
            IOC.Register("SelectedRenderers", m_cache);

            m_editor = IOC.Resolve <IRTE>();

            TryToAddRenderers(m_editor.Selection);
            m_editor.Selection.SelectionChanged += OnRuntimeEditorSelectionChanged;

            IOC.RegisterFallback <IOutlineManager>(this);
        }
示例#22
0
 private static void RegisterRTSL()
 {
     IOC.RegisterFallback(() => Instance.m_assetBundleLoader);
     IOC.RegisterFallback(() => Instance.m_typeMap);
     IOC.RegisterFallback(() => Instance.m_objectFactory);
     IOC.RegisterFallback(() => Instance.m_serializer);
     IOC.RegisterFallback(() => Instance.m_storage);
     IOC.RegisterFallback(() => Instance.m_assetDB);
     IOC.RegisterFallback <IIDMap>(() => Instance.m_assetDB);
     IOC.RegisterFallback(() => Instance.m_project);
     IOC.RegisterFallback(() => Instance.m_shaderUtil);
     IOC.RegisterFallback(() => Instance.m_playerPrefs);
 }
示例#23
0
        private void Awake()
        {
            if (Camera == null)
            {
                Camera = gameObject.AddComponent <Camera>();
                Camera.orthographic = true;
                Camera.clearFlags   = CameraClearFlags.Depth;
                Camera.cullingMask  = 1 << IOC.Resolve <IRTE>().CameraLayerSettings.ResourcePreviewLayer;
            }
            Camera.enabled = false;

            IOC.RegisterFallback <ITerrainCutoutMaskRenderer>(this);
        }
示例#24
0
 private static void Init()
 {
     SceneManager.sceneUnloaded += OnSceneUnloaded;
     IOC.RegisterFallback(() => Instance.m_console);
     IOC.RegisterFallback(() => Instance.m_resourcePreview);
     IOC.RegisterFallback(() => Instance.m_rteAppearance);
     IOC.RegisterFallback(() => Instance.m_windowManager);
     IOC.RegisterFallback(() => Instance.m_gameObjectCmd);
     IOC.RegisterFallback(() => Instance.m_editCmd);
     IOC.RegisterFallback(() => Instance.m_contextMenu);
     IOC.RegisterFallback(() => Instance.m_runtimeHandlesComponent);
     IOC.RegisterFallback(() => Instance.m_editorsMap);
 }
        protected virtual void Awake()
        {
            m_projectTreeView = GetComponent <ProjectTreeView>();
            m_showRootFolder  = m_projectTreeView.ShowRootFolder;
            m_folderIcon      = m_projectTreeView.FolderIcon;

            m_editor = IOC.Resolve <IRuntimeEditor>();
            if (Editor == null)
            {
                Debug.LogError("Editor is null");
                return;
            }

            m_project      = IOC.Resolve <IProject>();
            m_wm           = IOC.Resolve <IWindowManager>();
            m_localization = IOC.Resolve <ILocalization>();

            m_treeView      = Instantiate(m_projectTreeView.TreeViewPrefab, transform).GetComponent <VirtualizingTreeView>();
            m_treeView.name = "ProjectTreeView";

            m_treeView.CanReorder     = false;
            m_treeView.CanReparent    = ShowRootFolder;
            m_treeView.CanUnselectAll = false;
            m_treeView.CanDrag        = ShowRootFolder;
            m_treeView.CanRemove      = false;
            m_treeView.CanSelectAll   = false;

            m_treeView.SelectionChanged += OnSelectionChanged;
            m_treeView.ItemDataBinding  += OnItemDataBinding;
            m_treeView.ItemExpanding    += OnItemExpanding;
            m_treeView.ItemsRemoving    += OnItemsRemoving;
            m_treeView.ItemsRemoved     += OnItemsRemoved;
            m_treeView.ItemBeginEdit    += OnItemBeginEdit;
            m_treeView.ItemEndEdit      += OnItemEndEdit;
            m_treeView.ItemBeginDrag    += OnItemBeginDrag;
            m_treeView.ItemBeginDrop    += OnItemBeginDrop;
            m_treeView.ItemDragEnter    += OnItemDragEnter;
            m_treeView.ItemDrag         += OnItemDrag;
            m_treeView.ItemDragExit     += OnItemDragExit;
            m_treeView.ItemDrop         += OnItemDrop;
            m_treeView.ItemEndDrag      += OnItemEndDrag;
            m_treeView.ItemDoubleClick  += OnItemDoubleClick;
            m_treeView.ItemClick        += OnItemClick;

            m_projectTreeView.DragEnterEvent += OnDragEnter;
            m_projectTreeView.DragLeaveEvent += OnDragLeave;
            m_projectTreeView.DragEvent      += OnDrag;
            m_projectTreeView.DropEvent      += OnDrop;

            IOC.RegisterFallback <IProjectTree>(this);
        }
示例#26
0
        private void Start()
        {
            m_graphics = IOC.Resolve <IRTEGraphics>();
            m_cache    = m_graphics.CreateSharedRenderersCache(CameraEvent.AfterEverything);
            m_cache.MaterialOverride = m_selectionMaterial;
            m_editor = IOC.Resolve <IRTE>();

            TryToAddRenderers(m_editor.Selection);
            m_editor.Selection.SelectionChanged += OnRuntimeEditorSelectionChanged;

            IOC.RegisterFallback <IOutlineManager>(this);

            StartCoroutine(EnableSelectionFullScreenPass());
        }
示例#27
0
        private void Awake()
        {
            IOC.RegisterFallback <IEditorsMap>(this);

            var type = typeof(IComponentDescriptor);

#if !UNITY_WSA || UNITY_EDITOR
            var types = AppDomain.CurrentDomain.GetAssemblies()
                        .SelectMany(s => s.GetTypes())
                        .Where(p => type.IsAssignableFrom(p) && p.IsClass && !p.IsAbstract);
#else
            var types = type.GetTypeInfo().Assembly.GetTypes().
                        Where(p => type.IsAssignableFrom(p) && p.GetTypeInfo().IsClass&& !p.IsAbstract);
#endif

            m_componentDescriptors = new Dictionary <Type, IComponentDescriptor>();
            foreach (Type t in types)
            {
                IComponentDescriptor descriptor = (IComponentDescriptor)Activator.CreateInstance(t);
                if (descriptor == null)
                {
                    Debug.LogWarningFormat("Unable to instantiate descriptor of type " + t.FullName);
                    continue;
                }
                if (descriptor.ComponentType == null)
                {
                    Debug.LogWarningFormat("ComponentType is null. Descriptor Type {0}", t.FullName);
                    continue;
                }
                if (m_componentDescriptors.ContainsKey(descriptor.ComponentType))
                {
                    IComponentDescriptor alreadyAddedDescriptor = m_componentDescriptors[descriptor.ComponentType];
                    if (IsBulitIn(alreadyAddedDescriptor.GetType()))
                    {
                        //Overwrite built-in component descriptor
                        m_componentDescriptors[descriptor.ComponentType] = descriptor;
                    }
                    else if (!IsBulitIn(descriptor.GetType()))
                    {
                        Debug.LogWarningFormat("Duplicate descriptor for {0} found. Type name {1}. Using {2} instead", descriptor.ComponentType.FullName, descriptor.GetType().FullName, m_componentDescriptors[descriptor.ComponentType].GetType().FullName);
                    }
                }
                else
                {
                    m_componentDescriptors.Add(descriptor.ComponentType, descriptor);
                }
            }

            LoadMap();
        }
示例#28
0
 private static void RegisterExpDeps()
 {
     IOC.RegisterFallback(() => Instance.m_gameMachine);
     IOC.RegisterFallback(() => Instance.m_appTheme);
     IOC.RegisterFallback(() => Instance.m_globalUI);
     IOC.RegisterFallback(() => Instance.m_audio);
     if (IOC.Resolve <IMenuSelection>() == null)
     {
         IOC.Register <IMenuSelection>(new MenuSelection());
     }
     if (IOC.Resolve <IPlayer>() == null)
     {
         IOC.Register <IPlayer>(new Player());
     }
 }
        private void Awake()
        {
            m_editor = IOC.Resolve <IRTE>();
            m_input  = m_editor.Input;
            if (m_raycaster == null)
            {
                m_raycaster = gameObject.GetComponent <GraphicsRaycasterXR>();
                if (m_raycaster == null)
                {
                    m_raycaster = gameObject.AddComponent <GraphicsRaycasterXR>();
                }
            }

            IOC.RegisterFallback <IUIRaycaster>(this);
        }
示例#30
0
        protected override void Awake()
        {
            base.Awake();

            IOC.Register <IRTE>(this);
            IOC.RegisterFallback(this);

            ExposeToEditor[] editorObjects = ExposeToEditor.FindAll(this, ExposeToEditorObjectType.Undefined, false).Select(go => go.GetComponent <ExposeToEditor>()).ToArray();
            for (int i = 0; i < editorObjects.Length; ++i)
            {
                editorObjects[i].ObjectType = ExposeToEditorObjectType.EditorMode;
            }

            Tools.SnappingMode          = SnappingMode.BoundingBox;
            IsOpened                    = !IsInPlayMode;
            PlaymodeStateChanged       += OnPlaymodeStateChanged;
            IsOpenedChanged            += OnIsOpenedChanged;
            Selection.SelectionChanged += OnRuntimeSelectionChanged;
            Tools.ToolChanged          += OnRuntimeToolChanged;
            Tools.PivotRotationChanged += OnPivotRotationChanged;
            Undo.UndoCompleted         += OnUndoCompleted;
            Undo.RedoCompleted         += OnRedoCompleted;
            Undo.StateChanged          += OnUndoRedoStateChanged;

            TransformPanel.SetActive(Selection.activeTransform != null);
            if (Prefabs != null && PrefabsPanel != null && PrefabPresenter != null)
            {
                Prefabs = Prefabs.Where(p => p != null).ToArray();
                for (int i = 0; i < Prefabs.Length; ++i)
                {
                    GameObject presenter = Instantiate(PrefabPresenter);
                    presenter.transform.SetParent(PrefabsPanel.transform);
                    presenter.transform.position   = Vector3.zero;
                    presenter.transform.localScale = Vector3.one;

                    InstantiatePrefab instantiatePrefab = presenter.GetComponentInChildren <InstantiatePrefab>();
                    if (instantiatePrefab != null)
                    {
                        instantiatePrefab.Prefab = Prefabs[i];
                    }
                    TakeSnapshot takeSnapshot = presenter.GetComponentInChildren <TakeSnapshot>();
                    if (takeSnapshot != null)
                    {
                        takeSnapshot.TargetPrefab = Prefabs[i];
                    }
                }
            }
        }