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;
         }
     });
 }
示例#2
0
 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;
         }
     });
 }
示例#4
0
        public void RegisterTick()
        {
            _tick = Tick;
            EditorSubsystem.getInstance().Register_Tick(_tick);

            //hack: for now, bind data direct after embed
            EngineCommandBindings.GridSize = EngineCommandBindings.GridSize;
        }
示例#5
0
        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);
        }
示例#6
0
 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;
 }
示例#7
0
        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);
            }
        }
示例#9
0
 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);
                }
            });
        }
示例#11
0
        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();
                }
            }));
        }
示例#15
0
        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);
                        }
                    }
                }
            }
        }
示例#16
0
    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;
                }
            }
        }
    }
示例#17
0
        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();
        }