public void Init(DialogReceiverInterface e, SceneDataControl scene) { sceneRef = scene; string backgroundPath = Controller.getInstance().getSelectedChapterDataControl().getScenesList().getScenes()[ GameRources.GetInstance().selectedSceneIndex].getPreviewBackground(); backgroundPreviewTex = (Texture2D)Resources.Load(backgroundPath.Substring(0, backgroundPath.LastIndexOf(".")), typeof(Texture2D)); string playerPath = Controller.getInstance().getSelectedChapterDataControl().getPlayer().getPreviewImage(); playerTex = (Texture2D)Resources.Load(playerPath.Substring(0, playerPath.LastIndexOf(".")), typeof(Texture2D)); selectedPlayerTex = (Texture2D)Resources.Load("Editor/SelectedArea", typeof(Texture2D)); editNodeTex = (Texture2D)Resources.Load("EAdventureData/img/icons/nodeEdit", typeof(Texture2D)); editSideTex = (Texture2D)Resources.Load("EAdventureData/img/icons/sideEdit", typeof(Texture2D)); setInitialNodeTex = (Texture2D)Resources.Load("EAdventureData/img/icons/selectStartNode", typeof(Texture2D)); deleteTex = (Texture2D)Resources.Load("EAdventureData/img/icons/deleteTool", typeof(Texture2D)); deleteTex = (Texture2D)Resources.Load("EAdventureData/img/icons/ScaleArea", typeof(Texture2D)); initialNodeTex = (Texture2D)Resources.Load("EAdventureData/img/icons/selectStartNode", typeof(Texture2D)); lineTex = (Texture2D)Resources.Load("Editor/LineTex", typeof(Texture2D)); selectedAreaSkin = (GUISkin)Resources.Load("Editor/ButtonSelected", typeof(GUISkin)); imageBackgroundRect = new Rect(0f, 0f, backgroundPreviewTex.width, backgroundPreviewTex.height); playerRect = new Rect(0f, 0f, playerTex.width, playerTex.height); useTrajectory = sceneRef.getTrajectory().hasTrajectory(); useInitialPosition = useInitialPositionLast = !useTrajectory; trajectory = sceneRef.getTrajectory().GetTrajectory(); x = sceneRef.getDefaultInitialPositionX(); y = sceneRef.getDefaultInitialPositionY(); playerRect = new Rect(x, y, playerTex.width, playerTex.height); base.Init(e, backgroundPreviewTex.width, backgroundPreviewTex.height); }
void OnGUI() { scrollPosition = GUILayout.BeginScrollView(scrollPosition); GUI.DrawTexture(imageBackgroundRect, backgroundPreviewTex); //if (dragging) // GUI.DrawTexture(playerRect, selectedPlayerTex); GUILayout.EndScrollView(); if (Event.current.type == EventType.mouseDrag) { if (!useTrajectory) { // Check if start position is over player if (playerRect.Contains(Event.current.mousePosition)) { if (!dragging) { dragging = true; startPos = currentPos; } } } // For editing trajectory nodes recognizing object under mouse pointer is done // during iterating over all nodes else { if (!dragging) { dragging = true; startPos = currentPos; } } currentPos = Event.current.mousePosition; } if (Event.current.type == EventType.mouseUp) { dragging = false; } /* * Properties part */ GUILayout.Label(TC.get("Scene.UseTrajectoryPanel")); GUILayout.Space(5); useTrajectory = GUILayout.Toggle(!useInitialPosition, new GUIContent(TC.get("Scene.UseTrajectory"))); useInitialPosition = GUILayout.Toggle(!useTrajectory, new GUIContent(TC.get("Scene.UseInitialPosition"))); if (useInitialPosition != useInitialPositionLast) { OnMovementTypeChange(useInitialPosition); } GUILayout.Space(5); /* * Initial positon */ if (useInitialPosition) { // EVENT if (dragging) { OnBeingDragged(); } playerRect = new Rect(x - 0.5f * playerTex.width * sceneRef.getPlayerScale(), y - playerTex.height * sceneRef.getPlayerScale(), playerTex.width * sceneRef.getPlayerScale(), playerTex.height * sceneRef.getPlayerScale()); GUI.DrawTexture(playerRect, playerTex); GUILayout.BeginHorizontal(); GUILayout.Box("X", GUILayout.Width(0.33f * backgroundPreviewTex.width)); GUILayout.Box("Y", GUILayout.Width(0.33f * backgroundPreviewTex.width)); GUILayout.Box(TC.get("SceneLocation.Scale"), GUILayout.Width(0.3f * backgroundPreviewTex.width)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); x = EditorGUILayout.IntField( sceneRef.getDefaultInitialPositionX(), GUILayout.Width(0.33f * backgroundPreviewTex.width)); y = EditorGUILayout.IntField( sceneRef.getDefaultInitialPositionY(), GUILayout.Width(0.33f * backgroundPreviewTex.width)); sceneRef.setDefaultInitialPosition(x, y); sceneRef.setPlayerScale( EditorGUILayout.FloatField( sceneRef.getPlayerScale(), GUILayout.Width(0.33f * backgroundPreviewTex.width))); GUILayout.EndHorizontal(); } /* * Trajectory */ else { // EVENTS if (Event.current.type == EventType.mouseDown && imageBackgroundRect.Contains(Event.current.mousePosition)) { int clickedIndex = -1; for (int i = 0; i < trajectory.getNodes().Count; i++) { if ( trajectory.getNodes()[i].getEditorRect(playerTex.width, playerTex.height) .Contains(Event.current.mousePosition)) { clickedIndex = i; } } if (trajectoryTool == TrajectoryToolType.EDIT_NODE) { if (clickedIndex == -1) { AddNode(Event.current.mousePosition); } } else if (trajectoryTool == TrajectoryToolType.DELETE_NODE) { if (clickedIndex != -1) { DeleteNode(clickedIndex); } } else if (trajectoryTool == TrajectoryToolType.INIT_NODE) { if (clickedIndex != -1) { SetInitNode(clickedIndex); } } else if (trajectoryTool == TrajectoryToolType.EDIT_SIDE) { if (clickedIndex != -1) { SetSideNode(clickedIndex); } } } if (dragging) { if (trajectoryTool == TrajectoryToolType.EDIT_NODE) { int clickedIndex = -1; for (int i = 0; i < trajectory.getNodes().Count; i++) { if ( trajectory.getNodes()[i].getEditorRect(playerTex.width, playerTex.height) .Contains(Event.current.mousePosition)) { clickedIndex = i; } } if (clickedIndex != -1) { // LEFT MOUSE BUTTON - move node if (Event.current.button == 0) { OnBeingDraggedTrajectoryNode(clickedIndex); } } } } //if (Event.current.type == EventType.ScrollWheel) if (Event.current.keyCode == KeyCode.Plus || Event.current.keyCode == KeyCode.KeypadPlus || Event.current.keyCode == KeyCode.Minus || Event.current.keyCode == KeyCode.KeypadMinus) { if (trajectoryTool == TrajectoryToolType.EDIT_NODE) { int clickedIndex = -1; for (int i = 0; i < trajectory.getNodes().Count; i++) { if ( trajectory.getNodes()[i].getEditorRect(playerTex.width, playerTex.height) .Contains(Event.current.mousePosition)) { clickedIndex = i; } } if (clickedIndex != -1) { if (Event.current.keyCode == KeyCode.Plus || Event.current.keyCode == KeyCode.KeypadPlus) { OnBeingTrajectoryNodeRescaled(clickedIndex, 0.01f); } else if (Event.current.keyCode == KeyCode.Minus || Event.current.keyCode == KeyCode.KeypadMinus) { OnBeingTrajectoryNodeRescaled(clickedIndex, -0.01f); } } } } if (trajectoryTool == TrajectoryToolType.EDIT_SIDE) { // If selected begin of side if (beginSideIndex != -1) { DrawLine( new Vector2(trajectory.getNodes()[beginSideIndex].getX(), trajectory.getNodes()[beginSideIndex].getY()), Event.current.mousePosition, 2); } } // DRAW NODES foreach (Trajectory.Node node in trajectory.getNodes()) { GUI.DrawTexture(node.getEditorRect(playerRect.width, playerRect.height), playerTex); } // DRAW SIDES foreach (Trajectory.Side side in trajectory.getSides()) { DrawLine( new Vector2(trajectory.getNodeForId(side.getIDStart()).getX(), trajectory.getNodeForId(side.getIDStart()).getY()), new Vector2(trajectory.getNodeForId(side.getIDEnd()).getX(), trajectory.getNodeForId(side.getIDEnd()).getY()), 2); } // DRAW INITIAL NODE if (trajectory.getInitial() != null) { GUI.DrawTexture(trajectory.getInitial().getEditorRect(initialNodeTex.width, initialNodeTex.height), initialNodeTex); } // BUTTONS GUILayout.BeginHorizontal(); if (trajectoryTool == TrajectoryToolType.EDIT_NODE) { GUI.skin = selectedAreaSkin; } if (GUILayout.Button(editNodeTex, GUILayout.MaxWidth(0.15f * backgroundPreviewTex.width))) { OnEditNodeSelected(); } if (trajectoryTool == TrajectoryToolType.EDIT_NODE) { GUI.skin = defaultSkin; } if (trajectoryTool == TrajectoryToolType.EDIT_SIDE) { GUI.skin = selectedAreaSkin; } if (GUILayout.Button(editSideTex, GUILayout.MaxWidth(0.15f * backgroundPreviewTex.width))) { OnEditSideSelected(); } if (trajectoryTool == TrajectoryToolType.EDIT_SIDE) { GUI.skin = defaultSkin; } if (trajectoryTool == TrajectoryToolType.INIT_NODE) { GUI.skin = selectedAreaSkin; } if (GUILayout.Button(setInitialNodeTex, GUILayout.MaxWidth(0.15f * backgroundPreviewTex.width))) { OnInitialNodeSelected(); } if (trajectoryTool == TrajectoryToolType.INIT_NODE) { GUI.skin = defaultSkin; } if (trajectoryTool == TrajectoryToolType.DELETE_NODE) { GUI.skin = selectedAreaSkin; } if (GUILayout.Button(deleteTex, GUILayout.MaxWidth(0.15f * backgroundPreviewTex.width))) { OnDeleteNodeSelected(); } if (trajectoryTool == TrajectoryToolType.DELETE_NODE) { GUI.skin = defaultSkin; } GUILayout.EndHorizontal(); } }
private void OnPlayerModeChange(PlayerMode val) { switch (val) { default: Debug.LogError("Wrong player mode: " + val); break; case PlayerMode.NoPlayer: workingScene.changeAllowPlayerLayer(false); componentBasedEditor.SelectedElement = null; break; case PlayerMode.InitialPosition: { var trajectoryDataControl = workingScene.getTrajectory(); var trajectory = trajectoryDataControl.GetTrajectory(); var initialPos = new Vector2(workingScene.getDefaultInitialPositionX(), workingScene.getDefaultInitialPositionY()); var initialScale = workingScene.getPlayerScale() >= 0 ? workingScene.getPlayerScale() : workingScene.getPlayerAppropiateScale(); if (trajectory != null) { initialPos = new Vector2(trajectory.getInitial().getX(), trajectory.getInitial().getY()); initialScale = trajectory.getInitial().getScale(); // Swap from any of the selected nodes to the player if (componentBasedEditor.SelectedElement != null && trajectoryDataControl.getNodes() .Any(componentBasedEditor.SelectedElement.Equals)) { componentBasedEditor.SelectedElement = Controller.Instance.SelectedChapterDataControl.getPlayer(); } } workingScene.setTrajectoryDataControl(new TrajectoryDataControl(workingScene, null)); workingScene.setTrajectory(null); workingScene.setDefaultInitialPosition((int)initialPos.x, (int)initialPos.y); workingScene.setPlayerScale(initialScale); } break; case PlayerMode.Trajectory: { var trajectory = workingScene.getTrajectory().GetTrajectory(); if (trajectory == null) { trajectory = new Trajectory(); trajectory.addNode("initial", workingScene.getDefaultInitialPositionX(), workingScene.getDefaultInitialPositionY(), workingScene.getPlayerScale()); trajectory.setInitial("initial"); var tdc = new TrajectoryDataControl(workingScene, trajectory); workingScene.setTrajectoryDataControl(tdc); workingScene.setTrajectory(trajectory); } // Swap from player to first node if (componentBasedEditor.SelectedElement == Controller.Instance.SelectedChapterDataControl.getPlayer()) { componentBasedEditor.SelectedElement = workingScene.getTrajectory().getInitialNode(); } } break; } if (val != PlayerMode.NoPlayer && !workingScene.isAllowPlayer()) { workingScene.changeAllowPlayerLayer(true); } }