示例#1
0
        private void DrawActionElement(Rect rect, int index, bool isActive, bool isFocused)
        {
            GUILayout.BeginArea(rect);

            var action = actionsList.list[index] as GeoAction;

            GUILayout.BeginHorizontal();
            GUILayout.Label(action.Name, GUILayout.MaxWidth(rect.width * 0.2f));

            //Action Parameters
            GUILayout.BeginVertical(GUILayout.MaxWidth(rect.width * 0.6f));

            if (action is EnterAction)
            {
                var specialized = action as EnterAction;
                specialized.OnlyFromOutside = EditorGUILayout.Toggle("Only from outside", specialized.OnlyFromOutside);
            }
            if (action is ExitAction)
            {
                var specialized = action as ExitAction;
                specialized.OnlyFromInside = EditorGUILayout.Toggle("Only from inside", specialized.OnlyFromInside);
            }
            if (action is InspectAction)
            {
                var specialized = action as InspectAction;
                specialized.Inside = EditorGUILayout.Toggle("On range", specialized.Inside);
            }
            if (action is LookToAction)
            {
                var specialized = action as LookToAction;
                specialized.Inside = EditorGUILayout.Toggle("On range", specialized.Inside);
                specialized.Center = EditorGUILayout.Toggle("Look to center", specialized.Center);
                if (!specialized.Center)
                {
                    specialized.Direction = EditorGUILayout.Vector2Field("Look to direction", specialized.Direction);
                }
            }

            GUILayout.EndVertical();

            // Conditions and effects
            GUILayout.BeginVertical(GUILayout.MaxWidth(rect.width * 0.2f));
            if (GUILayout.Button("Conditions"))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(action.Conditions);
            }
            if (GUILayout.Button("Effects"))
            {
                EffectEditorWindow window =
                    (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                window.Init(action.Effects);
            }
            GUILayout.EndVertical();

            // End eleemnt
            GUILayout.EndHorizontal();
            GUILayout.EndArea();
        }
示例#2
0
    public void Init(ConditionsController con)
    {
        editor   = EditorWindow.GetWindow <ConditionEditorWindow>();
        editor.s = Color.black;

        editor.Conditions = con.Conditions;

        ConditionEditorFactory.Intance.ResetInstance();
    }
示例#3
0
//	[MenuItem("Component/AI/EditCondition")]
//	public static void init ()
//	{
//		ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow (typeof(ConditionEditorWindow));
//		window.title = "Root composite condition";
//	}

    public static void DisplayConditionEditorWindow(AIEditor aiEditor,
                                                    CompositeConditionWrapper compositionConditionWrapper)
    {
        ConditionEditorWindow window = (ConditionEditorWindow)EditorWindow.GetWindow(typeof(ConditionEditorWindow));

        window.compositionConditionWrapper = compositionConditionWrapper;
        window.aiEditor = aiEditor;
        window.Show();
    }
示例#4
0
        private void DrawActionColumn(Rect rect, int row, int column, bool active, bool focused)
        {
            var action = geoActionsList.list[row] as GeoActionDataControl;

            switch (column)
            {
            case 0:
                GUI.Label(rect, TC.get("Geo.GeoElementWindow.Actions." + action.getType() + ".Name"));
                break;

            case 1:

                switch (action.getType())
                {
                case "Enter": DoEnterActionParameters(rect, action); break;

                case "Exit": DoExitActionParameters(rect, action); break;

                case "LookTo": DoLookToActionParameters(rect, action); break;

                case "Inspect": DoInspectActionParameters(rect, action); break;

                default:
                    GUI.Label(rect, "Geo.GeoElementWindow.Actions.Unknown".Traslate(action.getType()));
                    break;
                }

                break;

            case 2:
                if (GUI.Button(rect, "Element.Effects".Traslate()))
                {
                    var effectEditorWindow = ScriptableObject.CreateInstance <EffectEditorWindow>();
                    effectEditorWindow.Init(action.Effects);
                    effectEditorWindow.Show();
                }

                break;

            case 3:
                if (GUI.Button(rect, action.Conditions.getBlocksCount() > 0 ? conditionsTex : noConditionsTex))
                {
                    ConditionEditorWindow.ShowAtPosition(action.Conditions, rect);
                }

                break;
            }
        }
示例#5
0
        private void DrawMapElement(Rect rect, int index, bool active, bool focused)
        {
            MapElement mapElement = (MapElement)mapElementReorderableList.list[index];

            EditorGUI.LabelField(infoRect.GUIAdapt(rect), mapElement.getTargetId());

            if (mapElement is ExtElemReference)
            {
                var extReference = mapElement as ExtElemReference;

                // Trasnform manager descriptor selection
                var avaliableDescriptors = TransformManagerDescriptorFactory.Instance.AvaliableTransformManagers.ToList();
                var selected             = avaliableDescriptors.FindIndex(d => d.Key == extReference.TransformManagerDescriptor.GetType());
                var newSelected          = EditorGUI.Popup(typePopupRect.GUIAdapt(rect), selected, avaliableDescriptors.ConvertAll(d => d.Value).ToArray());

                if (newSelected != selected)
                {
                    // In case of change, reinstance a new one
                    extReference.TransformManagerDescriptor = TransformManagerDescriptorFactory.Instance.CreateDescriptor(avaliableDescriptors[newSelected].Key);
                    UpdateMapResources();
                }

                using (new EditorGUI.DisabledScope())
                {
                    if (GUI.Button(typeConfigRect.GUIAdapt(rect), "*"))
                    {
                        var o = DrawerParametersMenu.ShowAtPosition(typeConfigRect.GUIAdapt(rect));
                        DrawerParametersMenu.s_DrawerParametersMenu.ExtElemReference = extReference;
                        if (o)
                        {
                            GUIUtility.ExitGUI();
                        }
                    }
                }

                if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Move"))
                {
                    movingReference = extReference;
                }
            }

            if (GUI.Button(editButtonRect.GUIAdapt(rect), "Conditions"))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(mapElement.Conditions);
            }
        }
示例#6
0
        protected override void DrawInspector()
        {
            selectedQR = QRController.Instance.QRCodes[QRController.Instance.SelectedQRCode];

            EditorGUI.BeginChangeCheck();
            // Delayed in order to use content to render the QR
            var newContent = EditorGUILayout.DelayedTextField("QR.QRCodeEditorWindow.Content".Traslate(), selectedQR.Content);

            if (EditorGUI.EndChangeCheck())
            {
                selectedQR.Content = newContent;
            }
            EditorGUILayout.LabelField("Search.Documentation".Traslate());
            selectedQR.Documentation = EditorGUILayout.TextArea(selectedQR.Documentation, GUILayout.Height(200));

            // Conditions and Effects

            using (new EditorGUILayout.HorizontalScope())
            {
                if (GUILayout.Button("Conditions.Title".Traslate()))
                {
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(selectedQR.Conditions);
                }
                if (GUILayout.Button("Element.Effects".Traslate()))
                {
                    EffectEditorWindow window =
                        (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                    window.Init(selectedQR.Effects);
                }
            }

            // QRCODE and buttons
            if (GUILayout.Button("QR.QRCodeEditorWindow.Save".Traslate()))
            {
                SaveQR(selectedQR);
            }
            if (GUILayout.Button("QR.QRCodeEditorWindow.Print".Traslate()))
            {
                PrintQR(selectedQR);
            }
        }
示例#7
0
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(appearanceTableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("Item.LookPanelTitle"), GUILayout.Width(windowWidth * 0.44f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.44f));
        GUILayout.EndHorizontal();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        // Appearance table
        for (int i = 0; i < Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[GameRources.GetInstance().selectedItemIndex].getResourcesCount(); i++)
        {
            if (i == selectedAppearance)
            {
                GUI.skin = selectedAreaSkin;
            }
            else
            {
                GUI.skin = noBackgroundSkin;
            }

            tmpTex = (Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                          GameRources.GetInstance().selectedItemIndex].getResources()[i].getConditions().getBlocksCount() > 0? conditionsTex:noConditionsTex);

            GUILayout.BeginHorizontal();

            if (i == selectedAppearance)
            {
                if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                         GameRources.GetInstance().selectedItemIndex].getResources()[i].getName(), GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnAppearanceSelectionChange(i);
                }
                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.44f)))
                {
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                    GameRources.GetInstance().selectedItemIndex].getResources()[i].getConditions());
                }
            }
            else
            {
                if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                         GameRources.GetInstance().selectedItemIndex].getResources()[i].getName(), GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnAppearanceSelectionChange(i);
                }
                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnAppearanceSelectionChange(i);
                }
            }
            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();

        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].addElement(Controller.RESOURCES, "");
        }
        if (GUILayout.Button(duplicateTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                                                                  GameRources.GetInstance().selectedItemIndex].getResources()[selectedAppearance]);
        }
        if (GUILayout.Button(clearTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].deleteElement(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                                                               GameRources.GetInstance().selectedItemIndex].getResources()[selectedAppearance], false);
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();


        GUILayout.Space(30);


        GUILayout.BeginArea(propertiesTable);
        // Background chooser
        GUILayout.Label(TC.get("Resources.DescriptionItemImage"));
        GUILayout.BeginHorizontal();
        if (GUILayout.Button(clearTex, GUILayout.Width(0.05f * windowWidth)))
        {
            imagePath = "";
        }
        GUILayout.Box(imagePath, GUILayout.Width(0.7f * windowWidth));
        if (GUILayout.Button(TC.get("Buttons.Select"), GUILayout.Width(0.19f * windowWidth)))
        {
            ShowAssetChooser(AssetType.ITEM);
        }
        GUILayout.EndHorizontal();

        // Icon chooser
        GUILayout.Label(TC.get("Resources.DescriptionItemIcon"));
        GUILayout.BeginHorizontal();
        if (GUILayout.Button(clearTex, GUILayout.Width(0.05f * windowWidth)))
        {
            inventoryIconPath = "";
        }
        GUILayout.Box(inventoryIconPath, GUILayout.Width(0.7f * windowWidth));
        if (GUILayout.Button(TC.get("Buttons.Select"), GUILayout.Width(0.19f * windowWidth)))
        {
            ShowAssetChooser(AssetType.ICON);
        }
        GUILayout.EndHorizontal();

        // Image over chooser
        GUILayout.Label(TC.get("Resources.DescriptionItemImageOver"));
        GUILayout.BeginHorizontal();
        if (GUILayout.Button(clearTex, GUILayout.Width(0.05f * windowWidth)))
        {
            imageWhenOverPath = "";
        }
        GUILayout.Box(imageWhenOverPath, GUILayout.Width(0.7f * windowWidth));
        if (GUILayout.Button(TC.get("Buttons.Select"), GUILayout.Width(0.19f * windowWidth)))
        {
            ShowAssetChooser(AssetType.ITEM_OVER);
        }
        GUILayout.EndHorizontal();

        GUILayout.EndArea();

        if (imagePath != "")
        {
            GUI.DrawTexture(previewRect, imageTex, ScaleMode.ScaleToFit);
        }
    }
示例#8
0
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(tableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("ActiveAreasList.Id"), GUILayout.Width(windowWidth * 0.54f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.14f));
        GUILayout.Box(TC.get("ActiveAreasList.Documentation"), GUILayout.Width(windowWidth * 0.18f));
        GUILayout.EndHorizontal();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                 GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreasList().Count;
             i++)
        {
            if (i == selectedArea)
            {
                GUI.skin = selectedAreaSkin;
            }

            GUILayout.BeginHorizontal();

            if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                     GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreasList()[i].getId(),
                                 GUILayout.Width(windowWidth * 0.54f)))
            {
                OnSelectionChanged(i);
            }

            if (GUILayout.Button(conditionTex, GUILayout.Width(windowWidth * 0.14f)))
            {
                OnSelectionChanged(i);

                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreasList()[i]
                            .getConditions());
            }
            if (GUILayout.Button(TC.get("GeneralText.EditDocumentation"), GUILayout.Width(windowWidth * 0.18f)))
            {
                OnSelectionChanged(i);
            }

            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();



        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTexture, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            ActiveAreaNewName window =
                (ActiveAreaNewName)ScriptableObject.CreateInstance(typeof(ActiveAreaNewName));
            window.Init(this, "IdObject");
        }
        if (GUILayout.Button(duplicateImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                  GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]);
        }
        if (GUILayout.Button(moveUp, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
            .moveElementUp(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]);
        }
        if (GUILayout.Button(moveDown, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
            .moveElementDown(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                 GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]);
        }
        if (GUILayout.Button(clearImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea],
                           false);
            if (selectedArea >= 0)
            {
                selectedArea--;
            }
            if (selectedAction >= 0)
            {
                selectedAction--;
            }
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();

        /**
         * ACTION EDITOR
         */
        GUILayout.BeginArea(actionRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("Element.Action"), GUILayout.Width(windowWidth * 0.39f));
        GUILayout.Box(TC.get("ActionsList.NeedsGoTo"), GUILayout.Width(windowWidth * 0.39f));
        GUILayout.Box(TC.get("Element.Effects") + "/" + TC.get("SmallAction.Conditions"), GUILayout.Width(windowWidth * 0.1f));
        GUILayout.EndHorizontal();
        scrollPositionAction = GUILayout.BeginScrollView(scrollPositionAction, GUILayout.ExpandWidth(false));
        if (selectedArea >= 0)
        {
            // Action table
            for (int i = 0;
                 i < Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                     GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]
                 .getActionsList().getActions().Count;
                 i++)
            {
                if (i == selectedAction)
                {
                    GUI.skin = selectedAreaSkin;
                }
                else
                {
                    GUI.skin = noBackgroundSkin;
                }

                GUILayout.BeginHorizontal();
                if (i == selectedAction)
                {
                    GUILayout.Label(
                        Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                            GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                            selectedArea
                        ].getActionsList().getActions()[i].getTypeName(),
                        GUILayout.Width(windowWidth * 0.39f));
                    if (Controller.getInstance().playerMode() == Controller.FILE_ADVENTURE_1STPERSON_PLAYER)
                    {
                        if (GUILayout.Button(TC.get("ActionsList.NotRelevant"), GUILayout.Width(windowWidth * 0.39f)))
                        {
                            selectedAction = i;
                        }
                    }
                    else
                    {
                        GUILayout.BeginHorizontal(GUILayout.Width(windowWidth * 0.39f));
                        Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                            GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                            selectedArea].getActionsList().getActions()[i].setNeedsGoTo(
                            GUILayout.Toggle(
                                Controller.getInstance()
                                .getSelectedChapterDataControl()
                                .getScenesList()
                                .getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
                                .getActiveAreas()[selectedArea].getActionsList().getActions()[i]
                                .getNeedsGoTo(), ""));
                        Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                            GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                            selectedArea].getActionsList().getActions()[i].setKeepDistance(
                            EditorGUILayout.IntField(
                                Controller.getInstance()
                                .getSelectedChapterDataControl()
                                .getScenesList()
                                .getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getActiveAreasList()
                                .getActiveAreas()[selectedArea].getActionsList().getActions()[i]
                                .getKeepDistance()));

                        GUILayout.EndHorizontal();
                    }


                    GUILayout.BeginVertical();
                    if (GUILayout.Button(TC.get("ActiveAreasList.Conditions"), GUILayout.Width(windowWidth * 0.1f)))
                    {
                        ConditionEditorWindow window =
                            (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                        window.Init(
                            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                                selectedArea
                            ].getActionsList().getActions()[i].getConditions());
                    }
                    if (GUILayout.Button(TC.get("Element.Effects"), GUILayout.Width(windowWidth * 0.1f)))
                    {
                        EffectEditorWindow window =
                            (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                        window.Init(
                            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                                selectedArea
                            ].getActionsList().getActions()[i].getEffects());
                    }
                    if (GUILayout.Button(TC.get("SmallAction.EditNotEffects"), GUILayout.Width(windowWidth * 0.1f)))
                    {
                        EffectEditorWindow window =
                            (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                        window.Init(
                            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                                selectedArea
                            ].getActionsList().getActions()[i].getNotEffectsController());
                    }
                    GUILayout.EndVertical();
                }
                else
                {
                    if (
                        GUILayout.Button(
                            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                                selectedArea].getActionsList().getActions()[i].getTypeName(),
                            GUILayout.Width(windowWidth * 0.39f)))
                    {
                        selectedAction = i;
                    }

                    if (Controller.getInstance().playerMode() == Controller.FILE_ADVENTURE_1STPERSON_PLAYER)
                    {
                        if (GUILayout.Button(TC.get("ActionsList.NotRelevant"), GUILayout.Width(windowWidth * 0.39f)))
                        {
                            selectedAction = i;
                        }
                    }
                    else
                    {
                        if (
                            GUILayout.Button(
                                Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[
                                    selectedArea].getActionsList().getActions()[i].getNeedsGoTo().ToString(),
                                GUILayout.Width(windowWidth * 0.39f)))
                        {
                            selectedAction = i;
                        }
                    }
                }
                GUILayout.EndHorizontal();
                GUI.skin = defaultSkin;
            }
        }

        GUILayout.EndScrollView();
        GUILayout.EndArea();

        /*
         * Right action panel
         */
        GUILayout.BeginArea(actionRightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTexture, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            addMenu.menu.ShowAsContext();
        }
        if (GUILayout.Button(duplicateImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]
            .getActionsList()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                  GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]
                              .getActionsList().getActions()[selectedAction]);
        }
        if (GUILayout.Button(clearImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]
            .getActionsList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getActiveAreasList().getActiveAreas()[selectedArea]
                           .getActionsList().getActions()[selectedAction], false);
            if (selectedAction >= 0)
            {
                selectedAction--;
            }
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();



        if (backgroundPath != "")
        {
            GUILayout.BeginArea(infoPreviewRect);
            // Show preview dialog
            if (GUILayout.Button(TC.get("DefaultClickAction.ShowDetails") + "/" + TC.get("GeneralText.Edit")))
            {
                ActiveAreasEditor window =
                    (ActiveAreasEditor)ScriptableObject.CreateInstance(typeof(ActiveAreasEditor));
                window.Init(this, Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex], selectedArea);
            }
            GUILayout.EndArea();
            GUI.DrawTexture(previewRect, backgroundPreviewTex, ScaleMode.ScaleToFit);
        }
        else
        {
            GUILayout.BeginArea(infoPreviewRect);
            GUILayout.Button("No background!");
            GUILayout.EndArea();
        }
    }
        private void DrawMapElement(Rect rect, int index, bool active, bool focused)
        {
            MapElement mapElement = (MapElement)mapElementReorderableList.list[index];

            EditorGUI.LabelField(infoRect.GUIAdapt(rect), mapElement.getTargetId());

            //geo.Type = (GMLGeometry.GeometryType)EditorGUI.EnumPopup(typePopupRect.GUIAdapt(rect), geo.Type);
            var center = map.Center;

            if (mapElement is GeoReference)
            {
                var geoReference = mapElement as GeoReference;
                var geoElement   = Controller.getInstance().getSelectedChapterDataControl().getObjects <GeoElement>().Find(e => e.Id == geoReference.getTargetId());
                if (geoElement != null && geoElement.Geometry.Points.Count > 0)
                {
                    center = geoElement.Geometry.Center;
                }
            }
            else if (mapElement is ExtElemReference)
            {
                var extReference = mapElement as ExtElemReference;

                // Trasnform manager descriptor selection
                var avaliableDescriptors = TransformManagerDescriptorFactory.Instance.AvaliableTransformManagers.ToList();
                var selected             = avaliableDescriptors.FindIndex(d => d.Key == extReference.TransformManagerDescriptor.GetType());
                var newSelected          = EditorGUI.Popup(typePopupRect.GUIAdapt(rect), selected, avaliableDescriptors.ConvertAll(d => d.Value).ToArray());

                if (newSelected != selected)
                {
                    // In case of change, reinstance a new one
                    extReference.TransformManagerDescriptor = TransformManagerDescriptorFactory.Instance.CreateDescriptor(avaliableDescriptors[newSelected].Key);
                    UpdateMapResources();
                }

                using (new EditorGUI.DisabledScope())
                {
                    if (GUI.Button(typeConfigRect.GUIAdapt(rect), "*"))
                    {
                        //DrawerParametersMenu.s_SpriteEditor = this;
                        var o = DrawerParametersMenu.ShowAtPosition(typeConfigRect.GUIAdapt(rect));
                        DrawerParametersMenu.s_DrawerParametersMenu.ExtElemReference = extReference;
                        if (o)
                        {
                            GUIUtility.ExitGUI();
                        }
                    }
                }

                if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Move"))
                {
                    movingReference = extReference;
                }
            }

            /*if (GUI.Button(centerButtonRect.GUIAdapt(rect), "Center"))
             * {
             *  map.Center = center;
             * }*/

            /*if (GUI.Button(editButtonRect.GUIAdapt(rect), editing != geo ? "Unlocked" : "Locked"))
             * {
             *  editing = editing == geo ? null : geo;
             * }*/

            if (GUI.Button(editButtonRect.GUIAdapt(rect), "Conditions"))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(mapElement.Conditions);
            }
        }
    public void draw()
    {
        if (closeStyle == null)
        {
            closeStyle                   = new GUIStyle(GUI.skin.button);
            closeStyle.padding           = new RectOffset(0, 0, 0, 0);
            closeStyle.margin            = new RectOffset(0, 5, 2, 0);
            closeStyle.normal.textColor  = Color.red;
            closeStyle.focused.textColor = Color.red;
            closeStyle.active.textColor  = Color.red;
            closeStyle.hover.textColor   = Color.red;
        }

        GUIStyle style = new GUIStyle();

        style.padding = new RectOffset(5, 5, 5, 5);

        EditorGUILayout.BeginVertical();

        EditorGUILayout.HelpBox(TC.get("ConversationEditor.AtLeastOne"), MessageType.None);
        bool infoShown = false;

        if (myNode.getLineCount() > 0)
        {
            bool isScrolling = false;

            if (myNode.getLineCount() > 10)
            {
                scroll      = EditorGUILayout.BeginScrollView(scroll, GUILayout.MinWidth(360), GUILayout.Height(190));
                isScrolling = true;
            }

            for (int i = 0; i < myNode.getLineCount(); i++)
            {
                EditorGUILayout.BeginHorizontal();

                bool showInfo = false;

                EditorGUIUtility.labelWidth = GUI.skin.label.CalcSize(new GUIContent(TC.get("ConversationEditor.Option") + " " + i + ": ")).x;
                myNode.getLine(i).setText(EditorGUILayout.TextField(TC.get("ConversationEditor.Option") + " " + i + ": ", myNode.getLine(i).getText(), GUILayout.Width(200)));

                tmpTex = (myNode.getLine(i).getConditions().getConditionsList().Count > 0
                    ? conditionsTex
                    : noConditionsTex);

                if (GUILayout.Button(tmpTex, noBackgroundSkin.button, GUILayout.Width(15), GUILayout.Height(15)))
                {
                    ConditionEditorWindow window = (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(myNode.getLine(i).getConditions());
                }

                if (GUILayout.Button(linkTex, noBackgroundSkin.button, GUILayout.Width(15), GUILayout.Height(15)))
                {
                    parent.startSetChild(this.myNode, i);
                }


                if (GUILayout.Button("X", closeStyle, GUILayout.Width(15), GUILayout.Height(15)))
                {
                    myNode.removeLine(i);
                    myNode.removeChild(i);
                }
                ;
                EditorGUILayout.EndHorizontal();
            }
            if (isScrolling)
            {
                EditorGUILayout.EndScrollView();
            }
        }

        EditorGUILayout.BeginHorizontal();
        GUIContent bttext = new GUIContent(TC.get("ConversationEditor.AddOptionChild"));
        Rect       btrect = GUILayoutUtility.GetRect(bttext, style);

        if (GUI.Button(btrect, bttext))
        {
            myNode.addLine(new ConversationLine("Player", ""));
            parent.addChild(this.myNode, new DialogueConversationNode());
        }
        ;

        tmpTex = (myNode.getEffects().getEffects().Count > 0
            ? effectTex
            : noEffectTex);
        if (GUILayout.Button(tmpTex, noBackgroundSkin.button, GUILayout.Width(24), GUILayout.Height(24)))
        {
            EffectEditorWindow window = (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
            window.Init(myNode.getEffects());
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
    }
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(descriptionRect);
        GUILayout.Label(TC.get("Item.Documentation"));
        fullItemDescription = GUILayout.TextField(fullItemDescription);
        if (!fullItemDescription.Equals(fullItemDescriptionLast))
        {
            OnItemDescriptionChanged(fullItemDescription);
        }
        GUILayout.EndArea();



        /*
         * Desciptor table
         */
        GUILayout.BeginArea(descriptionTableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("DescriptionList.Descriptions"), GUILayout.Width(windowWidth * 0.44f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.44f));
        GUILayout.EndHorizontal();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);

        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                 GameRources.GetInstance().selectedItemIndex].getDescriptionController().getDescriptionCount();
             i++)
        {
            if (i == selectedDescription)
            {
                GUI.skin = selectedAreaSkin;
            }
            else
            {
                GUI.skin = noBackgroundSkin;
            }

            tmpTex = (Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                          GameRources.GetInstance().selectedItemIndex].getDescriptionController()
                      .getDescriptionController(i)
                      .getConditionsController()
                      .getBlocksCount() > 0
                ? conditionsTex
                : noConditionsTex);

            GUILayout.BeginHorizontal();

            if (i == selectedDescription)
            {
                if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                         GameRources.GetInstance().selectedItemIndex].getDescriptionController()
                                     .getDescriptionController(i)
                                     .getName(), GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnDescriptionSelectionChange(i);
                }
                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.44f)))
                {
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(
                        Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                            GameRources.GetInstance().selectedItemIndex].getDescriptionController()
                        .getDescriptionController(i)
                        .getConditionsController());
                }
            }
            else
            {
                if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                                         GameRources.GetInstance().selectedItemIndex].getDescriptionController()
                                     .getDescriptionController(i)
                                     .getName(), GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnDescriptionSelectionChange(i);
                }
                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.44f)))
                {
                    OnDescriptionSelectionChange(i);
                }
            }
            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();



        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].getDescriptionController().addElement();
        }
        if (GUILayout.Button(duplicateTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].getDescriptionController().duplicateElement();
        }
        if (GUILayout.Button(clearTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getItemsList().getItems()[
                GameRources.GetInstance().selectedItemIndex].getDescriptionController().deleteElement();
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();



        /*
         * Properties panel
         */
        GUILayout.BeginArea(settingsTable);


        GUILayout.Label(TC.get("Item.Name"));
        GUILayout.BeginHorizontal();
        descriptionName = GUILayout.TextField(descriptionName, GUILayout.MaxWidth(0.6f * windowWidth));
        if (!descriptionName.Equals(descriptionNameLast))
        {
            OnDescriptionNameChanged(descriptionName);
        }
        if (!string.IsNullOrEmpty(descriptionSound))
        {
            audioTextureTmp = audioTexture;
        }
        else
        {
            audioTextureTmp = noAudioTexture;
        }
        GUILayout.Label(audioTextureTmp);
        GUILayout.Label(descriptionSound);
        if (GUILayout.Button(TC.get("Buttons.Select")))
        {
            ShowAssetChooser(AssetType.NAME_SOUND);
        }
        if (GUILayout.Button(clearTex))
        {
            OnDescriptorNameSoundChange("");
        }
        GUILayout.EndHorizontal();

        GUILayout.Label(TC.get("Item.Description"));
        GUILayout.BeginHorizontal();
        briefDescription = GUILayout.TextField(briefDescription, GUILayout.MaxWidth(0.6f * windowWidth));
        if (!briefDescription.Equals(briefDescriptionLast))
        {
            OnBriefDescriptionChanged(briefDescription);
        }
        if (!string.IsNullOrEmpty(briefDescriptionSound))
        {
            audioTextureTmp = audioTexture;
        }
        else
        {
            audioTextureTmp = noAudioTexture;
        }
        GUILayout.Label(audioTextureTmp);
        GUILayout.Label(briefDescriptionSound);
        if (GUILayout.Button(TC.get("Buttons.Select")))
        {
            ShowAssetChooser(AssetType.BRIEF_DESCRIPTION_SOUND);
        }
        if (GUILayout.Button(clearTex))
        {
            OnDescriptorBriefSoundChange("");
        }
        GUILayout.EndHorizontal();

        GUILayout.Label(TC.get("Item.DetailedDescription"));
        GUILayout.BeginHorizontal();
        detailedDescription = GUILayout.TextField(detailedDescription, GUILayout.MaxWidth(0.6f * windowWidth));
        if (!detailedDescription.Equals(detailedDescriptionLast))
        {
            OnDetailedDescriptionChanged(detailedDescription);
        }
        if (!string.IsNullOrEmpty(detailedDescriptionSound))
        {
            audioTextureTmp = audioTexture;
        }
        else
        {
            audioTextureTmp = noAudioTexture;
        }
        GUILayout.Label(audioTextureTmp);
        GUILayout.Label(detailedDescriptionSound);
        if (GUILayout.Button(TC.get("Buttons.Select")))
        {
            ShowAssetChooser(AssetType.DETAILED_DESCRIPTION_SOUND);
        }
        if (GUILayout.Button(clearTex))
        {
            OnDescriptorDetailedSoundChange("");
        }
        GUILayout.EndHorizontal();

        GUILayout.FlexibleSpace();

        GUILayout.Label(TC.get("Item.ReturnsWhenDragged.Title"));
        GUILayout.Box(TC.get("Item.ReturnsWhenDragged.Description"));
        dragdropToogle = GUILayout.Toggle(dragdropToogle, TC.get("Item.ReturnsWhenDragged"));
        if (dragdropToogle != dragdropToogleLast)
        {
            OnDragAndDropToogleValueChange(dragdropToogle);
        }

        GUILayout.FlexibleSpace();

        GUILayout.Label(TC.get("Behaviour"));
        GUILayout.BeginHorizontal();
        selectedBehaviourType = EditorGUILayout.Popup(selectedBehaviourType, behaviourTypes,
                                                      GUILayout.MaxWidth(0.2f * windowWidth));
        if (selectedBehaviourType != selectedBehaviourTypeLast)
        {
            OnBehaviourChange(selectedBehaviourType);
        }
        GUILayout.Box(behaviourTypesDescription[selectedBehaviourType]);
        GUILayout.EndHorizontal();

        GUILayout.FlexibleSpace();

        GUILayout.Label(TC.get("Resources.TransitionTime"));
        GUILayout.Box(TC.get("Resources.TransitionTime.Description"));
        transitionTime = GUILayout.TextField(transitionTime);
        transitionTime = (Regex.Match(transitionTime, "^[0-9]{1,3}$").Success ? transitionTime : transitionTimeLast);
        if (!transitionTime.Equals(transitionTimeLast))
        {
            OnTransitionTimeChange(transitionTime);
        }


        GUILayout.EndArea();
    }
示例#12
0
    void OnGUI()
    {
        //A line separates HTN Editor from task editor
        Drawing.DrawLine(new Vector2(302, 0), new Vector2(302, 700), Color.grey, 2.0f, false);



        /*HTN EDITOR*/
        items = new List <HTNEditorItem>();

        items.Add(new HTNEditorItem(
                      new Rect(new Vector2(0, 0), new Vector2(100, 30)),
                      goal, itemType.COMPOUND));


        DrawCompoundTask(goal, null, new Vector2(10, 0));

        //GUI.EndScrollView ();
        Event currentEvent = Event.current;

        foreach (HTNEditorItem htnItem in items)
        {
            if (currentEvent.type == EventType.MouseDown &&
                currentEvent.button == 0 &&
                htnItem.area.Contains(currentEvent.mousePosition)
                )
            {
                selected = htnItem;
            }
        }



        /*TASK EDITOR*/

        if (selected.item != null)
        {
            GUIStyle labelStyle = new GUIStyle();

            labelStyle.fontSize         = 12;
            labelStyle.normal.textColor = Color.black;
            labelStyle.fontStyle        = FontStyle.Bold;



            if (selected.type == itemType.COMPOUND)
            {
                int i = 0;


                CompoundTask selectedCT = (CompoundTask)selected.item;



                GUI.Label(new Rect(editorPos, itemSize), "Name", labelStyle);

                selectedCT.name = GUI.TextField(new Rect(new Vector2(editorPos.x + 50, editorPos.y),
                                                         new Vector2(75, 20)),
                                                selectedCT.name);

                if (selectedCT.Equals(goal))
                {
                    GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 100), itemSize), "Goal condition", labelStyle);


                    GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 125), new Vector2(120, 20)), "Logical operator");

                    string[] operatorOptions = new string[] { "AND", "OR" };

                    int selectedOperator = Array.IndexOf <string> (operatorOptions, agent.logicalOperator.ToString());

                    selectedOperator = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 100, editorPos.y + 125), new Vector2(50, 20)),
                                                       selectedOperator, operatorOptions);
                    if (selectedOperator == 0)
                    {
                        agent.logicalOperator = LogicalOperator.AND;
                    }
                    else if (selectedOperator == 1)
                    {
                        agent.logicalOperator = LogicalOperator.OR;
                    }



                    if (agent.goalCondition.Count > 0)
                    {
                        for (i = 0; i < agent.goalCondition.Count; i++)
                        {
                            Atom cond = agent.goalCondition[i];


                            string condLabelName = string.Concat(cond.name, "(");

                            foreach (Term var in cond.terms)
                            {
                                condLabelName = string.Concat(condLabelName, var.key);

                                if (cond.terms.IndexOf(var) < cond.terms.Count - 1)
                                {
                                    condLabelName = string.Concat(condLabelName, ",");
                                }
                            }

                            condLabelName = string.Concat(condLabelName, ")");


                            GUI.Label(new Rect(
                                          new Vector2(editorPos.x, editorPos.y + 150 + i * 25), new Vector2(200, 50)), condLabelName);



                            if (GUI.Button(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 150 + i * 25),
                                                    new Vector2(50, 15)), "Edit"))
                            {
                                ConditionEditorWindow.ShowWindow(agent, cond);
                            }

                            if (GUI.Button(new Rect(new Vector2(editorPos.x + 175, editorPos.y + 150 + i * 25),
                                                    new Vector2(50, 15)), "Delete"))
                            {
                                agent.goalCondition.Remove(cond);
                                ConditionEditorWindow.GetWindow <ConditionEditorWindow>().Close();
                            }
                        }
                    }



                    if (GUI.Button(new Rect(new Vector2(editorPos.x, editorPos.y + 150 + i * 25),
                                            new Vector2(75, 20)),
                                   "Add "))
                    {
                        Atom cond = new Atom("New Condition");

                        agent.goalCondition.Add(cond);

                        ConditionEditorWindow.ShowWindow(agent, cond);
                    }
                }
            }



            else if (selected.type == itemType.PRIMITIVE)
            {
                PrimitiveTask selectedPT = (PrimitiveTask)selected.item;



                GUI.Label(new Rect(editorPos, itemSize), "Name", labelStyle);

                selectedPT.name = GUI.TextField(new Rect(new Vector2(editorPos.x + 50, editorPos.y), new Vector2(75, 20)),
                                                selectedPT.name);



                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 50), itemSize), "Cost", labelStyle);

                selectedPT.cost = EditorGUI.FloatField(new Rect(new Vector2(editorPos.x + 50, editorPos.y + 50),
                                                                new Vector2(75, 20)),
                                                       selectedPT.cost);



                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 90), itemSize), "Arguments", labelStyle);

                int i = 0;


                scrollPositionArg = GUI.BeginScrollView(new Rect(new Vector2(editorPos.x, editorPos.y + 120), new Vector2(300, 50)),
                                                        scrollPositionArg, new Rect(new Vector2(editorPos.x, editorPos.y + 120),
                                                                                    new Vector2(275, 50 + selectedPT.arguments.Count * 10)), false, false);


                if (selectedPT.arguments.Count > 0)
                {
                    for (i = 0; i < selectedPT.arguments.Count; i++)
                    {
                        //GUILayout.BeginHorizontal(GUILayout.Width(200));
                        GUI.Label(new Rect(
                                      new Vector2(editorPos.x, editorPos.y + 120 + i * 25), itemSize), "Name");



                        List <string> domVarNamesList = new List <string> ();


                        foreach (Term v in agent.domainVariables)
                        {
                            domVarNamesList.Add(v.key);
                        }

                        varIndex = domVarNamesList.IndexOf(selectedPT.arguments[i].key);

                        if (varIndex == -1)
                        {
                            varIndex = 0;
                        }

                        varIndex = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 105, editorPos.y + 120 + i * 25),
                                                            new Vector2(50, 20)), varIndex, domVarNamesList.ToArray());


                        selectedPT.arguments[i] = agent.domainVariables[varIndex];


                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 160, editorPos.y + 120 + i * 25),
                                                new Vector2(50, 15)), "Delete"))
                        {
                            selectedPT.deleteArgument(selectedPT.arguments[i]);
                        }
                    }
                }

                GUI.EndScrollView();



                Vector2 AddButtonPos = new Vector2(0, 0);

                if (selectedPT.arguments.Count == 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 120);
                }

                else if (selectedPT.arguments.Count > 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 170);
                }


                if (GUI.Button(new Rect(AddButtonPos, new Vector2(75, 20)), "Add"))
                {
                    foreach (Term argument in agent.domainVariables)
                    {
                        if (!selectedPT.arguments.Contains(argument))
                        {
                            selectedPT.addArgument(argument);
                            break;
                        }
                    }
                }



                i = 0;

                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 210 + i * 25), new Vector2(120, 20)), "Preconditions", labelStyle);


                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 240), new Vector2(120, 20)), "Logical operator");


                string[] operatorOptions = new string[] { "AND", "OR" };

                int selectedOperator = Array.IndexOf <string> (operatorOptions, selectedPT.logicalOperator.ToString());

                selectedOperator = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 100, editorPos.y + 240), new Vector2(50, 20)),
                                                   selectedOperator, operatorOptions);
                if (selectedOperator == 0)
                {
                    selectedPT.logicalOperator = LogicalOperator.AND;
                }
                else if (selectedOperator == 1)
                {
                    selectedPT.logicalOperator = LogicalOperator.OR;
                }



                scrollPositionPre = GUI.BeginScrollView(new Rect(new Vector2(editorPos.x, editorPos.y + 265), new Vector2(300, 50)),
                                                        scrollPositionPre, new Rect(new Vector2(editorPos.x, editorPos.y + 265),
                                                                                    new Vector2(275, 50 + selectedPT.preconditions.Count * 10)), false, false);

                if (selectedPT.preconditions.Count > 0)
                {
                    for (i = 0; i < selectedPT.preconditions.Count; i++)
                    {
                        Atom pre = selectedPT.preconditions[i];


                        string preLabelName = "";

                        if (pre.sign == false)
                        {
                            preLabelName = string.Concat("NOT(", pre.name, "(");
                        }
                        else if (pre.sign == true)
                        {
                            preLabelName = string.Concat(pre.name, "(");
                        }

                        foreach (Term var in pre.terms)
                        {
                            preLabelName = string.Concat(preLabelName, var.key);

                            if (pre.terms.IndexOf(var) < pre.terms.Count - 1)
                            {
                                preLabelName = string.Concat(preLabelName, ",");
                            }
                        }

                        if (pre.sign == true)
                        {
                            preLabelName = string.Concat(preLabelName, ")");
                        }
                        else if (pre.sign == false)
                        {
                            preLabelName = string.Concat(preLabelName, "))");
                        }


                        GUI.Label(new Rect(
                                      new Vector2(editorPos.x, editorPos.y + 265 + i * 25), new Vector2(200, 50)), preLabelName);



                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 265 + i * 25),
                                                new Vector2(50, 15)), "Edit"))
                        {
                            ConditionEditorWindow.ShowWindow(agent, pre);
                        }

                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 175, editorPos.y + 265 + i * 25),
                                                new Vector2(50, 15)), "Delete"))
                        {
                            selectedPT.deletePrecondition(pre);

                            ConditionEditorWindow.GetWindow <ConditionEditorWindow>().Close();
                        }
                    }
                }


                GUI.EndScrollView();


                if (selectedPT.preconditions.Count == 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 275);
                }

                else if (selectedPT.preconditions.Count > 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 315);
                }


                if (GUI.Button(new Rect(AddButtonPos,
                                        new Vector2(75, 20)),
                               "Add "))
                {
                    Atom pre = new Atom("New Condition");

                    selectedPT.addPrecondition(pre);

                    ConditionEditorWindow.ShowWindow(agent, pre);
                }



                i = 0;

                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 350 + i * 25), new Vector2(120, 20)), "Concurrent tasks", labelStyle);


                scrollPositionCunc = GUI.BeginScrollView(new Rect(new Vector2(editorPos.x, editorPos.y + 375), new Vector2(350, 75)),
                                                         scrollPositionCunc, new Rect(new Vector2(editorPos.x, editorPos.y + 375),
                                                                                      new Vector2(325, 75 + selectedPT.cuncurrentTasks.Count * 10)), false, false);

                for (i = 0; i < selectedPT.cuncurrentTasks.Count; i++)
                {
                    CuncurrentTask cuncurrent = selectedPT.cuncurrentTasks[i];


                    string[] options = new string[] { "True", "False" };

                    int selectedIndex = 0;

                    if (cuncurrent.sign == true)
                    {
                        selectedIndex = 0;
                    }

                    else if (cuncurrent.sign == false)
                    {
                        selectedIndex = 1;
                    }

                    selectedIndex = EditorGUI.Popup(new Rect(new Vector2(editorPos.x, editorPos.y + 375 + i * 25), new Vector2(75, 20)), selectedIndex, options);


                    if (selectedIndex == 0)
                    {
                        cuncurrent.sign = true;
                    }
                    else if (selectedIndex == 1)
                    {
                        cuncurrent.sign = false;
                    }

                    cuncurrent.task = GUI.TextField(new Rect(new Vector2(editorPos.x + 100, editorPos.y + 375 + i * 25), new Vector2(75, 20)), cuncurrent.task);

                    selectedPT.cuncurrentTasks[i] = cuncurrent;


                    int selectedVar = agent.domainVariables.IndexOf(agent.domainVariables.Find((Term t) => t.key == cuncurrent.agentVarName));

                    if (selectedVar == -1)
                    {
                        selectedVar = 0;
                    }

                    List <string> variablesNames = new List <string> ();

                    foreach (Term var in agent.domainVariables)
                    {
                        variablesNames.Add(var.key);
                    }


                    selectedVar = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 200, editorPos.y + 375 + i * 25), new Vector2(50, 20)),
                                                  selectedVar, variablesNames.ToArray());

                    cuncurrent.agentVarName = agent.domainVariables [selectedVar].key;


                    if (GUI.Button(new Rect(new Vector2(editorPos.x + 275, editorPos.y + 375 + i * 25), new Vector2(45, 15)), "Delete"))
                    {
                        selectedPT.cuncurrentTasks.Remove(selectedPT.cuncurrentTasks[i]);
                        ConditionEditorWindow.GetWindow <ConditionEditorWindow>().Close();
                    }
                }

                GUI.EndScrollView();


                if (selectedPT.cuncurrentTasks.Count == 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 375);
                }

                else if (selectedPT.cuncurrentTasks.Count > 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 425);
                }

                if (GUI.Button(new Rect(AddButtonPos, new Vector2(75, 20)), "Add"))
                {
                    selectedPT.cuncurrentTasks.Add(new CuncurrentTask(" ", false, agent.domainVariables[0].key));
                }



                i = 0;


                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 475 + i * 25), new Vector2(120, 20)), "Effects", labelStyle);


                scrollPositionEff = GUI.BeginScrollView(new Rect(new Vector2(editorPos.x, editorPos.y + 500), new Vector2(300, 50)),
                                                        scrollPositionEff, new Rect(new Vector2(editorPos.x, editorPos.y + 475),
                                                                                    new Vector2(275, 50 + selectedPT.effects.Count * 10)), false, false);


                if (selectedPT.effects.Count > 0)
                {
                    for (i = 0; i < selectedPT.effects.Count; i++)
                    {
                        Atom eff = selectedPT.effects[i];



                        string effLabelName = "";

                        if (eff.sign == false)
                        {
                            effLabelName = string.Concat("NOT(", eff.name, "(");
                        }

                        else if (eff.sign == true)
                        {
                            effLabelName = string.Concat(eff.name, "(");
                        }

                        foreach (Term var in eff.terms)
                        {
                            effLabelName = string.Concat(effLabelName, var.key);

                            if (eff.terms.IndexOf(var) < eff.terms.Count - 1)
                            {
                                effLabelName = string.Concat(effLabelName, ",");
                            }
                        }


                        if (eff.sign == true)
                        {
                            effLabelName = string.Concat(effLabelName, ")");
                        }
                        else if (eff.sign == false)
                        {
                            effLabelName = string.Concat(effLabelName, "))");
                        }


                        GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 475 + i * 25), new Vector2(200, 50)), effLabelName);

                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 475 + i * 25),
                                                new Vector2(45, 15)), "Edit"))
                        {
                            ConditionEditorWindow.ShowWindow(agent, eff);
                        }

                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 175, editorPos.y + 475 + i * 25),
                                                new Vector2(45, 15)), "Delete"))
                        {
                            selectedPT.deleteEffect(eff);
                            ConditionEditorWindow.GetWindow <ConditionEditorWindow>().Close();
                        }
                    }
                }

                GUI.EndScrollView();


                if (selectedPT.effects.Count == 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 500);
                }

                else if (selectedPT.effects.Count > 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 550);
                }

                if (GUI.Button(new Rect(AddButtonPos,
                                        new Vector2(75, 20)),
                               "Add"))
                {
                    Atom eff = new Atom("New Effect");

                    selectedPT.addEffect(eff);

                    ConditionEditorWindow.ShowWindow(agent, eff);
                }



                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 600), new Vector2(120, 20)), "Ground Action", labelStyle);


                string[] actionsOptions = { "Move", "Animate", "Custom" };

                if (selectedPT.actionType == ActionTypes.MOVEMENT)
                {
                    actionIndex = 0;
                }
                else if (selectedPT.actionType == ActionTypes.ANIMATION)
                {
                    actionIndex = 1;
                }
                else if (selectedPT.actionType == ActionTypes.CUSTOM)
                {
                    actionIndex = 2;
                }


                //if (GUI.Button (new Rect(new Vector2(editorPos.x, editorPos.y + 500), new Vector2(200,20)),"Edit Action"));
                actionIndex = EditorGUI.Popup(new Rect(new Vector2(editorPos.x, editorPos.y + 625), new Vector2(100, 20)), actionIndex, actionsOptions);

                /*if (selectedPT.groundData == null)
                 *      selectedPT.groundData = new GroundData();*/

                if (actionIndex == 0)
                {
                    selectedPT.actionType = ActionTypes.MOVEMENT;

                    GUI.Label(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 625), new Vector2(100, 20)), "Speed");


                    selectedPT.groundData.speed = EditorGUI.FloatField(new Rect(new Vector2(editorPos.x + 160, editorPos.y + 625), new Vector2(50, 20)), selectedPT.groundData.speed);


                    GUI.Label(new Rect(new Vector2(editorPos.x + 220, editorPos.y + 625), new Vector2(100, 20)), "Radius");


                    selectedPT.groundData.radius = EditorGUI.FloatField(new Rect(new Vector2(editorPos.x + 270, editorPos.y + 625), new Vector2(50, 20)), selectedPT.groundData.radius);


                    if (agent.gameObject.GetComponent <Animator>() != null)
                    {
                        GUI.Label(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 650), new Vector2(100, 20)), "Animation ");


                        selectedPT.groundData.animationState = GUI.TextField(new Rect(new Vector2(editorPos.x + 180, editorPos.y + 650), new Vector2(50, 20)), selectedPT.groundData.animationState);
                    }
                }

                else if (actionIndex == 1)
                {
                    selectedPT.actionType = ActionTypes.ANIMATION;

                    if (agent.gameObject.GetComponent <Animator>() != null)
                    {
                        GUI.Label(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 625), new Vector2(100, 20)), "State");

                        selectedPT.groundData.animationState = GUI.TextField(new Rect(new Vector2(editorPos.x + 150, editorPos.y + 625), new Vector2(75, 20)),
                                                                             selectedPT.groundData.animationState);
                    }
                }

                else if (actionIndex == 2)
                {
                    selectedPT.actionType = ActionTypes.CUSTOM;


                    selectedPT.groundData.name = GUI.TextField(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 625), new Vector2(75, 20)),
                                                               selectedPT.groundData.name.ToString());

                    if (GUI.Button(new Rect(new Vector2(editorPos.x + 200, editorPos.y + 625),
                                            new Vector2(100, 20)), "Create/Open"))
                    {
                        if (!File.Exists("Assets/Actions/" + (string)selectedPT.groundData.name + ".cs"))
                        {
                            using (var stream = new StreamWriter("Assets/Actions/" + (string)selectedPT.groundData.name + ".cs")) {
                                stream.Write(
                                    @"using UnityEngine;
using System;
using System.Collections;


public class " + (string)selectedPT.groundData.name + @": PrimitiveTask, IGroundAction
{
		GameObject agentObj;

		public "         + (string)selectedPT.groundData.name + @"(HTNAgent a, string n){

		name = n;
		agentObj = a.gameObject;	

	}


	public string Name{

		get{return name;}
		set {name = value;}
	}

	//This starts agent's action execution
	public void Start(ActionManager manager, State state){
		

		
		//Monitor precondition validity in current state: if not valid, notify to manager
		if (preconditions.Count > 0 && !RuleMatcher.MatchCondition (preconditions, state,logicalOperator))
			manager.NotValid ();
		
		

		else {
			
			foreach (CuncurrentTask cuncurrent in cuncurrentTasks)
				if (!CheckCuncurrency (cuncurrent,agentObj.GetComponent<HTNAgent>())){

						manager.Suspend ();

						return;
					}

		
			//Add custom code
		}
		
	}


	//Runs at every frame during action's execution
	public void Update(ActionManager manager, State state){
		

		
		//Monitor preconditions validity in current state: if not valid, notify to manager
		if (preconditions.Count > 0 && !RuleMatcher.MatchCondition (preconditions, state,logicalOperator))
			manager.NotValid ();

		
		else {

			foreach (CuncurrentTask cuncurrent in cuncurrentTasks)
				if (!CheckCuncurrency (cuncurrent,agentObj.GetComponent<HTNAgent>())){

						manager.Suspend ();

						return;
					}

			//Add custom code

		}
		
	}

	public void OnComplete(ActionManager manager, State state){

		//Add custom code


		//Flag as completed
		completed = true;

		//Apply effects
		foreach (Atom atom in effects){
			
			Atom fact = new Atom(atom.name,atom.sign);
			
			foreach (Term var in atom.terms)
				fact.addTerm(new Term(var.value));
			

			Atom existingFact = state.Contains(fact);

			if (state.Contains(fact) == null)
				state.addFact(fact);
			else 
				existingFact.sign = fact.sign;
		}


		//Call next action
		manager.NextAction ();
	}

}");

                                stream.Close();
                            }
                        }

                        UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal("Assets/Actions/" + (string)selectedPT.groundData.name + ".cs", 1);
                    }
                }
            }


            else if (selected.type == itemType.METHOD)
            {
                Method selectedM = (Method)selected.item;


                GUI.Label(new Rect(editorPos, itemSize), "Name", labelStyle);

                selectedM.name = GUI.TextField(new Rect(new Vector2(editorPos.x + 50, editorPos.y), new Vector2(75, 20)),
                                               selectedM.name);


                if (AtomListWindow.atomNames.list.Count > 0)
                {
                    GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 75), itemSize), "Preference", labelStyle);

                    string[] options = new string[PersonalityEditorWindow.personalities.list.Count + 2];

                    options [0] = "none";

                    PersonalityEditorWindow.personalities.list.CopyTo(options, 1);



                    persIndex = new List <string>(options).IndexOf(selectedM.preference);



                    persIndex = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 100, editorPos.y + 75), itemSize), persIndex, options);

                    selectedM.preference = options[persIndex];
                }



                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 125), new Vector2(120, 20)), "Preconditions", labelStyle);



                GUI.Label(new Rect(new Vector2(editorPos.x, editorPos.y + 150), new Vector2(120, 20)), "Logical operator");


                string[] operatorOptions = new string[] { "AND", "OR" };

                int selectedOperator = Array.IndexOf <string> (operatorOptions, selectedM.logicalOperator.ToString());

                selectedOperator = EditorGUI.Popup(new Rect(new Vector2(editorPos.x + 100, editorPos.y + 150), new Vector2(50, 20)),
                                                   selectedOperator, operatorOptions);
                if (selectedOperator == 0)
                {
                    selectedM.logicalOperator = LogicalOperator.AND;
                }
                else if (selectedOperator == 1)
                {
                    selectedM.logicalOperator = LogicalOperator.OR;
                }



                scrollPositionMethoPre = GUI.BeginScrollView(new Rect(new Vector2(editorPos.x, editorPos.y + 175), new Vector2(300, 100)),
                                                             scrollPositionMethoPre, new Rect(new Vector2(editorPos.x, editorPos.y + 175),
                                                                                              new Vector2(275, 100 + selectedM.preconditions.Count * 25)), false, false);


                int i = 0;

                if (selectedM.preconditions.Count > 0)
                {
                    for (i = 0; i < selectedM.preconditions.Count; i++)
                    {
                        Atom pre = selectedM.preconditions[i];

                        string preLabelName = "";

                        if (pre.sign == false)
                        {
                            preLabelName = string.Concat("NOT(", pre.name, "(");
                        }
                        else if (pre.sign == true)
                        {
                            preLabelName = string.Concat(pre.name, "(");
                        }

                        foreach (Term var in pre.terms)
                        {
                            preLabelName = string.Concat(preLabelName, var.key);

                            if (pre.terms.IndexOf(var) < pre.terms.Count - 1)
                            {
                                preLabelName = string.Concat(preLabelName, ",");
                            }
                        }

                        if (pre.sign == true)
                        {
                            preLabelName = string.Concat(preLabelName, ")");
                        }
                        else if (pre.sign == false)
                        {
                            preLabelName = string.Concat(preLabelName, "))");
                        }


                        GUI.Label(new Rect(
                                      new Vector2(editorPos.x, editorPos.y + 200 + i * 25), new Vector2(200, 50)), preLabelName);



                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 110, editorPos.y + 200 + i * 25),
                                                new Vector2(45, 15)), "Edit"))
                        {
                            ConditionEditorWindow.ShowWindow(agent, pre);
                        }

                        if (GUI.Button(new Rect(new Vector2(editorPos.x + 175, editorPos.y + 200 + i * 25),
                                                new Vector2(45, 15)), "Delete"))
                        {
                            selectedM.deletePrecondition(pre);

                            ConditionEditorWindow.GetWindow <ConditionEditorWindow>().Close();
                        }
                    }
                }

                GUI.EndScrollView();


                Vector2 AddButtonPos = new Vector2(0, 0);

                if (selectedM.preconditions.Count == 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 175);
                }

                else if (selectedM.preconditions.Count > 0)
                {
                    AddButtonPos = new Vector2(editorPos.x, editorPos.y + 275);
                }


                if (GUI.Button(new Rect(AddButtonPos,
                                        new Vector2(75, 20)),
                               "Add "))
                {
                    Atom pre = new Atom("New Condition");

                    selectedM.addPrecondition(pre);

                    ConditionEditorWindow.ShowWindow(agent, pre);
                }
            }
        }
    }
示例#13
0
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(tableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("ElementList.Layer"), GUILayout.Width(windowWidth * 0.12f));
        GUILayout.Box("", GUILayout.Width(windowWidth * 0.06f));
        GUILayout.Box(TC.get("ElementList.Title"), GUILayout.Width(windowWidth * 0.39f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.29f));
        GUILayout.EndHorizontal();

        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                 GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl().Count;
             i++)
        {
            if (i == selectedElement)
            {
                GUI.skin = selectedElementSkin;
            }

            GUILayout.BeginHorizontal();

            if (
                GUILayout.Button(
                    Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                        GameRources.GetInstance().selectedSceneIndex].getReferencesList()
                    .getAllReferencesDataControl()[i]
                    .getLayer().ToString(),
                    GUILayout.Width(windowWidth * 0.12f)))
            {
                selectedElement = i;
            }

            if (Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                    GameRources.GetInstance().selectedSceneIndex].getReferencesList()
                .getAllReferencesDataControl()[i].getErdc() != null)
            {
                // FOR ELEMENT ERDC
                Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                    GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl()[i]
                .getErdc().setVisible(
                    GUILayout.Toggle(
                        Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                            GameRources.GetInstance().selectedSceneIndex].getReferencesList()
                        .getAllReferencesDataControl()[i].getErdc().isVisible(), "",
                        GUILayout.Width(windowWidth * 0.06f)));
                if (
                    GUILayout.Button(
                        Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                            GameRources.GetInstance().selectedSceneIndex].getReferencesList()
                        .getAllReferencesDataControl()[i]
                        .getErdc().getElementId(), GUILayout.Width(windowWidth * 0.39f)))
                {
                    selectedElement = i;
                }

                if (GUILayout.Button(conditionTex, GUILayout.Width(windowWidth * 0.29f)))
                {
                    selectedElement = i;
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getReferencesList()
                                .getAllReferencesDataControl()[i].getErdc().getConditions());
                }
            }
            else
            {
                if (
                    GUILayout.Button("", GUILayout.Width(windowWidth * 0.06f)))
                {
                    selectedElement = i;
                }
                if (
                    GUILayout.Button("", GUILayout.Width(windowWidth * 0.39f)))
                {
                    selectedElement = i;
                }

                if (GUILayout.Button(conditionTex, GUILayout.Width(windowWidth * 0.29f)))
                {
                    selectedElement = i;
                }
            }


            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();


        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTexture, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            addMenu.menu.ShowAsContext();
        }
        if (GUILayout.Button(moveUp, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getReferencesList()
            .moveElementUp(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl()[
                               selectedElement].getErdc());
        }
        if (GUILayout.Button(moveDown, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getReferencesList()
            .moveElementDown(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                 GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl()[
                                 selectedElement].getErdc());
        }
        if (GUILayout.Button(clearImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getReferencesList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl()[
                               selectedElement].getErdc(), false);
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();


        if (backgroundPath != "")
        {
            GUILayout.BeginArea(infoPreviewRect);
            // Show preview dialog
            // Button visible only is there is at least 1 object
            if (selectedElement != -1 && Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                    GameRources.GetInstance().selectedSceneIndex].getReferencesList().getAllReferencesDataControl()[
                    selectedElement].getErdc() != null)
            {
                if (GUILayout.Button(TC.get("DefaultClickAction.ShowDetails") + "/" + TC.get("GeneralText.Edit")))
                {
                    ObjectInSceneRefrencesEditor window =
                        (ObjectInSceneRefrencesEditor)
                        ScriptableObject.CreateInstance(typeof(ObjectInSceneRefrencesEditor));
                    window.Init(this,
                                Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex], selectedElement);
                }
            }
            GUILayout.EndArea();
            GUI.DrawTexture(previewRect, backgroundPreviewTex, ScaleMode.ScaleToFit);
        }
        else
        {
            GUILayout.BeginArea(infoPreviewRect);
            GUILayout.Button("No background!");
            GUILayout.EndArea();
        }
    }
示例#14
0
    public override void Draw(int aID)
    {
        /*
         * Timer table
         */
        GUILayout.BeginArea(timerTableRect);

        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("TimersList.Timer"), GUILayout.MaxWidth(windowWidth * 0.3f));
        GUILayout.Box(TC.get("TimersList.Time"), GUILayout.MaxWidth(windowWidth * 0.3f));
        GUILayout.Box(TC.get("TimersList.Display"), GUILayout.MaxWidth(windowWidth * 0.3f));
        GUILayout.EndHorizontal();

        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i < Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers().Count;
             i++)
        {
            if (i == selectedTimer)
            {
                GUI.skin = selectedAreaSkin;
            }
            else
            {
                GUI.skin = noBackgroundSkin;
            }

            GUILayout.BeginHorizontal();

            if (i == selectedTimer)
            {
                if (GUILayout.Button("Timer #" + i, GUILayout.MaxWidth(windowWidth * 0.3f)))
                {
                    OnTimerSelectedChange(i);
                }

                timerTime = GUILayout.TextField(timerTime, GUILayout.MaxWidth(windowWidth * 0.3f));
                timerTime = (Regex.Match(timerTime, "^[0-9]{1,4}$").Success ? timerTime : timerTimeLast);
                if (timerTime != timerTimeLast)
                {
                    OnTimerTime(timerTime);
                }

                Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[i].setShowTime(GUILayout
                                                                                                                    .Toggle(
                                                                                                                        Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[i]
                                                                                                                        .isShowTime(),
                                                                                                                        "", GUILayout.MaxWidth(windowWidth * 0.3f)));
            }
            else
            {
                if (GUILayout.Button("Timer #" + i, GUILayout.MaxWidth(windowWidth * 0.3f)))
                {
                    OnTimerSelectedChange(i);
                }
                if (
                    GUILayout.Button(
                        Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[i].getTime()
                        .ToString(), GUILayout.MaxWidth(windowWidth * 0.3f)))
                {
                    OnTimerSelectedChange(i);
                }
                if (
                    GUILayout.Button(
                        Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[i].isShowTime().ToString(), GUILayout.MaxWidth(windowWidth * 0.3f)))
                {
                    OnTimerSelectedChange(i);
                }
            }
            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }

        GUILayout.EndScrollView();

        GUILayout.EndArea();

        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getTimersList().addElement(Controller.TIMER, "");
        }
        if (GUILayout.Button(duplicateTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList()
            .duplicateElement(
                Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[selectedTimer]);
        }
        if (GUILayout.Button(clearTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList()
            .deleteElement(
                Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[selectedTimer],
                false);
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();

        /*
         * Properties panel
         */

        if (selectedTimer != -1 &&
            Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[selectedTimer] != null)
        {
            GUILayout.BeginArea(settingsTable);

            GUILayout.Label(TC.get("Timer.Documentation"));
            fullTimerDescription = GUILayout.TextArea(fullTimerDescription, GUILayout.MinHeight(0.1f * windowHeight));
            if (fullTimerDescription != fullTimerDescriptionLast)
            {
                OnTimerDocumentationChanged(fullTimerDescription);
            }


            GUILayout.FlexibleSpace();


            GUILayout.Label(TC.get("TimersList.Time"));

            GUILayout.BeginHorizontal();
            if (
                !Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[selectedTimer]
                .isShowTime())
            {
                GUI.enabled = false;
            }
            GUILayout.Label(TC.get("Timer.DisplayName"));
            displayName = GUILayout.TextField(displayName);
            if (displayName != displayNameLast)
            {
                OnTimerDisplayNameChanged(displayName);
            }

            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList().getTimers()[selectedTimer].setCountDown(GUILayout.Toggle(Controller.getInstance()
                                                                                      .getSelectedChapterDataControl()
                                                                                      .getTimersList().getTimers()[selectedTimer].isCountDown(), TC.get("Timer.CountDown")));

            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList().getTimers()[selectedTimer].setShowWhenStopped(GUILayout.Toggle(Controller.getInstance()
                                                                                            .getSelectedChapterDataControl()
                                                                                            .getTimersList().getTimers()[selectedTimer].isShowWhenStopped(), TC.get("Timer.ShowWhenStopped")));
            GUI.enabled = true;
            GUILayout.EndHorizontal();


            GUILayout.FlexibleSpace();


            GUILayout.Label(TC.get("Timer.LoopControl"));
            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList().getTimers()[selectedTimer].setMultipleStarts(GUILayout.Toggle(Controller.getInstance()
                                                                                           .getSelectedChapterDataControl()
                                                                                           .getTimersList().getTimers()[selectedTimer].isMultipleStarts(), TC.get("Timer.MultipleStarts")));
            GUILayout.Label(TC.get("Timer.MultipleStartsDesc"), smallFontStyle);
            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList().getTimers()[selectedTimer].setRunsInLoop(GUILayout.Toggle(Controller.getInstance()
                                                                                       .getSelectedChapterDataControl()
                                                                                       .getTimersList().getTimers()[selectedTimer].isRunsInLoop(), TC.get("Timer.RunsInLoop")));
            GUILayout.Label(
                TC.get("Timer.RunsInLoopDesc"), smallFontStyle);


            GUILayout.FlexibleSpace();


            GUILayout.Label(TC.get("Timer.InitConditions"));
            if (GUILayout.Button(TC.get("GeneralText.EditInitConditions")))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(Controller.getInstance()
                            .getSelectedChapterDataControl()
                            .getTimersList().getTimers()[selectedTimer].getInitConditions());
            }


            GUILayout.FlexibleSpace();


            GUILayout.Label(TC.get("Timer.EndConditions"));
            Controller.getInstance()
            .getSelectedChapterDataControl()
            .getTimersList().getTimers()[selectedTimer].setUsesEndCondition(
                GUILayout.Toggle(Controller.getInstance()
                                 .getSelectedChapterDataControl()
                                 .getTimersList().getTimers()[selectedTimer].isUsesEndCondition(),
                                 TC.get("Timer.UsesEndConditionShort")));
            if (
                !Controller.getInstance().getSelectedChapterDataControl().getTimersList().getTimers()[selectedTimer]
                .isUsesEndCondition())
            {
                GUI.enabled = false;
            }
            if (GUILayout.Button(TC.get("GeneralText.EditEndConditions")))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(Controller.getInstance()
                            .getSelectedChapterDataControl()
                            .getTimersList().getTimers()[selectedTimer].getEndConditions());
            }
            GUI.enabled = true;


            GUILayout.FlexibleSpace();


            GUILayout.BeginHorizontal();
            GUILayout.Label(TC.get("Timer.Effects"), GUILayout.Width(0.45f * windowWidth));
            GUILayout.Label(TC.get("Timer.PostEffects"), GUILayout.Width(0.45f * windowWidth));
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (GUILayout.Button(TC.get("GeneralText.EditEffects"), GUILayout.Width(0.45f * windowWidth)))
            {
                EffectEditorWindow window =
                    (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                window.Init(Controller.getInstance()
                            .getSelectedChapterDataControl()
                            .getTimersList().getTimers()[selectedTimer].getEffects());
            }
            if (GUILayout.Button(TC.get("GeneralText.EditPostEffects"), GUILayout.Width(0.45f * windowWidth)))
            {
                EffectEditorWindow window =
                    (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                window.Init(Controller.getInstance()
                            .getSelectedChapterDataControl()
                            .getTimersList().getTimers()[selectedTimer].getPostEffects());
            }
            GUILayout.EndHorizontal();

            GUILayout.EndArea();
        }
    }
示例#15
0
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(tableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("Barrier.Title"), GUILayout.Width(windowWidth * 0.45f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.45f));
        GUILayout.EndHorizontal();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                 GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriersList().Count;
             i++)
        {
            if (i == selectedArea)
            {
                GUI.skin = selectedAreaSkin;
            }

            GUILayout.BeginHorizontal();

            if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                     GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriersList()[i].getId(),
                                 GUILayout.Width(windowWidth * 0.44f)))
            {
                selectedArea = i;
            }

            if (GUILayout.Button(conditionTex, GUILayout.Width(windowWidth * 0.44f)))
            {
                selectedArea = i;
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriersList()[i].getConditions());
            }

            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();



        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTexture, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            BarrierNewName window =
                (BarrierNewName)ScriptableObject.CreateInstance(typeof(BarrierNewName));
            window.Init(this, "IdBarrier");
        }
        if (GUILayout.Button(duplicateImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getBarriersList()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                  GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriers()[selectedArea]);
        }
        if (GUILayout.Button(moveUp, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getBarriersList()
            .moveElementUp(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriers()[selectedArea]);
        }
        if (GUILayout.Button(moveDown, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getBarriersList()
            .moveElementDown(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                 GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriers()[selectedArea]);
        }
        if (GUILayout.Button(clearImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getBarriersList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getBarriersList().getBarriers()[selectedArea],
                           false);
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();


        if (backgroundPath != "")
        {
            GUILayout.BeginArea(infoPreviewRect);
            // Show preview dialog
            if (GUILayout.Button(TC.get("DefaultClickAction.ShowDetails") + "/" + TC.get("GeneralText.Edit")))
            {
                //
                BarrierEditor window =
                    (BarrierEditor)ScriptableObject.CreateInstance(typeof(BarrierEditor));
                window.Init(this, Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex], selectedArea);
            }
            GUILayout.EndArea();
            GUI.DrawTexture(previewRect, backgroundPreviewTex, ScaleMode.ScaleToFit);
        }
        else
        {
            GUILayout.BeginArea(infoPreviewRect);
            GUILayout.Button("No background!");
            GUILayout.EndArea();
        }
    }
    public void Awake()
    {
        resourcesEditor = new ResourcesEditor {
            ShowResourcesList = true
        };
        conditionsTex   = Resources.Load <Texture2D>("EAdventureData/img/icons/conditions-24x24");
        noConditionsTex = Resources.Load <Texture2D>("EAdventureData/img/icons/no-conditions-24x24");

        actionsList = new DataControlList()
        {
            footerHeight  = 25,
            elementHeight = 40,
            Columns       = new System.Collections.Generic.List <ColumnList.Column>()
            {
                new ColumnList.Column()
                {
                    Text        = TC.get("ActionsList.ActionName"),
                    SizeOptions = new GUILayoutOption[] { GUILayout.Width(150) }
                },
                new ColumnList.Column()
                {
                    Text        = TC.get("DescriptionList.Description"),
                    SizeOptions = new GUILayoutOption[] { GUILayout.ExpandWidth(true) }
                },
                new ColumnList.Column()
                {
                    Text        = TC.get("ActionsList.NeedsGoTo"),
                    SizeOptions = new GUILayoutOption[] { GUILayout.Width(120) }
                },
                new ColumnList.Column()
                {
                    Text        = TC.get("ActionsList.Conditions"),
                    SizeOptions = new GUILayoutOption[] { GUILayout.Width(70) }
                },
                new ColumnList.Column()
                {
                    Text        = TC.get("Element.Effects"),
                    SizeOptions = new GUILayoutOption[] { GUILayout.Width(70) }
                }
            },
            drawCell = (rect, index, column, isActive, isFocused) =>
            {
                var action = actionsList.list[index] as ActionDataControl;
                switch (column)
                {
                case 0:
                {
                    var name = action.getContent() is CustomAction ? ((CustomAction)action.getContent()).getName() : action.getTypeName();

                    var leftHalf = new Rect(rect);
                    leftHalf.width /= 2f;
                    var rightHalf = new Rect(leftHalf);
                    rightHalf.x += leftHalf.width;

                    if (action.hasIdTarget())
                    {
                        rightHalf.height = 25;
                        EditorGUI.LabelField(leftHalf, name);
                        if (!isActive)
                        {
                            EditorGUI.LabelField(rightHalf, !string.IsNullOrEmpty(action.getIdTarget()) ? action.getIdTarget() : "---");
                        }
                        else
                        {
                            EditorGUI.BeginChangeCheck();
                            string   selected = string.Empty;
                            string[] choices  = new string[0];
                            switch ((action.getContent() as Action).getType())
                            {
                            case Action.DRAG_TO:
                            case Action.CUSTOM_INTERACT:
                                choices = Controller.Instance.IdentifierSummary.combineIds(new System.Type[] { typeof(Item), typeof(NPC), typeof(ActiveArea) });
                                break;

                            case Action.GIVE_TO:
                                choices = Controller.Instance.IdentifierSummary.getIds <NPC>();
                                break;

                            case Action.USE_WITH:
                                choices = Controller.Instance.IdentifierSummary.combineIds(new System.Type[] { typeof(Item), typeof(ActiveArea) });
                                break;
                            }

                            var selectedIndex = EditorGUI.Popup(rightHalf, System.Array.FindIndex(choices, action.getIdTarget().Equals), choices);
                            if (EditorGUI.EndChangeCheck())
                            {
                                if (selectedIndex >= 0 && selectedIndex < choices.Length)
                                {
                                    selected = choices[selectedIndex];
                                    action.setIdTarget(selected);
                                }
                            }
                        }
                    }
                    else if (action.getType() == Controller.ACTION_TALK_TO)
                    {
                        EditorGUI.LabelField(leftHalf, name);
                        var triggerConversationEffect = action.getEffects().getEffects().Find(e => e is TriggerConversationEffect) as TriggerConversationEffect;
                        if (triggerConversationEffect != null)
                        {
                            var conversationId = triggerConversationEffect.getTargetId();
                            if (GUI.Button(rightHalf, "Open"))
                            {
                                var conversationsList = Controller.Instance.SelectedChapterDataControl.getConversationsList();
                                var conversation      = conversationsList.getConversations().Find(c => c.getId() == conversationId);
                                Controller.Instance.SelectElement(conversation);
                            }
                        }
                    }
                    else
                    {
                        EditorGUI.LabelField(rect, name);
                    }
                }
                break;

                case 1:
                    EditorGUI.BeginChangeCheck();
                    var documentation = EditorGUI.TextArea(rect, action.getDocumentation() ?? string.Empty);
                    if (EditorGUI.EndChangeCheck())
                    {
                        action.setDocumentation(documentation);
                    }
                    break;

                case 2:
                    if (Controller.Instance.PlayerMode == Controller.FILE_ADVENTURE_1STPERSON_PLAYER)
                    {
                        EditorGUI.LabelField(rect, TC.get("ActionsList.NotRelevant"));
                    }
                    else
                    {
                        var leftHalf = new Rect(rect);
                        leftHalf.width /= 2f;
                        var rightHalf = new Rect(leftHalf);
                        rightHalf.x += leftHalf.width;

                        EditorGUI.BeginChangeCheck();
                        var needsToGo = EditorGUI.Toggle(leftHalf, action.getNeedsGoTo());
                        if (EditorGUI.EndChangeCheck())
                        {
                            action.setNeedsGoTo(needsToGo);
                        }

                        EditorGUI.BeginChangeCheck();
                        var distance = EditorGUI.IntField(rightHalf, action.getKeepDistance());
                        if (EditorGUI.EndChangeCheck())
                        {
                            action.setKeepDistance(distance);
                        }
                        ;
                    }
                    break;

                case 3:
                    if (GUI.Button(rect, action.getConditions().getBlocksCount() > 0 ? conditionsTex : noConditionsTex))
                    {
                        ConditionEditorWindow window = ScriptableObject.CreateInstance <ConditionEditorWindow>();
                        window.Init(action.getConditions());
                    }
                    break;

                case 4:
                    if (GUI.Button(rect, "Effects"))
                    {
                        EffectEditorWindow window = ScriptableObject.CreateInstance <EffectEditorWindow>();
                        window.Init(action.getEffects());
                    }
                    break;
                }
            }
        };

        actionsList.onSelectCallback += (list) =>
        {
            var i       = list.index;
            var actions = ActionsListDataControl.getActions();
            customAction = i != -1 && actions[i] is CustomActionDataControl ? actions[i] as CustomActionDataControl : null;
            if (customAction != null)
            {
                resourcesEditor.Data = customAction;
            }
        };

        actionsList.onRemoveCallback += (list) =>
        {
            customAction = null;
        };
    }
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(globalStatesTableRect);
        GUILayout.Box(TC.get("GlobalStatesList.ID"), GUILayout.Width(0.85f * windowWidth));

        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl().getGlobalStates().Count;
             i++)
        {
            if (i != selectedGlobalState)
            {
                GUI.skin = noBackgroundSkin;

                if (
                    GUILayout.Button(
                        Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl().getGlobalStates()[
                            i].getId(), GUILayout.Width(0.85f * windowWidth)))
                {
                    OnSelectedGlobalStateChanged(i);
                }
            }
            else
            {
                GUI.skin = selectedAreaSkin;

                globalStateName = GUILayout.TextField(globalStateName, GUILayout.Width(0.85f * windowWidth));
                if (!globalStateName.Equals(globalStateNameLast))
                {
                    OnGlobalStateNameChanged(globalStateName);
                }
            }
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();

        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl()
            .addElement(Controller.GLOBAL_STATE, "GlobalState" + Random.Range(0, 10000).ToString());
        }
        if (GUILayout.Button(duplicateTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl().getGlobalStates()[selectedGlobalState]);
        }
        if (GUILayout.Button(clearTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getGlobalStatesListDataControl().getGlobalStates()[selectedGlobalState], false);
            selectedGlobalState = -1;
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();

        if (selectedGlobalState != -1)
        {
            GUILayout.Space(10);
            GUILayout.BeginArea(descriptionRect);
            GUILayout.Label(TC.get("GlobalState.Documentation"));
            GUILayout.Space(10);
            globalStateDocumentation = GUILayout.TextArea(globalStateDocumentation, GUILayout.MinHeight(0.15f * windowHeight));
            if (!globalStateDocumentation.Equals(globalStateDocumentationLast))
            {
                OnGlobalStateDocumentationChanged(globalStateDocumentation);
            }
            GUILayout.EndArea();

            GUILayout.BeginArea(conditionsRect);
            if (GUILayout.Button(TC.get("GlobalState.Conditions")))
            {
                ConditionEditorWindow window =
                    (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                window.Init(Controller.getInstance()
                            .getSelectedChapterDataControl()
                            .getGlobalStatesListDataControl().getGlobalStates()[selectedGlobalState].getController());
            }
            GUILayout.EndArea();
        }
    }
示例#18
0
        protected void OnGUI()
        {
            if (conditionStyle == null)
            {
                conditionStyle = new GUIStyle(GUI.skin.box);
                conditionStyle.normal.background = TextureUtil.MakeTex(1, 1, new Color(0.627f, 0.627f, 0.627f));
            }

            if (eitherConditionStyle == null)
            {
                eitherConditionStyle = new GUIStyle(GUI.skin.box);
                eitherConditionStyle.normal.background = TextureUtil.MakeTex(1, 1, new Color(0.568f, 0.568f, 0.568f));
                eitherConditionStyle.padding.left      = 15;
            }

            if (closeStyle == null)
            {
                closeStyle                   = new GUIStyle(GUI.skin.button);
                closeStyle.padding           = new RectOffset(0, 0, 0, 0);
                closeStyle.margin            = new RectOffset(0, 5, 2, 0);
                closeStyle.normal.textColor  = Color.red;
                closeStyle.focused.textColor = Color.red;
                closeStyle.active.textColor  = Color.red;
                closeStyle.hover.textColor   = Color.red;
            }

            if (collapseStyle == null)
            {
                collapseStyle                   = new GUIStyle(GUI.skin.button);
                collapseStyle.padding           = new RectOffset(0, 0, 0, 0);
                collapseStyle.margin            = new RectOffset(0, 5, 2, 0);
                collapseStyle.normal.textColor  = Color.blue;
                collapseStyle.focused.textColor = Color.blue;
                collapseStyle.active.textColor  = Color.blue;
                collapseStyle.hover.textColor   = Color.blue;
            }

            using (new GUILayout.VerticalScope())
            {
                var previous = Milestone.getType();
                GUILayout.Label("The milestone will be reached when");
                Milestone.setType((Completable.Milestone.MilestoneType)EditorGUILayout.Popup((int)Milestone.getType(), milestonetypes));
                if (previous != Milestone.getType())
                {
                    Milestone.setId("");
                }

                switch (Milestone.getType())
                {
                case Completable.Milestone.MilestoneType.CHARACTER:
                    SelectElement <NPC>(Milestone, "Character:");
                    break;

                case Completable.Milestone.MilestoneType.ITEM:
                    SelectElement <Item>(Milestone, "Item:");
                    break;

                case Completable.Milestone.MilestoneType.SCENE:
                    SelectElement <IChapterTarget>(Milestone, "Scene:");
                    break;

                case Completable.Milestone.MilestoneType.COMPLETABLE:
                    SelectElement <Completable>(Milestone, "Completable:");
                    break;

                case Completable.Milestone.MilestoneType.CONDITION:
                    if (Milestone.getConditions() == null)
                    {
                        Milestone.setConditions(new ConditionsController(new Conditions()));
                    }

                    using (new GUILayout.VerticalScope(conditionStyle))
                    {
                        GUILayout.Label("CONDITIONS");
                        if (GUILayout.Button("Add Block"))
                        {
                            Milestone.getConditions().Conditions.Add(new FlagCondition(""));
                        }

                        //##################################################################################
                        //############################### CONDITION HANDLING ###############################
                        //##################################################################################

                        var conditions = Milestone.getConditions().Conditions;
                        ConditionEditorWindow.LayoutConditionEditor(conditions);

                        //##################################################################################
                    }

                    break;
                }

                if (GUILayout.Button("Save milestone"))
                {
                    this.Close();
                }
            }
        }
示例#19
0
        public override void Draw(int aID)
        {
            if (selectedQR == null)
            {
                GUILayout.Label("Please select or create a new QR.");
                return;
            }
            EditorGUILayout.BeginVertical();
            {
                EditorGUI.BeginChangeCheck();
                // Delayed in order to use content to render the QR
                selectedQR.Content = EditorGUILayout.DelayedTextField("Content", selectedQR.Content);
                if (EditorGUI.EndChangeCheck())
                {
                    RegenerateQR();
                }
                EditorGUILayout.LabelField("Documentation");
                selectedQR.Documentation = EditorGUILayout.TextArea(selectedQR.Documentation, GUILayout.Height(200));

                // Conditions and Effects
                EditorGUILayout.BeginHorizontal();
                {
                    if (GUILayout.Button("Conditions"))
                    {
                        ConditionEditorWindow window =
                            (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                        window.Init(selectedQR.Conditions);
                    }
                    if (GUILayout.Button("Effects"))
                    {
                        EffectEditorWindow window =
                            (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                        window.Init(selectedQR.Effects);
                    }
                }
                EditorGUILayout.EndHorizontal();

                // QRCODE and buttons
                EditorGUILayout.BeginHorizontal();
                {
                    var rect = EditorGUILayout.BeginVertical("preBackground", GUILayout.Width(Rect.width * .75f), GUILayout.ExpandHeight(true));
                    {
                        GUILayout.BeginHorizontal();
                        {
                            var hw = Mathf.Min(rect.height * .9f, rect.width * .7f);
                            GUI.DrawTexture(new Rect(rect.x + rect.width / 2f - hw / 2f, rect.y + rect.height / 2f - hw / 2f, hw, hw), qrCodeImage);
                        }
                        GUILayout.EndHorizontal();
                    }
                    EditorGUILayout.EndVertical();

                    EditorGUILayout.BeginVertical();
                    {
                        if (GUILayout.Button("Save"))
                        {
                            var fileName = EditorUtility.SaveFilePanel("Save the QR code", "", "qrcode", "png");
                            if (fileName != null)
                            {
                                File.WriteAllBytes(fileName, qrCodeImage.EncodeToPNG());
                            }
                        }
                        if (GUILayout.Button("Print"))
                        {
                            var printDialog   = new PrintDialog();
                            var printDocument = new PrintDocument();
                            printDialog.Document = printDocument;

                            printDocument.PrintPage += new PrintPageEventHandler((object sender, PrintPageEventArgs ev) =>
                            {
                                float leftMargin = ev.PageBounds.Left;
                                float topMargin  = ev.PageBounds.Top;

                                // Calculate the number of lines per page.
                                var center     = new Vector2(ev.PageBounds.Width, ev.PageBounds.Height) / 2;
                                var qrwh       = Mathf.Min(ev.PageBounds.Width, ev.PageBounds.Height) * (3f / 4f); // Only 3/4 of the space
                                var rectangleF = new System.Drawing.RectangleF(center.x - (qrwh / 2f), center.y - (qrwh / 2f), qrwh, qrwh);

                                var qrBitmap = new System.Drawing.Bitmap(qrCodeImage.width, qrCodeImage.height);
                                Color pixelColor;
                                for (int i = 0; i < qrCodeImage.width; i++)
                                {
                                    for (int j = qrCodeImage.height - 1; j >= 0; j--)
                                    {
                                        pixelColor = qrCodeImage.GetPixel(i, qrCodeImage.height - 1 - j);
                                        qrBitmap.SetPixel(i, j, System.Drawing.Color.FromArgb(
                                                              Mathf.RoundToInt(255 * pixelColor.a),
                                                              Mathf.RoundToInt(255 * pixelColor.r),
                                                              Mathf.RoundToInt(255 * pixelColor.g),
                                                              Mathf.RoundToInt(255 * pixelColor.b)));
                                    }
                                }

                                ev.Graphics.DrawImage(qrBitmap, rectangleF);
                                ev.HasMorePages = false;
                            });

                            var result = printDialog.ShowDialog();
                            // If the result is OK then print the document.
                            if (result == DialogResult.OK)
                            {
                                printDocument.Print();
                            }
                        }
                    }
                    EditorGUILayout.EndVertical();
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();
        }
    public void draw()
    {
        if (closeStyle == null)
        {
            closeStyle                   = new GUIStyle(GUI.skin.button);
            closeStyle.padding           = new RectOffset(0, 0, 0, 0);
            closeStyle.margin            = new RectOffset(0, 5, 2, 0);
            closeStyle.normal.textColor  = Color.red;
            closeStyle.focused.textColor = Color.red;
            closeStyle.active.textColor  = Color.red;
            closeStyle.hover.textColor   = Color.red;
        }

        if (buttonstyle == null)
        {
            buttonstyle         = new GUIStyle();
            buttonstyle.padding = new RectOffset(5, 5, 5, 5);
        }

        GUIStyle style = new GUIStyle();

        style.padding = new RectOffset(5, 5, 5, 5);

        EditorGUILayout.BeginVertical();

        EditorGUILayout.HelpBox(TC.get("ConversationEditor.AtLeastOne"), MessageType.None);
        bool infoShown = false;

        if (myNode.getLineCount() > 0)
        {
            bool isScrolling = false;

            if (myNode.getLineCount() > 10)
            {
                scroll      = EditorGUILayout.BeginScrollView(scroll, GUILayout.MinWidth(360), GUILayout.Height(190));
                isScrolling = true;
            }

            for (int i = 0; i < myNode.getLineCount(); i++)
            {
                EditorGUILayout.BeginHorizontal();
                //myNode.getLine(i).IsEntityFragment = EditorGUILayout.Toggle("Is entity: ", frg.IsEntityFragment);

                bool showInfo = false;
                EditorGUIUtility.labelWidth = GUI.skin.label.CalcSize(new GUIContent(TC.get("ConversationEditor.Speaker"))).x;
                myNode.getLine(i).setName(npc[EditorGUILayout.Popup(TC.get("ConversationEditor.Speaker"), npc.IndexOf(myNode.getLine(i).getName()), npc.ToArray())]);

                EditorGUIUtility.labelWidth = GUI.skin.label.CalcSize(new GUIContent(TC.get("ConversationEditor.Line"))).x;
                myNode.getLine(i).setText(EditorGUILayout.TextField(TC.get("ConversationEditor.Line"), myNode.getLine(i).getText(), GUILayout.Width(200)));

                tmpTex = (myNode.getLine(i).getConditions().getConditionsList().Count > 0
                    ? conditionsTex
                    : noConditionsTex);

                if (GUILayout.Button(tmpTex, noBackgroundSkin.button, GUILayout.Width(15), GUILayout.Height(15)))
                {
                    ConditionEditorWindow window = (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(myNode.getLine(i).getConditions());
                }

                if (GUILayout.Button("X", closeStyle, GUILayout.Width(15), GUILayout.Height(15)))
                {
                    myNode.removeLine(i);
                }
                ;
                EditorGUILayout.EndHorizontal();
            }
            if (isScrolling)
            {
                EditorGUILayout.EndScrollView();
            }
        }


        GUIContent bttext = new GUIContent(TC.get("ConversationLine.DefaultText"));
        Rect       btrect = GUILayoutUtility.GetRect(bttext, style);

        if (GUI.Button(btrect, bttext))
        {
            myNode.addLine(new ConversationLine(TC.get("ConversationLine.PlayerName"), ""));
        }
        ;


        EditorGUILayout.HelpBox(TC.get("ConversationEditor.NodeOption"), MessageType.None);

        EditorGUILayout.BeginHorizontal();
        GUI.enabled = (myNode.getChildCount() == 0) || myNode.getType() == ConversationNodeViewEnum.OPTION;
        bttext      = new GUIContent(TC.get("ConversationEditor.CreateChild"));
        btrect      = GUILayoutUtility.GetRect(bttext, buttonstyle);
        if (GUI.Button(btrect, bttext))
        {
            parent.addChild(myNode, new DialogueConversationNode());
        }
        GUI.enabled = true;

        bttext = new GUIContent(TC.get("ConversationEditor.SetChild"));
        btrect = GUILayoutUtility.GetRect(bttext, buttonstyle);
        if (GUI.Button(btrect, bttext))
        {
            parent.startSetChild(this.myNode, 0);
        }

        tmpTex = (myNode.getEffects().getEffects().Count > 0
            ? effectTex
            : noEffectTex);
        if (GUILayout.Button(tmpTex, noBackgroundSkin.button, GUILayout.Width(24), GUILayout.Height(24)))
        {
            EffectEditorWindow window = (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
            window.Init(myNode.getEffects());
        }

        GUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
    }
    protected void Awake()
    {
        conditionsTex   = (Texture2D)Resources.Load("EAdventureData/img/icons/conditions-24x24", typeof(Texture2D));
        noConditionsTex = (Texture2D)Resources.Load("EAdventureData/img/icons/no-conditions-24x24", typeof(Texture2D));

        appearanceList = new DataControlList()
        {
            RequestRepaint = Repaint,
            headerHeight   = 20,
            footerHeight   = 20,
            Columns        = new List <ColumnList.Column>()
            {
                new ColumnList.Column()
                {
                    Text        = TC.get("Item.LookPanelTitle"),
                    SizeOptions = new GUILayoutOption[]
                    {
                        GUILayout.ExpandWidth(true)
                    }
                },
                new ColumnList.Column()
                {
                    Text        = TC.get("Conditions.Title"),
                    SizeOptions = new GUILayoutOption[]
                    {
                        GUILayout.ExpandWidth(true)
                    }
                }
            },
            drawCell = (rect, index, col, isActive, isFocused) =>
            {
                var resources = dataControl.getResources()[index];
                switch (col)
                {
                case 0:
                    if (index == appearanceList.index)
                    {
                        EditorGUI.BeginChangeCheck();
                        var newname = EditorGUI.TextField(rect, "Resources " + (index + 1), resources.getName());
                        if (EditorGUI.EndChangeCheck())
                        {
                            resources.renameElement(newname);
                        }
                    }
                    else
                    {
                        EditorGUI.LabelField(rect, "Resources " + (index + 1) + ": " + resources.getName());
                    }
                    break;

                case 1:
                    if (GUI.Button(rect, resources.getConditions().getBlocksCount() > 0 ? conditionsTex : noConditionsTex))
                    {
                        appearanceList.index = index;
                        ConditionEditorWindow window = CreateInstance <ConditionEditorWindow>();
                        window.Init(resources.getConditions());
                    }
                    break;
                }
            },
            onSelectCallback = (list) =>
            {
                if (list.index == -1)
                {
                    list.index = 0;
                }
                dataControl.setSelectedResources(list.index);
                if (onAppearanceSelected != null)
                {
                    onAppearanceSelected(dataControl);
                }
            }
        };
    }
示例#22
0
    private void Awake()
    {
        conditionsTex   = Resources.Load <Texture2D>("EAdventureData/img/icons/conditions-24x24");
        noConditionsTex = Resources.Load <Texture2D>("EAdventureData/img/icons/no-conditions-24x24");

        descriptionsList = new DataControlList()
        {
            RequestRepaint = Repaint,
            elementHeight  = 20,
            Columns        = new List <ColumnList.Column>()
            {
                new ColumnList.Column()
                {
                    Text = TC.get("Item.Name")
                },
                new ColumnList.Column()
                {
                    Text = TC.get("Conditions.Title")
                }
            },
            drawCell = (rect, index, column, isActive, isFocused) =>
            {
                var description = descriptions.getDescriptionController(index);
                switch (column)
                {
                case 0:
                    if (index == descriptionsList.index)
                    {
                        description.renameElement(EditorGUI.TextField(rect, description.getName()));
                    }
                    else
                    {
                        EditorGUI.LabelField(rect, description.getName());
                    }
                    break;

                case 1:
                    if (GUI.Button(rect, description.getConditionsController().getBlocksCount() > 0 ? conditionsTex : noConditionsTex))
                    {
                        ConditionEditorWindow window =
                            (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                        window.Init(description.getConditionsController());
                    }
                    break;
                }
            },
            onSelectCallback = (list) =>
            {
                descriptions.setSelectedDescription(list.index);
                description = descriptions.getSelectedDescriptionController();
            }
        };

        descriptionsList.index = 0;

        nameField = new TextWithSoundField()
        {
            Label    = TC.get("Item.Name"),
            FileType = FileType.ITEM_DESCRIPTION_NAME_SOUND
        };

        briefField = new TextWithSoundField()
        {
            Label    = TC.get("Item.Description"),
            FileType = FileType.ITEM_DESCRIPTION_BRIEF_SOUND
        };

        fullField = new TextWithSoundField()
        {
            Label    = TC.get("Item.DetailedDescription"),
            FileType = FileType.ITEM_DESCRIPTION_DETAILED_SOUND
        };
    }
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(actionTableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("Element.Action"), GUILayout.Width(windowWidth * 0.39f));
        GUILayout.Box(TC.get("ActionsList.NeedsGoTo"), GUILayout.Width(windowWidth * 0.39f));
        GUILayout.Box(TC.get("Conditions.Title"), GUILayout.Width(windowWidth * 0.1f));
        GUILayout.EndHorizontal();
        scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.ExpandWidth(false));
        // Action table
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                 GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions().Count;
             i++)
        {
            if (i == selectedAction)
            {
                GUI.skin = selectedAreaSkin;
            }
            else
            {
                GUI.skin = noBackgroundSkin;
            }

            tmpTex = (Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                          GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].getConditions()
                      .getBlocksCount() > 0
                ? conditionsTex
                : noConditionsTex);

            GUILayout.BeginHorizontal();
            if (i == selectedAction)
            {
                int t = Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                    GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].getType();

                if (t == Controller.ACTION_USE_WITH || t == Controller.ACTION_GIVE_TO || t == Controller.ACTION_DRAG_TO)
                {
                    selectedTarget =
                        EditorGUILayout.Popup(
                            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i]
                            .getTypeName(),
                            selectedTarget, joinedNamesList,
                            GUILayout.Width(windowWidth * 0.39f));
                    if (selectedTarget != selectedTargetLast)
                    {
                        ChangeActionTarget(selectedTarget);
                    }
                }
                else
                {
                    GUILayout.Label(
                        Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                            GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i]
                        .getTypeName(), GUILayout.Width(windowWidth * 0.39f));
                }

                if (Controller.getInstance().playerMode() == Controller.FILE_ADVENTURE_1STPERSON_PLAYER)
                {
                    if (GUILayout.Button(TC.get("ActionsList.NotRelevant"), GUILayout.Width(windowWidth * 0.39f)))
                    {
                        OnActionSelectionChange(i);
                    }
                }
                else
                {
                    GUILayout.BeginHorizontal(GUILayout.Width(windowWidth * 0.39f));

                    Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                        GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].setNeedsGoTo(
                        GUILayout.Toggle(
                            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i]
                            .getNeedsGoTo(), ""));
                    Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                        GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i]
                    .setKeepDistance(
                        EditorGUILayout.IntField(
                            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i]
                            .getKeepDistance()));

                    GUILayout.EndHorizontal();
                }

                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.1f)))
                {
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                    GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].getConditions
                                    ());
                }
            }
            else
            {
                if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                         GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].getTypeName(),
                                     GUILayout.Width(windowWidth * 0.39f)))
                {
                    OnActionSelectionChange(i);
                }

                if (Controller.getInstance().playerMode() == Controller.FILE_ADVENTURE_1STPERSON_PLAYER)
                {
                    if (GUILayout.Button(TC.get("ActionsList.NotRelevant"), GUILayout.Width(windowWidth * 0.39f)))
                    {
                        OnActionSelectionChange(i);
                    }
                }
                else
                {
                    if (
                        GUILayout.Button(
                            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[i].getNeedsGoTo().ToString(), GUILayout.Width(windowWidth * 0.39f)))
                    {
                        OnActionSelectionChange(i);
                    }
                }
                if (GUILayout.Button(tmpTex, GUILayout.Width(windowWidth * 0.1f)))
                {
                    OnActionSelectionChange(i);
                }
            }
            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }
        GUILayout.EndScrollView();
        GUILayout.EndArea();

        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            addMenu.menu.ShowAsContext();
        }
        if (GUILayout.Button(duplicateTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                GameRources.GetInstance().selectedCharacterIndex].getActionsList()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                                  GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[selectedAction]);
        }
        //if (GUILayout.Button(moveUp, GUILayout.MaxWidth(0.08f * windowWidth)))
        //{
        //    Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
        //      GameRources.GetInstance().selectedCharacterIndex].getActionsList().moveElementUp(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
        //          GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[selectedAction]);
        //}
        //if (GUILayout.Button(moveDown, GUILayout.MaxWidth(0.08f * windowWidth)))
        //{
        //    Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
        //      GameRources.GetInstance().selectedCharacterIndex].getActionsList().moveElementDown(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
        //          GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[selectedAction]);
        //}
        if (GUILayout.Button(clearTex, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                GameRources.GetInstance().selectedCharacterIndex].getActionsList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                               GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[selectedAction],
                           false);
            if (selectedAction >= 0)
            {
                selectedAction--;
            }
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();

        GUILayout.BeginArea(descriptionRect);
        GUILayout.Label(TC.get("Action.Documentation"));
        GUILayout.Space(20);
        documentation = GUILayout.TextArea(documentation);
        if (!documentation.Equals(documentationLast))
        {
            OnDocumentationChanged(documentation);
        }
        GUILayout.EndArea();

        GUILayout.BeginArea(effectsRect);
        if (selectedAction < 0)
        {
            GUI.enabled = false;
        }
        if (GUILayout.Button(TC.get("Element.Effects")))
        {
            EffectEditorWindow window =
                (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
            window.Init(Controller.getInstance().getSelectedChapterDataControl().getNPCsList().getNPCs()[
                            GameRources.GetInstance().selectedCharacterIndex].getActionsList().getActions()[selectedAction]
                        .getEffects());
        }
        GUI.enabled = true;
        GUILayout.EndArea();
    }
    public override void Draw(int aID)
    {
        GUILayout.BeginArea(tableRect);
        GUILayout.BeginHorizontal();
        GUILayout.Box(TC.get("ExitsList.NextScene"), GUILayout.Width(windowWidth * 0.24f));
        GUILayout.Box(TC.get("ExitsList.Transition"), GUILayout.Width(windowWidth * 0.14f));
        GUILayout.Box(TC.get("ExitsList.Appearance"), GUILayout.Width(windowWidth * 0.34f));
        GUILayout.Box(TC.get("ExitsList.ConditionsAndEffects"), GUILayout.Width(windowWidth * 0.14f));
        GUILayout.EndHorizontal();

        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
        for (int i = 0;
             i <
             Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                 GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList().Count;
             i++)
        {
            if (i == selectedExit)
            {
                GUI.skin = selectedAreaSkin;
            }
            else
            {
                GUI.skin = noBackgroundSkin;
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                     GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList()[i].getNextSceneId(),
                                 GUILayout.Width(windowWidth * 0.24f)))
            {
                ChangeExitSelection(i);
            }

            // When is selected - show transition menu
            if (selectedExit == i)
            {
                GUILayout.BeginVertical();
                selectedTransitionType = EditorGUILayout.Popup(selectedTransitionType, transitionTypes,
                                                               GUILayout.Width(windowWidth * 0.12f), GUILayout.MaxWidth(windowWidth * 0.12f));
                if (selectedTransitionType != selectedTransitionTypeLast)
                {
                    ChangeSelectedTransitionType(selectedTransitionType);
                }
                transitionTimeString = GUILayout.TextField(transitionTimeString, 3, GUILayout.Width(windowWidth * 0.12f),
                                                           GUILayout.MaxWidth(windowWidth * 0.12f));
                transitionTimeString = Regex.Replace(transitionTimeString, @"[^0-9 ]", "");
                if (!transitionTimeString.Equals(transitionTimeStringLast))
                {
                    ChangeSelectedTransitionTime(transitionTimeString);
                }
                GUILayout.EndVertical();
            }
            // When is not selected - show normal text
            else
            {
                if (GUILayout.Button(TC.get("GeneralText.Edit"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    ChangeExitSelection(i);
                }
            }

            if (GUILayout.Button(TC.get("GeneralText.Edit"), GUILayout.Width(windowWidth * 0.34f)))
            {
                ChangeExitSelection(i);
                ExitsAppearance window =
                    (ExitsAppearance)ScriptableObject.CreateInstance(typeof(ExitsAppearance));
                window.Init(this, "", selectedExit);
            }
            if (selectedExit == i)
            {
                GUILayout.BeginVertical();
                if (GUILayout.Button(TC.get("Exit.EditConditions"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    ConditionEditorWindow window =
                        (ConditionEditorWindow)ScriptableObject.CreateInstance(typeof(ConditionEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList()[i].getConditions());
                }
                if (GUILayout.Button(TC.get("GeneralText.EditEffects"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    EffectEditorWindow window =
                        (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList()[i].getEffects());
                }
                if (GUILayout.Button(TC.get("Exit.EditPostEffects"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    EffectEditorWindow window =
                        (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList()[i].getPostEffects());
                }
                if (GUILayout.Button(TC.get("Exit.EditNotEffects"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    EffectEditorWindow window =
                        (EffectEditorWindow)ScriptableObject.CreateInstance(typeof(EffectEditorWindow));
                    window.Init(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                    GameRources.GetInstance().selectedSceneIndex].getExitsList().getExitsList()[i].getNotEffects());
                }
                GUILayout.EndVertical();
            }
            else
            {
                if (GUILayout.Button(TC.get("GeneralText.Edit"), GUILayout.Width(windowWidth * 0.14f)))
                {
                    ChangeExitSelection(i);
                }
            }

            GUILayout.EndHorizontal();
            GUI.skin = defaultSkin;
        }

        GUILayout.EndScrollView();
        GUILayout.EndArea();



        /*
         * Right panel
         */
        GUILayout.BeginArea(rightPanelRect);
        GUI.skin = noBackgroundSkin;
        if (GUILayout.Button(addTexture, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            ExitNewLinkTo window =
                (ExitNewLinkTo)ScriptableObject.CreateInstance(typeof(ExitNewLinkTo));
            window.Init(this);
        }
        if (GUILayout.Button(duplicateImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getExitsList()
            .duplicateElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                  GameRources.GetInstance().selectedSceneIndex].getExitsList().getExits()[selectedExit]);
        }
        if (GUILayout.Button(moveUp, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getExitsList()
            .moveElementUp(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getExitsList().getExits()[selectedExit]);
        }
        if (GUILayout.Button(moveDown, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getExitsList()
            .moveElementDown(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                 GameRources.GetInstance().selectedSceneIndex].getExitsList().getExits()[selectedExit]);
        }
        if (GUILayout.Button(clearImg, GUILayout.MaxWidth(0.08f * windowWidth)))
        {
            Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                GameRources.GetInstance().selectedSceneIndex].getExitsList()
            .deleteElement(Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                               GameRources.GetInstance().selectedSceneIndex].getExitsList().getExits()[selectedExit], false);
        }
        GUI.skin = defaultSkin;
        GUILayout.EndArea();


        if (backgroundPath != "")
        {
            GUILayout.BeginArea(infoPreviewRect);
            // Show preview dialog
            if (GUILayout.Button(TC.get("DefaultClickAction.ShowDetails") + "/" + TC.get("GeneralText.Edit")))
            {
                ExitsEditor window =
                    (ExitsEditor)ScriptableObject.CreateInstance(typeof(ExitsEditor));
                window.Init(this, Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[
                                GameRources.GetInstance().selectedSceneIndex], selectedExit);
            }
            GUILayout.EndArea();
            GUI.DrawTexture(previewRect, backgroundPreviewTex, ScaleMode.ScaleToFit);
        }
        else
        {
            GUILayout.BeginArea(infoPreviewRect);
            GUILayout.Button("No background!");
            GUILayout.EndArea();
        }
    }