private void DrawTransformationToolbar() { GUILayout.BeginHorizontal(); GUILayout.Label("Tools: "); NPVoxAnimationEditorVM.Tool tool = viewModel.CurrentTool; if (viewModel.CurrentTool != (tool = NPVoxGUILayout.HotkeyToolbar <NPVoxAnimationEditorVM.Tool>( viewModel.GetTools(), new NPVoxAnimationEditorVM.Tool[] { NPVoxAnimationEditorVM.Tool.CUSTOM1, NPVoxAnimationEditorVM.Tool.CUSTOM2, NPVoxAnimationEditorVM.Tool.CUSTOM3, NPVoxAnimationEditorVM.Tool.CUSTOM4, NPVoxAnimationEditorVM.Tool.AREA }, new KeyCode[] { KeyCode.W, KeyCode.E, KeyCode.R, KeyCode.D, KeyCode.T }, tool ))) { viewModel.SetCurrentTool(tool); unfocus(); } if (NPVoxGUILayout.HotkeyButton("Reset", HOTKEY_RESET_SELECTED_TRANSFORMATION)) { viewModel.ResetTransformation(); } GUILayout.EndHorizontal(); }
private void DrawFrameSelection() { if (viewModel.Animation == null) { return; } NPVoxFrame[] frames = viewModel.Frames; GUILayout.BeginHorizontal(); if (frames.Length == 0) { if (GUILayout.Button(new GUIContent("++", "Create Frame at Position 0"))) { viewModel.AddFrameAt(0); } } else { if (NPVoxGUILayout.HotkeyButton(new GUIContent("<", "Select frame " + viewModel.GetPreviousFrameIndex() + "(" + HOTKEY_PREVIOUS_FRAME + ")"), HOTKEY_PREVIOUS_FRAME, false, false, true)) { viewModel.SelectFrame(viewModel.GetPreviousFrameIndex()); } else if (NPVoxGUILayout.HotkeyButton(new GUIContent(">", "Select frame " + viewModel.GetNextFrameIndex() + "(" + HOTKEY_PREVIOUS_FRAME + ")"), HOTKEY_NEXT_FRAME, false, false, true)) { viewModel.SelectFrame(viewModel.GetNextFrameIndex()); } if (viewModel.SelectedFrameIndex < 0 && frames.Length > 0) { viewModel.SelectFrame(0, true); } if (viewModel.SelectedFrameIndex >= frames.Length && frames.Length > 0) { viewModel.SelectFrame(frames.Length - 1, true); } string[] labels = new string[frames.Length]; for (int i = 0; i < frames.Length; i++) { labels[i] = (i + 1) + ""; } int newIndex = -1; if (viewModel.SelectedFrameIndex != (newIndex = GUILayout.Toolbar(viewModel.SelectedFrameIndex, labels))) { viewModel.SelectFrame(newIndex); } DrawFrameCreationTools(); } GUILayout.EndHorizontal(); // GUILayout.EndArea(); }
private void DrawCameraToolbar() { GNCameraSetups.CameraMode previousMode = GNCameraSetups.GetCameraMode(); GNCameraSetups.CameraMode mode; if (previousMode != (mode = NPVoxGUILayout.HotkeyToolbar <GNCameraSetups.CameraMode>( new string[] { "Top", "Ingame", "Front" }, new GNCameraSetups.CameraMode[] { GNCameraSetups.CameraMode.TOP, GNCameraSetups.CameraMode.INGAME, GNCameraSetups.CameraMode.FRONT }, new KeyCode[] { KeyCode.A, KeyCode.S, KeyCode.D }, previousMode, true, false, true ))) { GNCameraSetups.SetCameraMode(mode); } if (NPVoxGUILayout.HotkeyButton("Center", HOTKEY_FOCUS_CAMERA)) { SceneView.lastActiveSceneView.LookAt(viewModel.FullMapExtends().center, Quaternion.Euler(-45f, 0f, 0f), 20f); } }
private void DrawPreview() { if (!viewModel || !viewModel.Animation) { return; } EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); viewModel.SetPingPong(EditorGUILayout.Toggle("PingPong", viewModel.Animation.PingPong)); viewModel.SetLoop(EditorGUILayout.Toggle("Loop", viewModel.Animation.Loop)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); viewModel.SetFPS(Mathf.Max(EditorGUILayout.IntField("FPS", viewModel.Animation.FPS), 1)); if (!viewModel.IsPlaying && NPVoxGUILayout.HotkeyButton("Preview", HOTKEY_PREVIEW)) { Preview(); } if (viewModel.IsPlaying && NPVoxGUILayout.HotkeyButton("Stop", HOTKEY_PREVIEW)) { viewModel.StopPreview(); } if (viewModel.IsPlaying) { double timeForFrame = (viewModel.SelectedFrame.Duration / (double)viewModel.Animation.FPS); double thisFrameTime = EditorApplication.timeSinceStartup; accumAnimTime += thisFrameTime - lastFrameTime; while (accumAnimTime > timeForFrame && viewModel.IsPlaying) { accumAnimTime -= timeForFrame; viewModel.UpdatePreview(); } lastFrameTime = thisFrameTime; Repaint(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); }
private void DrawTransformationSelector() { NPVoxCompositeProcessorBase <NPVoxIModelFactory, NPVoxModel>[] transformers = viewModel.Transformers; if (transformers == null) { return; } GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); GUIStyle foldoutSelectedStyle = new GUIStyle(foldoutStyle); GUIStyle labelStyle = new GUIStyle(EditorStyles.label); GUIStyle labelSelectedStyle = new GUIStyle(labelStyle); GUIStyle deleteStyle = new GUIStyle(EditorStyles.miniButtonMid); deleteStyle.fixedWidth = 70; foldoutSelectedStyle.fontStyle = FontStyle.Bold; labelSelectedStyle.fontStyle = FontStyle.Bold; for (int i = 0; i < transformers.Length; i++) { NPVoxCompositeProcessorBase <NPVoxIModelFactory, NPVoxModel> transformer = transformers[i]; GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); bool isSelected = i == viewModel.SelectedTransformationIndex; bool somethingSelected = viewModel.SelectedTransformationIndex != -1; bool isSelectedOrLast = isSelected || (!somethingSelected && i == transformers.Length - 1); string name = transformer.GetInstanceName(); if (name == null || name.Length < 1) { name = transformer.GetTypeName(); } GUILayout.Label((i + 1) + (isSelectedOrLast ? "|A" : ""), isSelected ? labelSelectedStyle : labelStyle, GUILayout.Width(30)); if (isSelected != EditorGUILayout.Foldout(isSelected, name, isSelected ? foldoutSelectedStyle : foldoutStyle)) { if (isSelected) { viewModel.SelectTransformation(-1); unfocus(); } else { viewModel.SelectTransformation(i); } } GUILayout.Space(100); if (GUILayout.Button("Delete" + (isSelectedOrLast ? " (" + HOTKEY_DELETE_LAST_TRANSFOMRATION.ToString() + ")" : ""), deleteStyle)) { viewModel.RemoveTransformationAt(i); } else if (GUILayout.Button("Copy", EditorStyles.miniButtonMid)) { viewModel.CopyTransformation(i); } if (isSelected) { if (NPVoxGUILayout.HotkeyButton(new GUIContent("Up", "Move Up"), HOTKEY_MOVE_TRANSFORMATION_UP, false, false, false, EditorStyles.miniButtonMid)) { viewModel.MoveTransformation(i, -1); } if (NPVoxGUILayout.HotkeyButton(new GUIContent("Down", "Move Down"), HOTKEY_MOVE_TRANSFORMATION_DOWN, false, false, false, EditorStyles.miniButtonMid)) { viewModel.MoveTransformation(i, +1); } if (NPVoxGUILayout.HotkeyButton(new GUIContent("Duplicate", "Duplicate"), DUPLICATE_TRANSFORMATION, false, false, false, EditorStyles.miniButtonMid)) { viewModel.DuplicateTransformation(i); } } else { if (GUILayout.Button(new GUIContent("Up", "Move Up"), EditorStyles.miniButtonMid)) { viewModel.MoveTransformation(i, -1); } if (GUILayout.Button(new GUIContent("Down", "Move Down"), EditorStyles.miniButtonRight)) { viewModel.MoveTransformation(i, +1); } } GUILayout.EndHorizontal(); if (isSelected && viewModel.SelectedTransformer != null) { GUILayout.BeginHorizontal(); { EditorGUILayout.Space(); GUILayout.BeginVertical(); { EditorGUILayout.Space(); if (viewModel.SelectedTransformer is NPVoxISceneEditable) { DrawTransformationToolbar(); } { if (viewModel.SelectedTransformer.DrawInspector(~NPipeEditFlags.TOOLS & ~NPipeEditFlags.INPUT & ~NPipeEditFlags.STORAGE_MODE)) { GUI.changed = true; viewModel.SelectedTransformerChanged(); viewModel.RegeneratePreview(); // GUI.changed = true; // TODO: is this still needed? } } EditorGUILayout.Space(); EditorGUILayout.Space(); } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); } GUILayout.BeginHorizontal(); if (NPVoxGUILayout.HotkeyButton("+ New T", HOTKEY_APPEND_TRANSFORMATION)) { viewModel.AddTransformation(); } if (viewModel.IsSkeletonBuilderAppendable() && GUILayout.Button("+ Skeleton")) { viewModel.AddSkeletonBuilder(); } if (viewModel.IsSkeletonTransformerAppendable() && NPVoxGUILayout.HotkeyButton("+ SkeletonT", HOTKEY_APPEND_BONETRANSFORMATION)) { viewModel.AddSkeletonTransformer(); } if (GUILayout.Button("+ Mirror")) { viewModel.AddMirrorTransformators(); } // if (GUILayout.Button("+ Combiner")) // { // viewModel.AddSocketCombiner(); // } // if (GUILayout.Button("+ SocketT")) // { // viewModel.AddSocketTransformer(); // } List <System.Type> allTypes = new List <System.Type>(NPipeReflectionUtil.GetAllTypesWithAttribute(typeof(NPipeAppendableAttribute))); List <string> allLabels = new List <string>(); allLabels.Add("Other ..."); foreach (System.Type factoryType in allTypes) { NPipeAppendableAttribute attr = (NPipeAppendableAttribute)factoryType.GetCustomAttributes(typeof(NPipeAppendableAttribute), true)[0]; if (!attr.sourceType.IsAssignableFrom(typeof(NPVoxIModelFactory))) { continue; } allLabels.Add(attr.name); } int selection = EditorGUILayout.Popup(0, allLabels.ToArray()); if (selection > 0) { viewModel.AddTransformer(allTypes[selection - 1]); } if (viewModel.HasTransformationToPaste() && GUILayout.Button("+ Paste")) { viewModel.Paste(); } GUILayout.EndHorizontal(); }