public static void CMD_LoadMap() { if (EditorSubsystem.getInstance().IsTesting()) { Logger.Log("Cannot load in testing mode."); return; } System.Windows.Application.Current.Dispatcher.Invoke(() => { OpenFileDialog dlg = new OpenFileDialog(); dlg.DefaultExt = ".mocha"; dlg.Filter = "Mocha Map Files (.mocha)|*.mocha"; DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { // EngineManagerViewModel.instance.BusyMessage = "... Loading " + System.IO.Path.GetFileName(dlg.FileName) + " ..."; string filename = dlg.FileName; EngineManagerViewModel.instance.SelectedGameObjects.Clear(); EditorSubsystemManaged.getInstance().QueueAction(() => { GameObjectVector v = new GameObjectVector(); EditorSubsystem.getInstance().SetSelectedObjects(v); Map.LoadMap(filename); EditorSettings.AddRecentMap(filename); }); EngineManagerViewModel.instance.currentLoadedMap = filename; // EngineManagerViewModel.instance.BusyMessage = null; } }); }
private void TestCurrentPosButton_Click(object sender, RoutedEventArgs e) { if ((DataContext as EngineManagerViewModel).IsConnected) { if (EditorSubsystem.getInstance().IsTesting()) { return; } EditorSubsystemManaged.getInstance().QueueAction(() => { StateSerializer ss = new StateSerializer(); ss.SaveCurrentState("_Testing_Temp.mocha"); }); EditorSubsystemManaged.getInstance().QueueAction(() => { if (BeginTest()) { GameObject playerObj = GameObject.From(GameObject.GetGameObjectWithTag("Player")); if (playerObj == null) { MessageBox.Show("Test from Current Position requires\nan object with the \'Player\' tag set."); } else { playerObj.transform.SetPosition(EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetGlobalPosition()); } } }); } }
public static void CMD_SaveMapAs() { if (EditorSubsystem.getInstance().IsTesting()) { Logger.Log("Cannot save in testing mode."); return; } System.Windows.Application.Current.Dispatcher.Invoke(() => { SaveFileDialog dlg = new SaveFileDialog(); dlg.OverwritePrompt = false; dlg.DefaultExt = ".mocha"; dlg.Filter = "Mocha Map Files (.mocha)|*.mocha"; DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { // EngineManagerViewModel.instance.BusyMessage = "... Saving Map ..."; string filename = dlg.FileName; Dispatcher.CurrentDispatcher.Invoke(() => { EngineManagerViewModel.instance.SelectedGameObjects.Clear(); }); EditorSubsystemManaged.getInstance().QueueAction(() => { StateSerializer ss = new StateSerializer(); ss.SaveCurrentState(filename); }); Dispatcher.CurrentDispatcher.Invoke(() => { EngineManagerViewModel.instance.currentLoadedMap = filename; }); // EngineManagerViewModel.instance.BusyMessage = null; } }); }
public void RegisterTick() { _tick = Tick; EditorSubsystem.getInstance().Register_Tick(_tick); //hack: for now, bind data direct after embed EngineCommandBindings.GridSize = EngineCommandBindings.GridSize; }
private void UserControl_Loaded(object sender, RoutedEventArgs e) { if ((DataContext as EngineManagerViewModel).IsConnected) { SetTestButtonStates(EditorSubsystem.getInstance().IsTesting()); } MochaScriptSystem.ScriptSubsystemManaged.HasReloaded += TestPanel_HasReloaded; //TestPanel_HasReloaded(null, null); }
public void LoadLevels() { EngineManagerViewModel.instance.SelectedGameObjects.Clear(); EditorSubsystemManaged.getInstance().QueueAction(() => { GameObjectVector v = new GameObjectVector(); EditorSubsystem.getInstance().SetSelectedObjects(v); Map.LoadMap(_item.filepath); EditorSettings.AddRecentMap(_item.filepath); }); EngineManagerViewModel.instance.currentLoadedMap = _item.filepath; // EngineManagerViewModel.instance.BusyMessage = null; }
private bool BeginTest() { MochaScriptSystem.ScriptSubsystemManaged.getInstance().Reload(); if (MochaScriptSystem.ScriptSubsystemManaged.getInstance().GetHasErrors()) { return(false); } EngineManagerViewModel.instance.SelectedGameObjects.Clear(); EngineManagerViewModel.instance.ForceSelectedGameObjectRefresh(); EditorSubsystem.getInstance().BeginTesting(); Dispatcher.Invoke(() => SetTestButtonStates(true)); return(true); }
public static void CMD_DeleteObjects() { if (EditorSubsystem.getInstance().IsTesting()) { Logger.Log("Cannot delete in testing mode."); return; } List <GameObject> objsToDel = EngineManagerViewModel.instance.SelectedGameObjects.ToList(); EngineManagerViewModel.instance.SelectedGameObjects.Clear(); foreach (GameObject g in objsToDel) { EditorSubsystemManaged.getInstance().QueueAction(() => { g.Destroy(); }); HierarchyControlSelectionManager.HierarchyControlStateManager.RequestRemoval(g); } }
private void TestStartButton_Click(object sender, RoutedEventArgs e) { if ((DataContext as EngineManagerViewModel).IsConnected) { if (EditorSubsystem.getInstance().IsTesting()) { return; } EditorSubsystemManaged.getInstance().QueueAction(() => { StateSerializer ss = new StateSerializer(); ss.SaveCurrentState("_Testing_Temp.mocha"); }); EditorSubsystemManaged.getInstance().QueueAction(() => { BeginTest(); }); } }
private void AlignViewButton_Click(object sender, RoutedEventArgs e) { EngineManagerViewModel view = (this.DataContext as EngineManagerViewModel); e.Handled = true; if (view.SelectedGameObjects.Count == 0) { return; } EditorSubsystemManaged.getInstance().QueueAction(() => { foreach (GameObject g in view.SelectedGameObjects) { MochaInterface.GameObject ed_cam = EditorSubsystem.getInstance().EditorCamera().gameObject; g.transform.SetPosition(ed_cam.transform.position + (Vector3)ed_cam.transform.GetForwardVector() * 5); } }); }
private void StopTestingButton_Click(object sender, RoutedEventArgs e) { if ((DataContext as EngineManagerViewModel).IsConnected) { if (!EditorSubsystem.getInstance().IsTesting()) { return; } EditorSubsystemManaged.getInstance().QueueAction(() => { EditorSubsystem.getInstance().EndTesting(); Dispatcher.Invoke(() => SetTestButtonStates(false)); }); Input.SetMouseVisible(true); Input.SetMouseLock(false); } }
public static int gridExtent = 30; //number of grid lines public static void CMD_SaveMap() { if (EditorSubsystem.getInstance().IsTesting()) { Logger.Log("Cannot save in testing mode."); return; } //EngineManagerViewModel.instance.BusyMessage = "... Saving Map ..."; EngineManagerViewModel.instance.SelectedGameObjects.Clear(); //safety check, remove the selected object so no weird binding happens string currentLoadedMap = EngineManagerViewModel.instance.currentLoadedMap; if (currentLoadedMap != null) { EditorSubsystemManaged.getInstance().QueueAction(() => { StateSerializer ss = new StateSerializer(); ss.SaveCurrentState(currentLoadedMap); }); } else { System.Windows.MessageBox.Show("Save As, Before Saving..."); } // EngineManagerViewModel.instance.BusyMessage = null; } }
void box_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { string name = (sender as TextBox).Text; if (String.IsNullOrWhiteSpace(name)) { return; } EditorSubsystemManaged.getInstance().QueueAction(() => { GameObject g = GameObject.From(ObjectFactory.getInstance().MakeNewGameObject(name, GSM.getInstance().getActiveState())); g.transform.SetPosition(EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetGlobalPosition().Add( EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetForwardVector().Mul(3.0f))); Dispatcher.Invoke(() => { NewObject_Button.Content = newObject_button_orig_content; HierarchyControlSelectionManager.HierarchyControlStateManager.GObjSelectRefresh(g); }); }); } }
public static void CMD_MergeMap() { if (EditorSubsystem.getInstance().IsTesting()) { Logger.Log("Cannot merge in testing mode."); return; } System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { OpenFileDialog dlg = new OpenFileDialog(); dlg.DefaultExt = ".mocha"; dlg.Filter = "Mocha Map Files (.mocha)|*.mocha"; DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { // EngineManagerViewModel.instance.BusyMessage = "... Merging " + System.IO.Path.GetFileName(dlg.FileName) + " ..."; string filename = dlg.FileName; MergeMapWindow mmw = new MergeMapWindow(filename); mmw.ShowDialog(); } })); }
public void Tick() { if (!hasInit) { Init(); } while (actionQueue.Count != 0) { EditorAction a = actionQueue.Dequeue(); //Dispatcher.CurrentDispatcher.Invoke(a, DispatcherPriority.Normal); if (a == null) //wait frame { break; } a.a(); if (a.mres != null) { a.mres.Set(); a.mres.Dispose(); } } if (!EditorSubsystem.getInstance().IsTesting()) { //draw grid lines if (EngineCommandBindings.DrawGrid && EngineCommandBindings.GridSize > 0) { Vector3 camPos = EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetGlobalPosition(); float startX = camPos.X; float startY = camPos.Y; float startZ = camPos.Z; startX = startX - (startX % EngineCommandBindings.GridSize); if (startY > 0) { startY = startY - (startY % EngineCommandBindings.GridSize); } else { startY = startY + (startY % EngineCommandBindings.GridSize); } startZ = startZ - (startZ % EngineCommandBindings.GridSize); for (int y = (int)startY; y <= (int)startY + EngineCommandBindings.gridExtent / 2; y += EngineCommandBindings.GridSize) { //for every y, draw an x,z plane for (int x = (int)startX - EngineCommandBindings.gridExtent; x <= (int)startX + EngineCommandBindings.gridExtent; x += EngineCommandBindings.GridSize) { //draw z Renderer.getInstance().DrawLinePerma(new Vector3(x, y, startZ - EngineCommandBindings.gridExtent), new Vector3(x, y, startZ + EngineCommandBindings.gridExtent), new Color(0.39f, 0.60f, 0.93f, .5f)); for (int z = (int)startZ - EngineCommandBindings.gridExtent; z <= (int)startZ + EngineCommandBindings.gridExtent; z += EngineCommandBindings.GridSize) { //draw x Renderer.getInstance().DrawLinePerma(new Vector3(x - EngineCommandBindings.gridExtent, y, z), new Vector3(x + EngineCommandBindings.gridExtent, y, z), new Color(.4f, .4f, 0.0f, .3f)); } } } } //save occasionally autoSaveTimer += FrameController.DT(); if (autoSaveTimer > 30.0f) { QueueAction(() => { try { StateSerializer ss = new StateSerializer(); ss.DoRecoverySave(); } catch (Exception e) { Logger.Log("FAILED TO SAVE RECOVERY SAVE: " + e.Message); } }); autoSaveTimer = 0; } //occasionally check for available assets ++checkforChangedAssetsTimer; if (checkforChangedAssetsTimer > CHECKFORCHANGEDASSETS_TIME) { AssetManager.getInstance().CheckForChangedAssets(); checkforChangedAssetsTimer = 0; } //do standard updates if (Input.GetIsMouseInWindow(true) && EngineManagerViewModel.instance.EngineEmbedHasVisibility && EngineManagerViewModel.instance._isFocused) { //run sub systems auto_builder.Update(); //set tooltips mouseTooltipText.gameObject.transform.SetPosition(Input.GetMouseX(true) - Engine.getInstance().GetGameWnd().GetWindowWidth() * 0.5f, -(Input.GetMouseY(true) - Engine.getInstance().GetGameWnd().GetWindowHeight() * 0.5f), 0); editorStatusText.gameObject.transform.SetPosition(-Engine.getInstance().GetGameWnd().GetWindowWidth() * 0.49f, Engine.getInstance().GetGameWnd().GetWindowHeight() * 0.44f, 0); editorStatusText.mText = "--- STATUS ---\\n" + "Arrow Keys Snap Prec.: " + arrowSnapPrecision.ToString("0.0") + "\\nFPS: " + (1.0f / FrameController.DT()).ToString("0.0") + "\\n---------------"; CCamera editorCamera = EditorSubsystem.getInstance().EditorCamera(); if (Input.GetTriggered(0, "F2") == 1.0f) { //duplicate EngineCommandBindings.CMD_DuplicateObjects(); } //select objects naively GameObject gobj = GameObject.From(PhysicEngine.getInstance().RayCast3D(editorCamera.gameObject.transform.position, editorCamera.gameObject.transform.GetForwardVector(), editorCamera, Input.GetMouseX(true), Input.GetMouseY(true), 10000.0f)); if (gobj != null && gobj.GetFlag("ArtWidget")) { //select widget's actual object gobj = GameObject.From(EditorSubsystem.getInstance().widgetManager.GetAttachedObjFromWidgetObj(gobj)); } if (gobj != null && !gobj.GetFlag("Widget")) { //show tooltip if mouse over mouseTooltipText.mText = gobj.GetName(); //select if clicked on if (Input.GetTriggered(0, "MouseLClick") == 1.0f) { Application.Current.Dispatcher.Invoke(new Action(() => { try { if (Input.GetHeld(0, "AdditiveMod") == 1.0f) { GameObjectSelectionManager.RequestAdditiveSelect(gobj); } else { GameObjectSelectionManager.RequestSelect(gobj); } } catch (Exception e) { Console.WriteLine("Consumed Error in Hierarchy: " + e.ToString()); } } )); } } else { mouseTooltipText.mText = ""; } //rotate camera and move camera float dt = FrameController.getInstance().GetDeltaTime(); if (Input.GetHeld(0, "MoveFaster") == 1.0f) { dt *= 3; } Vector3 velocityThisFrame = new Vector3(); if (Input.GetHeld(0, "MouseRCLick") == 1.0f) { float dx = 0.25f * (Input.GetMouseDeltaX() * (3.14f / 180.0f)); float dy = 0.25f * (Input.GetMouseDeltaY() * (3.14f / 180.0f)); editorCamera.Pitch(dy); editorCamera.RotateY(dx); float val = Input.GetValue(0, "up"); velocityThisFrame.Z += val; val = Input.GetValue(0, "right"); velocityThisFrame.X += val; val = Input.GetValue(0, "down"); velocityThisFrame.Z -= val; val = Input.GetValue(0, "left"); velocityThisFrame.X -= val; cameraVelocity += velocityThisFrame; //cameraVelocity = cameraVelocity.Add(velocityThisFrame); //MathHelper.Clamp cameraVelocity.X = MathHelper.Clamp(cameraVelocity.X, -6, 6); cameraVelocity.Y = MathHelper.Clamp(cameraVelocity.Y, -6, 6); cameraVelocity.Z = MathHelper.Clamp(cameraVelocity.Z, -6, 6); //cameraVelocity.Clamp(-6.0f, 6.0f); } if (velocityThisFrame.X == 0) { cameraVelocity.X *= 0.9f; } if (velocityThisFrame.Z == 0) { cameraVelocity.Z *= 0.9f; } editorCamera.Walk(cameraVelocity.Z * dt); editorCamera.Strafe(cameraVelocity.X * dt); //look at if (_lookTimer != 0) { _lookTimer += FrameController.DT(); } if (_lookTimer > 1.3f) { _lookTimer = 0; } if (Input.GetTriggered(0, "LookAt") == 1.0f) { if (EngineManagerViewModel.instance.SelectedGameObjects.Count == 0) { return; } GameObject selobj = EngineManagerViewModel.instance.SelectedGameObjects[0]; if (_lookTimer == 0) { _lookTimer = 1; //force the setup if (selobj != null) { editorCamera.gameObject.transform.LookAt(selobj.transform.position); } } else { editorCamera.gameObject.transform.LookAt(selobj.transform.position); Vector3 forw = editorCamera.gameObject.transform.GetForwardVector(); editorCamera.gameObject.transform.SetPosition(selobj.transform.position - (forw * 8)); _lookTimer = 0; } } //arrow keys moving if (Input.GetTriggered(0, "Add") > 0) { arrowSnapPrecision += 0.1f; } if (Input.GetTriggered(0, "Sub") > 0) { arrowSnapPrecision -= 0.1f; } if (Input.GetTriggered(0, "ArrowUp") > 0) { foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects) { selobj.transform.SetPositionZ(selobj.transform.position.z + arrowSnapPrecision); } } if (Input.GetTriggered(0, "ArrowDown") > 0) { foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects) { selobj.transform.SetPositionZ(selobj.transform.position.z - arrowSnapPrecision); } } if (Input.GetTriggered(0, "ArrowRight") > 0) { foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects) { selobj.transform.SetPositionX(selobj.transform.position.x + arrowSnapPrecision); } } if (Input.GetTriggered(0, "ArrowLeft") > 0) { foreach (var selobj in EngineManagerViewModel.instance.SelectedGameObjects) { selobj.transform.SetPositionX(selobj.transform.position.x - arrowSnapPrecision); } } } } }
bool operationStarted = false; //are we currently dragging public void Update() { //only works when keyboard b is held if (Input.GetHeld(0, "B") == 0.0f) { operationStarted = false; return; } Plane plane; plane.Normal = Vector3.Up; plane.pos = Vector3.Zero; //intersect with plane Vector3 mouse_ray = EditorSubsystem.getInstance().EditorCamera().ScreenToWorldPosition(Input.GetMouseX(true), Input.GetMouseY(true)); Ray3 mouse_ray3; mouse_ray3.dir = mouse_ray; mouse_ray3.dir.Normalize(); mouse_ray3.pos = EditorSubsystem.getInstance().EditorCamera().gameObject.transform.GetGlobalPosition(); Vector3 intersect_pt = Vector3.Zero; if (Ray3DToPlane(mouse_ray3, plane, ref intersect_pt)) { //snap to nearest 1 intersect_pt.X = (float)Math.Round(intersect_pt.X); intersect_pt.Y = 0; intersect_pt.Z = (float)Math.Round(intersect_pt.Z); //draw debug box to show end point Renderer.getInstance().DrawBoxPerma(intersect_pt - boundingBoxOffset, boundingBox, new Color(0, 0, 1.0f, 1.0f)); //draw line to show that we are fit to an axis if (operationStarted) { if (startPoint.X == intersect_pt.X || startPoint.Z == intersect_pt.Z) { Renderer.getInstance().DrawLinePerma(startPoint, intersect_pt, new Color(0, 1.0f, 0, 1.0f)); } } if (Input.GetTriggered(0, "MouseLClick") > 0.0f) { if (operationStarted) { //end operation Vector3 end_point = intersect_pt; FitMeshToPoints(startPoint, end_point); operationStarted = false; } else { startPoint = intersect_pt; if (EngineManagerViewModel.instance.SelectedGameObjects.Count > 0) { GameObject g = EngineManagerViewModel.instance.SelectedGameObjects[0]; AABB gAABB = g.GetComponent <CMeshRenderer>().GetMesh().GetAABB(); boundingBox = ((Vector3)gAABB.maxPoint - (Vector3)gAABB.minPoint) * 0.5f; boundingBox.X *= g.transform.scale.x; Vector3 AABBCenter = ((Vector3)gAABB.maxPoint + (Vector3)gAABB.minPoint) * 0.5f; boundingBoxOffset = (AABBCenter - gAABB.minPoint); boundingBoxOffset.Y = 0; } else { boundingBox = new Vector3(0.5f, 0.5f, 0.5f); } operationStarted = true; } } } }
void Init() { if (hasInit == true) { return; } //we assume on first update that the editor subsystem is valid GameObject tooltip = GameObject.From(ObjectFactory.getInstance().MakeNewGameObject("EditorMouseTooltip", EditorSubsystem.getInstance().GetEditorState(), true)); mouseTooltipText = tooltip.RequireComponent <CFontRenderer>(); mouseTooltipText.mPerspective = false; mouseTooltipText.mFontSize = 12; GameObject status = GameObject.From(ObjectFactory.getInstance().MakeNewGameObject("EditorStatusTooltip", EditorSubsystem.getInstance().GetEditorState(), true)); editorStatusText = status.RequireComponent <CFontRenderer>(); editorStatusText.mPerspective = false; editorStatusText.mFontSize = 25; editorStatusText.mFontScale = 0.5f; hasInit = true; //first time script reload when editor in progress MochaScriptSystem.ScriptSubsystemManaged.getInstance().Reload(); }