void EntityIDInput(ScreenResult result, string resultText)
        {
            if (result == ScreenResult.Ok)
            {
                uint entityID;
                if (uint.TryParse(resultText, out entityID))
                {
                    var entity = MyEntities.GetEntityByIdOrNull(new MyEntityIdentifier(entityID));
                    if (entity != null)
                    {
                        var position = entity.GetPosition() - entity.WorldVolume.Radius * entity.GetForward();
                        MySpectator.SetViewMatrix(Matrix.CreateLookAt(position, entity.GetPosition(), entity.GetUp()));

                        MyEditorGizmo.AddEntityToSelection(entity);
                    }
                    else
                    {
                        MyGuiScreenMessageBox.Show(MyTextsWrapperEnum.EntityIsNotExist, type: MyMessageBoxType.ERROR);
                    }
                }
                else
                {
                    MyGuiScreenMessageBox.Show(MyTextsWrapperEnum.WrongNumberFormat, type: MyMessageBoxType.ERROR);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Draw bounding area of all containers(helps for overall orientation)
        /// </summary>
        public void DrawContainersBoundingArea()
        {
            if (MyEditor.Static.GetEditedPrefabContainer() == null)
            {
                foreach (MyPrefabContainer container in m_containerList)
                {
                    container.DrawSelectionBoxAndBounding(MyEditorGizmo.IsEntityOrItsParentSelected(container), false);

                    /*
                     * if (MyEditor.DisplayPrefabContainerBounding == true)
                     *  container.DrawContainerBounding();
                     * container.DrawSelectionBoxAndBounding(MyEditorGizmo.IsEntityOrItsParentSelected(container), false);
                     */
                }
            }
            else
            {
                MyEditor.Static.GetEditedPrefabContainer().DrawSelectionBoxAndBounding(false, true);

                /*
                 * MyEditor.Static.GetEditedPrefabContainer().DrawSelectionBox(false, true);
                 * if (MyEditor.DisplayPrefabContainerBounding == true)
                 *  MyEditor.Static.GetEditedPrefabContainer().DrawContainerBounding();
                 */
            }
        }
예제 #3
0
        public virtual void OnOkClick(MyGuiControlButton sender)
        {
            if (HasEntity())
            {
                if (m_idTextbox != null)
                {
                    if (m_entity.EntityId != null)
                    {
                        var newId = new MyEntityIdentifier(Convert.ToUInt32(m_idTextbox.Text));

                        if (newId.NumericValue != m_entity.EntityId.Value.NumericValue && !MyEntityIdentifier.ExistsById(newId))
                        {
                            MyEntityIdentifier.RemoveEntity(m_entity.EntityId.Value);
                            m_entity.EntityId = newId;
                            MyEntityIdentifier.AddEntityWithId(m_entity);
                        }
                    }
                }

                if (IsPositionInput())
                {
                    Vector3 position = GetNewPosition();
                    if (IsValidPositionInput(position))
                    {
                        MyEditorGizmo.MoveAndRotateObject(position, m_entity.GetWorldRotation(), m_entity);
                    }
                }
            }
        }
예제 #4
0
        private void m_listbox_ItemDoubleClick(object sender, MyGuiControlListboxItemEventArgs eventArgs)
        {
            MyEditorGizmo.ClearSelection();
            MyEntity entityToSelect = MyEntities.GetEntityById(new MyEntityIdentifier((uint)eventArgs.Key));

            MyEditorGizmo.AddEntityToSelection(entityToSelect);
        }
예제 #5
0
        /// <summary>
        /// RenderHighlitedEntity - has to be called from render?
        /// </summary>
        public void DrawMouseOver()
        {
            if (m_bEnableAABBUnderMouse && m_physOverlapElemList.Count != 0)
            {
                //@ render of Ales rbElements

                /*foreach (MyRBElement elem in m_physOverlapElemList)
                 * {
                 *  BoundingBox elemBox = elem.GetWorldSpaceAABB();
                 *
                 *  //@ Draw AABB
                 *  Vector4 vctColorAABB = new Vector4(0.1f, 0.8f, 0.8f, 0.5f);
                 *  Matrix mtWorldAABB = Matrix.Identity;
                 *  MyDebugDraw.DrawWireFramedBox(ref mtWorldAABB, ref elemBox, ref vctColorAABB, 0.01f, 1);
                 * }*/
            }
            if (MyEditorGizmo.IsAnyAxisSelected())
            {
                HighlightEntity(m_mouseOverEntity, false);
            }

            if (m_mouseOverEntity == null)
            {
                return;
            }

            //@ mozny hack pro optimalizaci viditelnosti don't use IsVisible, nedoresena koncepce viditelnosti render/engine/game

            /*BoundingSphere bSphere = m_highlitedEntity.WorldVolumeHr;
             * if (!MyCamera.IsInFrustum(ref bSphere))
             *  return;*/

            m_mouseOverEntity.DrawMouseOver(ref MyEditorConstants.MOUSE_OVER_HIGHLIGHT_COLOR);
        }
예제 #6
0
 public override bool Perform()
 {
     MyGuiManager.AddScreen(new MyGuiScreenEditorProgress(MyTextsWrapperEnum.LoadingPleaseWait, false));
     MyEditorGizmo.ClearSelection();
     MyEditor.Static.StartBackgroundThread(new Thread(new ThreadStart(MyGuiScreenGamePlay.Static.CreateRandomWorld)));
     return(true);
 }
        private void OnOldBodClose(MyEntity entity)
        {
            var newBot = MyEntities.CreateFromObjectBuilderAndAdd(null, m_newBotBuilderToInit, m_newBotWorldMatrixToInit);

            newBot.Activate(m_activatedCheckbox.Checked, false);
            MyEditorGizmo.AddEntityToSelection(newBot);
            CloseAndCallOnOk();
        }
 /// <summary>
 /// Removes all entities - TODO - this will have to be unified in MyEntities.cs
 /// </summary>
 void RemoveAllEntities()
 {
     //MyEditor.Static.DeleteAllFromCollidingList();
     MyEditor.Static.CollidingElements.Clear();
     MyEntities.CollisionsElements.Clear();
     MyEditorGizmo.ClearSelection();
     MyEntities.CloseAll(false);
     MyVoxelMaps.RemoveAll();
 }
        void wayPointsListBox_ItemSelect(object sender, MyGuiControlListboxItemEventArgs eventArgs)
        {
            var selectedPath = MyWayPointGraph.StoredPaths[eventArgs.Key];

            MyEditorGizmo.ClearSelection();

            MyWayPointGraph.SelectedPath = selectedPath;
            MyEditorGizmo.AddEntitiesToSelection(MyWayPointGraph.SelectedPath.WayPoints);
        }
        /// <summary>
        /// Adds entity to scene
        /// </summary>
        /// <param name="entity"></param>
        protected virtual void AddToScene(MyEntity entity)
        {
            //add entity into world if possible to ensure we manipulate with object in scene
            if (!(entity is MyPrefabBase))
            {
                // Quit container edit mode if entity was created in non-edit mode
                if (m_activeContainer == null && MyEditor.Static.IsEditingPrefabContainer())
                {
                    MyEditor.Static.ExitActivePrefabContainer();
                }

                MyEntities.Add(entity);
            }
            else
            {
                // In case undo/redo is performed on prefab, make sure that its parent container is switched to edit mode
                MyPrefabBase prefab = (MyPrefabBase)entity;
                MyEditor.Static.EditPrefabContainer(m_activeContainer);
                MyEditor.Static.GetEditedPrefabContainer().AddPrefab(prefab);
            }

            // adding an entity will make its type selectable
            Type type = null;

            if (entity is MyPrefabBase || entity is MyPrefabContainer)
            {
                type = typeof(MyPrefabBase);
            }
            else if (entity is MyWayPoint)
            {
                type = typeof(MyWayPoint);
            }
            else if (entity is MyVoxelMap)
            {
                type = typeof(MyVoxelMap);
            }
            else if (entity is MyDummyPoint)
            {
                type = typeof(MyDummyPoint);
            }
            else if (entity is MySpawnPoint)
            {
                type = typeof(MySpawnPoint);
            }
            else if (entity is MyInfluenceSphere)
            {
                type = typeof(MyInfluenceSphere);
            }
            if (type != null)
            {
                MyEntities.SetTypeHidden(type, false);
                MyEntities.SetTypeSelectable(type, true);
            }

            MyEditorGizmo.AddEntityToSelection(entity);
        }
예제 #11
0
        void OnPlayerStartFlagChange(MyGuiControlCheckbox sender)
        {
            if (!m_canUpdateValues)
            {
                return;
            }

            // Make sure there's only one start location per sector
            if (m_playerStart.Checked && (DummyPoint.DummyFlags & MyDummyPointFlags.PLAYER_START) == 0)
            {
                foreach (var entity in MyEntities.GetEntities())
                {
                    var dummyPoint = entity as MyDummyPoint;
                    if (dummyPoint != null && (dummyPoint.DummyFlags & MyDummyPointFlags.PLAYER_START) > 0)
                    {
                        MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.EntryPointAlreadyDefined, MyTextsWrapperEnum.MessageBoxCaptionError,
                                                                         MyTextsWrapperEnum.Yes, MyTextsWrapperEnum.Cancel, mbReturn =>
                        {
                            if (mbReturn == MyGuiScreenMessageBoxCallbackEnum.YES)
                            {
                                MyEditorGizmo.ClearSelection();
                                MyEditorGizmo.AddEntityToSelection(dummyPoint);
                                CloseScreen();
                                return;
                            }
                            else
                            {
                                // We want to enable multiple start dummies
                                //m_playerStart.Checked = false;
                            }
                        }));
                    }
                }
            }

            if (m_playerStart.Checked)
            {
                DummyPoint.DummyFlags |= MyDummyPointFlags.PLAYER_START;
            }
            else
            {
                DummyPoint.DummyFlags &= ~MyDummyPointFlags.PLAYER_START;
            }

            if (m_playerStart.Checked)
            {
                DummyPoint.DummyFlags |= MyDummyPointFlags.PLAYER_START;
            }
            else
            {
                DummyPoint.DummyFlags &= ~MyDummyPointFlags.PLAYER_START;
            }

            UpdateValues();
        }
예제 #12
0
 //
 public bool IsValidPositionInput(Vector3 position)
 {
     if (position != MyEditorGizmo.GetSelectedObjectsCenter())
     {
         return(true);
     }
     else
     {
         MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.InvalidPositionCoordinates, MyTextsWrapperEnum.MessageBoxCaptionError, MyTextsWrapperEnum.Ok, null));
         return(false);
     }
 }
예제 #13
0
        private void OnUnselectGroup(MyGuiControlButton sender)
        {
            var group = GetFocusedGroup();

            if (group != null && group.GetCount() > 0)
            {
                var container = group.GetContainer();
                if (MyEditor.Static.IsEditingPrefabContainer() && MyEditor.Static.GetEditedPrefabContainer() == container)
                {
                    MyEditorGizmo.RemoveEntitiesFromSelection(group.GetEntities());
                }
            }
        }
 /// <summary>
 /// Transform entities to starting transformation state
 /// </summary>
 /// <returns></returns>
 public override bool Rollback()
 {
     if (m_containsPrefab)
     {
         MyEditor.Static.EditPrefabContainer(m_activeContainer);
     }
     foreach (MyEditorTransformData transformData in m_startTransformData)
     {
         MyEditorGizmo.MoveAndRotateObject(transformData.GetPosition(), transformData.GetOrientation(), transformData.GetEntity());
     }
     MyEditor.Static.CheckAllCollidingObjects();
     return(true);
 }
예제 #15
0
        private void OnSelectGroup(MyGuiControlButton sender)
        {
            var group = GetFocusedGroup();

            if (group != null && group.GetCount() > 0)
            {
                var container = group.GetContainer();
                if (MyEditor.Static.IsEditingPrefabContainer() && MyEditor.Static.GetEditedPrefabContainer() == container)
                {
                    MyEditorGizmo.AddEntitiesToSelection(group.GetEntities());
                }
                else
                {
                    var editorState   = MyEditor.GetCurrentState();
                    var contextHelper = MyGuiContextMenuHelpers.GetEditorContextMenuHelper(editorState);

                    // If exit/enter to prefab container available
                    if (container != null &&
                        (editorState == MyEditorStateEnum.NOTHING_SELECTED ||
                         contextHelper.IsActionTypeAvailable(MyGuiContextMenuItemActionType.ENTER_PREFAB_CONTAINER) ||
                         contextHelper.IsActionTypeAvailable(MyGuiContextMenuItemActionType.EXIT_EDITING_MODE)))
                    {
                        // Switch to group container
                        if (MyEditor.Static.IsEditingPrefabContainer())
                        {
                            MyEditor.Static.ExitActivePrefabContainer();
                        }
                        MyEditor.Static.EditPrefabContainer(container);

                        if (MyEditor.Static.IsEditingPrefabContainer() && MyEditor.Static.GetEditedPrefabContainer() == container)
                        {
                            MyEditorGizmo.AddEntitiesToSelection(group.GetEntities());
                        }
                    }
                    else if (container == null)
                    {
                        if (MyEditor.Static.IsEditingPrefabContainer())
                        {
                            MyEditor.Static.ExitActivePrefabContainer();
                        }
                        MyEditorGizmo.ClearSelection();
                        MyEditorGizmo.AddEntitiesToSelection(group.GetEntities());
                    }
                    else
                    {
                        MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, new StringBuilder("Can't select group."), new StringBuilder("Select Group Error"), MyTextsWrapperEnum.Ok, null));
                    }
                }
            }
        }
예제 #16
0
        protected override void AddToScene(MyEntity entity)
        {
            base.AddToScene(entity);

            // in case we are adding new prefab container, enter directly into edit mode of this new container
            // but we dont want enter into edit mode when containers are duplicated
            if (entity is MyPrefabContainer)
            {
                MyEditor.Static.EditPrefabContainer((MyPrefabContainer)entity);
                foreach (MyPrefabBase child in (entity as MyPrefabContainer).Children)
                {
                    MyEditorGizmo.AddEntityToSelection(child);
                }
            }
        }
        /// <summary>
        /// Create entities from action object builders
        /// </summary>
        void AddOrCreate()
        {
            MyEditorGizmo.ClearSelection();

            // Once entities has been created in this action, they remain and if needed, are only removed/added to scene
            if (ActionEntities != null && ActionEntities.Count > 0)
            {
                foreach (MyEntity actionEntity in ActionEntities)
                {
                    AddToScene(actionEntity);
                }
            }
            else
            {
                // If no ActionEntites are present, create them from provided object builders
                foreach (ObjectBuilderCreate crate in ActionObjectBuilders)
                {
                    CreateFromObjectBuilder(crate.ObjectBuilder, crate.Matrix, crate.ScreenPosition);
                }
            }

            // Link the new entities and clean up waypoint vertices
            foreach (var e in ActionEntities)
            {
                e.Link();
            }
            MyWayPointGraph.DeleteNullVerticesFromPaths();

            // When copying a single waypoint, connect it to its source
            if (this is MyEditorActionEntityCopy && ActionEntities.Count == 1 && ActionEntities[0] is MyWayPoint)
            {
                var source = (this as MyEditorActionEntityCopy).SourceEntities[0] as MyWayPoint;
                if (source != null)
                {
                    MyWayPoint.Connect(source, ActionEntities[0] as MyWayPoint);
                }
            }

            // When copying prefabs, connect snap points connections
            if (this is MyEditorActionEntityCopy)
            {
                MyEditor.Static.CopySnapPointLinks((this as MyEditorActionEntityCopy).SourceEntities, (this as MyEditorActionEntityCopy).RemapContext);
            }

            MyEditor.Static.IssueCheckAllCollidingObjects();
        }
        /// <summary>
        /// Remove all action entities
        /// </summary>
        protected virtual void RemoveFromScene()
        {
            foreach (MyEntity actionEntity in ActionEntities)
            {
                //dont delete player ship
                if (actionEntity == MySession.PlayerShip)
                {
                    continue;
                }

                MyEditorGizmo.RemoveEntityFromSelection(actionEntity);

                if (actionEntity == MyEditor.Static.GetEditedPrefabContainer())
                {
                    MyEditor.Static.ResetActivePrefabContainer();
                }

                MyEditor.Static.DeleteEntityFromCollidingList(actionEntity);

                if (!(actionEntity is MyPrefabBase))
                {
                    if (m_activeContainer == null && MyEditor.Static.IsEditingPrefabContainer())
                    {
                        MyEditor.Static.ExitActivePrefabContainer();
                    }
                }
                else
                {
                    MyEditor.Static.EditPrefabContainer(m_activeContainer);
                }

                actionEntity.MarkForClose();

                MyEditor.Static.RecheckAllColidingEntitesAndClearNonColiding();
            }

            ActionEntities.Clear();

            MyAudio.AddCue2D(MySoundCuesEnum.GuiEditorObjectDelete);
        }
        public override void OnOkClick(MyGuiControlButton sender)
        {
            base.OnOkClick(sender);

            if (m_botBuilder != null)
            {
                m_botBuilder.Faction      = (MyMwcObjectBuilder_FactionEnum)m_selectShipFactionCombobox.GetSelectedKey();
                m_botBuilder.AITemplate   = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                m_botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                m_botBuilder.SeeDistance  = m_seeDistanceSlider.GetValue();
                var  templateBuilder = m_templatesBuilders[m_selectSmallShipCombobox.GetSelectedKey()];
                bool isTemplate      = templateBuilder.UserData != null;
                if (isTemplate)
                {
                    var template = templateBuilder.UserData as MySmallShipTemplate;
                    if (m_botBuilder.ShipTemplateID == null)
                    {
                        if (m_inventoryBuilder == null)
                        {
                            m_botBuilder.Inventory = null;
                            m_botBuilder.Weapons   = null;
                            m_botBuilder.Engine    = null;
                            m_botBuilder.Armor     = null;
                            m_botBuilder.Radar     = null;
                        }
                        else
                        {
                            m_botBuilder.Inventory = m_inventoryBuilder.Inventory;
                            m_botBuilder.Weapons   = m_inventoryBuilder.Weapons;
                            m_botBuilder.Engine    = m_inventoryBuilder.Engine;
                            m_botBuilder.Armor     = m_inventoryBuilder.Armor;
                            m_botBuilder.Radar     = m_inventoryBuilder.Radar;
                        }
                    }
                    m_botBuilder.ShipTemplateID = template.ID;
                }
                else
                {
                    var builderWithAllItems = MyMwcObjectBuilder_SmallShip_Bot.CreateObjectBuilderWithAllItems(templateBuilder.Builder.ShipType, MyShipTypeConstants.GetShipTypeProperties(templateBuilder.Builder.ShipType).GamePlay.CargoCapacity);
                    if (m_botBuilder.ShipTemplateID != null)
                    {
                        m_botBuilder.Inventory = builderWithAllItems.Inventory;
                        m_botBuilder.Weapons   = builderWithAllItems.Weapons;
                        m_botBuilder.Engine    = builderWithAllItems.Engine;
                        m_botBuilder.Armor     = builderWithAllItems.Armor;
                        m_botBuilder.Radar     = builderWithAllItems.Radar;
                    }
                    m_botBuilder.ShipTemplateID = null;
                }
                m_botBuilder.ShipType = templateBuilder.Builder.ShipType;
                CloseAndCallOnOk();
            }
            else if (m_bot != null) // edit SmallShip
            {
                Matrix matrix = m_bot.WorldMatrix;
                MyMwcObjectBuilder_SmallShip_Bot botBuilder = m_bot.GetObjectBuilder(true) as MyMwcObjectBuilder_SmallShip_Bot;
                System.Diagnostics.Debug.Assert(botBuilder != null);

                botBuilder.Faction      = (MyMwcObjectBuilder_FactionEnum)m_selectShipFactionCombobox.GetSelectedKey();
                botBuilder.AITemplate   = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                botBuilder.SeeDistance  = m_seeDistanceSlider.GetValue();
                botBuilder.ShipType     = (MyMwcObjectBuilder_SmallShip_TypesEnum)m_selectSmallShipCombobox.GetSelectedKey();

                if (m_inventoryBuilder != null)
                {
                    botBuilder.Inventory = m_inventoryBuilder.Inventory;
                    botBuilder.Weapons   = m_inventoryBuilder.Weapons;
                    botBuilder.Engine    = m_inventoryBuilder.Engine;
                    botBuilder.Armor     = m_inventoryBuilder.Armor;
                    botBuilder.Radar     = m_inventoryBuilder.Radar;
                }

                MyEditorGizmo.ClearSelection();
                m_newBotBuilderToInit     = botBuilder;
                m_newBotWorldMatrixToInit = matrix;
                m_bot.MarkForClose();
                m_bot.OnClose += OnOldBodClose;
            }
            else // create SmallShip
            {
                MyMwcObjectBuilder_SmallShip_TypesEnum shipType = (MyMwcObjectBuilder_SmallShip_TypesEnum)
                                                                  Enum.ToObject(typeof(MyMwcObjectBuilder_SmallShip_TypesEnum), m_selectSmallShipCombobox.GetSelectedKey());

                MyMwcObjectBuilder_FactionEnum shipFaction = (MyMwcObjectBuilder_FactionEnum)
                                                             Enum.ToObject(typeof(MyMwcObjectBuilder_FactionEnum), m_selectShipFactionCombobox.GetSelectedKey());

                MyMwcPositionAndOrientation      positionAndOrientation = new MyMwcPositionAndOrientation(m_newObjectPosition, Vector3.Forward, Vector3.Up);
                MyMwcObjectBuilder_SmallShip_Bot botBuilder             = MyEditor.CreateDefaultBotObjectBuilder(positionAndOrientation.Position, positionAndOrientation.Forward,
                                                                                                                 positionAndOrientation.Up, shipType, shipFaction);

                botBuilder.AITemplate   = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                botBuilder.SeeDistance  = m_seeDistanceSlider.GetValue();

                MyEditor.Static.CreateFromObjectBuilder(botBuilder, Matrix.CreateWorld(m_newObjectPosition, Vector3.Forward, Vector3.Up), m_screenPosition);
                CloseAndCallOnOk();
            }
        }
예제 #20
0
        public void OnOkClick(MyGuiControlButton sender)
        {
            // set hidden/selectable flags
            for (int i = 0; i < TYPE_COUNT; i++)
            {
                MyEntities.SetTypeHidden(types[i], !m_checkboxVisible[i].Checked);
                MyEntities.SetTypeSelectable(types[i], m_checkboxSelectable[i].Checked);
            }

            MyEntities.SafeAreasHidden       = !m_checkboxSafeAreasVisible.Checked;
            MyEntities.DetectorsHidden       = !m_checkboxDetectorsVisible.Checked;
            MyEntities.ParticleEffectsHidden = !m_checkboxParticleEffectsVisible.Checked;

            MyEntities.SafeAreasSelectable       = m_checkboxSafeAreasSelectable.Checked;
            MyEntities.DetectorsSelectable       = m_checkboxDetectorsSelectable.Checked;
            MyEntities.ParticleEffectsSelectable = m_checkboxParticleEffectsSelectable.Checked;

            MyEditor.Static.ShowSnapPoints          = m_checkboxSnapPointsVisible.Checked;
            MyEditor.Static.ShowGeneratorsRange     = m_checkboxGeneratorsRangeVisible.Checked;
            MyEditor.Static.ShowLargeWeaponsRange   = m_checkboxLargeWeaponsRangeVisible.Checked;
            MyEditor.Static.ShowDeactivatedEntities = m_checkboxDisplayDeactivatedEntities.Checked;

            // if a selected object became unselectable, remove it from selection
            var toRemove = new List <MyEntity>();

            foreach (var selected in MyEditorGizmo.SelectedEntities)
            {
                for (int i = 0; i < TYPE_COUNT; i++)
                {
                    if (!MyEntities.IsTypeSelectable(types[i]) && types[i].IsInstanceOfType(selected))
                    {
                        toRemove.Add(selected);
                    }
                }
                var dummy = selected as MyDummyPoint;
                if (dummy != null)
                {
                    switch (dummy.DummyFlags)
                    {
                    case MyDummyPointFlags.SAFE_AREA: if (!MyEntities.SafeAreasSelectable)
                        {
                            toRemove.Add(selected);
                        }
                        break;

                    case MyDummyPointFlags.DETECTOR: if (!MyEntities.DetectorsSelectable)
                        {
                            toRemove.Add(selected);
                        }
                        break;

                    case MyDummyPointFlags.PARTICLE: if (!MyEntities.ParticleEffectsSelectable)
                        {
                            toRemove.Add(selected);
                        }
                        break;

                    default: break;
                    }
                }
            }

            MyEditorGizmo.RemoveEntitiesFromSelection(toRemove);

            MyEditor.Static.RefreshSelectionSettings();

            // waypoints ignore depth?
            MyWayPointGraph.WaypointsIgnoreDepth = m_checkboxWaypointIgnoreDepth.Checked;

            SaveSettings();

            CloseScreen();
        }
        public virtual void Update()
        {
            FilterAddObjectTree(MyEditorGizmo.SelectedSnapPoint);

            // Get editor state and allowed context action
            var notDragging   = !m_addObjectTreeViewdragDrop.Dragging;
            var editorState   = MyEditor.GetCurrentState();
            var contextHelper = MyGuiContextMenuHelpers.GetEditorContextMenuHelper(editorState);

            // Choose editor state dependent textures
            var cameraText = editorState == MyEditorStateEnum.ATTACHED ? MyTextsWrapperEnum.ToolbarDetachFromCamera : MyTextsWrapperEnum.ToolbarAttachToCamera;
            var enterPrefabContainerText = CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EXIT_EDITING_MODE) ? MyTextsWrapperEnum.ToolbarExitEditingMode : MyTextsWrapperEnum.ToolbarEnterPrefabContainer;
            var enterVoxelHandText       = editorState == MyEditorStateEnum.VOXEL_HAND_ENABLED ? MyTextsWrapperEnum.ToolbarExitVoxelHand : MyTextsWrapperEnum.ToolbarEnterVoxelHand;
            var showSnapPointsText       = MyEditor.Static.ShowSnapPoints ? MyTextsWrapperEnum.ToolbarHideSnapPoints : MyTextsWrapperEnum.ToolbarShowSnapPoints;
            var linkSnapPointsText       = MyEditor.Static.CanUnlinkSnapPoints(MyEditorGizmo.SelectedSnapPoint) ? MyTextsWrapperEnum.ToolbarUnlinkSnapPoints : MyTextsWrapperEnum.ToolbarLinkSnapPoints;

            // Change look of editor state dependent buttons
            m_attachToCameraButton.SetTextEnum(cameraText);
            m_enterPrefabContainerButton.SetTextEnum(enterPrefabContainerText);
            m_enterVoxelHandButton.SetTextEnum(enterVoxelHandText);
            m_linkSnapPoints.SetTextEnum(linkSnapPointsText);

            // Enable/Disable buttons (context)
            m_addObjectButton.Enabled = notDragging &&
                                        (CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ADD_OBJECT) ||
                                         CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EXIT_VOXEL_HAND));
            //m_editObjectsButton.Enabled = notDragging &&
            //   ((CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EDIT_SELECTED) && MyEditor.Static.CanEditSelected()) ||
            //    CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EDIT_VOXEL_HAND));
            m_editObjectsButton.Enabled = notDragging &&
                                          (CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EDIT_SELECTED) && MyEditor.Static.CanEditSelected());
            m_resetRotationButton.Enabled        = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.RESET_ROTATION);
            m_copySelectedButton.Enabled         = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.COPY_SELECTED);
            m_switchGizmoSpaceButton.Enabled     = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.SWITCH_GIZMO_SPACE);
            m_switchGizmoModeButton.Enabled      = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.SWITCH_GIZMO_MODE);
            m_linkSnapPoints.Enabled             = notDragging && MyEditorGizmo.SelectedSnapPoint != null;
            m_toggleSnapPoints.Enabled           = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.TOGGLE_SNAP_POINTS);
            m_selectAllObjectsButton.Enabled     = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.SELECT_ALL_OBJECTS);
            m_exitSelectedButton.Enabled         = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EXIT_SELECTED);
            m_enterPrefabContainerButton.Enabled = notDragging &&
                                                   (CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ENTER_PREFAB_CONTAINER) ||
                                                    CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EXIT_EDITING_MODE));
            m_attachToCameraButton.Enabled = notDragging &&
                                             (CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ATTACH_TO_CAMERA) ||
                                              CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.DETACH_FROM_CAMERA));
            m_enterVoxelHandButton.Enabled = notDragging &&
                                             (CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ENTER_VOXEL_HAND) ||
                                              CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EXIT_VOXEL_HAND));
            m_clearWholeSectorButton.Enabled = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.CLEAR_WHOLE_SECTOR);
            m_loadSectorButton.Enabled       = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.LOAD_SECTOR) && !m_isDemoUser;
            m_saveSectorButton.Enabled       = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.SAVE_SECTOR) && MySession.CanBeSaved(false, MyGuiScreenGamePlay.Static.GetSectorIdentifier(), true);
            MyTextsWrapperEnum?isDemoS = null;

            if (MyClientServer.LoggedPlayer != null && MyClientServer.LoggedPlayer.IsDemoUser())
            {
                isDemoS = MyTextsWrapperEnum.NotAvailableInDemoMode;
            }
            m_saveSectorButton.AccessForbiddenReason = isDemoS;
            m_loadSectorButton.AccessForbiddenReason = isDemoS;
            //m_adjustGridButton.Enabled = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ADJUST_GRID);
            //m_sunSettingsButton.Enabled = false; // atm. disable, SUN_SETTINGS + FOG_SETTINGS
            m_groupsButton.Enabled         = notDragging;
            m_copyToolButton.Enabled       = notDragging;
            m_optionsButton.Enabled        = notDragging;
            m_selectAndHideButton.Enabled  = notDragging;
            m_editPropertiesButton.Enabled = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EDIT_PROPERTIES) &&
                                             MyGuiScreenEditorEditProperties.CanEditProperties(MyEditorGizmo.SelectedEntities);
            m_correctSnappedPrefabsButton.Enabled   = notDragging && CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.CORRECT_SNAPPED_PREFABS);
            m_selectDeactivatedEntityButton.Enabled = notDragging;
            m_findEntityButton.Enabled = notDragging;

            if (!CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.ADD_OBJECT) && m_addObjectTreeView.Visible)
            {
                SetAddObjectVisibility(false);
            }
            SetEditVoxelHandVisibility(CheckContextAction(contextHelper, MyGuiContextMenuItemActionType.EDIT_VOXEL_HAND));
            if (m_editVoxelHand.Visible && MyEditorGizmo.IsAnyEntitySelected())
            {
                if (!MyFakes.MWBUILDER)
                {
                    if (!(MyEditorVoxelHand.SelectedVoxelMap != null && MyEditorGizmo.SelectedEntities.Count == 1 && MyEditorGizmo.SelectedEntities[0] == MyEditorVoxelHand.SelectedVoxelMap))
                    {
                        MyEditor.Static.PerformContextMenuAction(MyGuiContextMenuItemActionType.EXIT_SELECTED);

                        if (MyEditorVoxelHand.SelectedVoxelMap != null)
                        {
                            MyEditorGizmo.AddEntityToSelection(MyEditorVoxelHand.SelectedVoxelMap);
                        }
                    }
                }
            }
        }
예제 #22
0
        protected override void OnOkClick(MyGuiControlButton sender)
        {
            CloseScreen();
            var focused = m_groupList.GetFocusedItem();

            if (focused != null)
            {
                var group = focused.Tag as MyMwcObjectBuilder_ObjectGroup;

                IEnumerable <MyMwcObjectBuilder_PrefabBase> prefabs     = group.GetPrefabBuilders(m_entities);
                IEnumerable <MyMwcObjectBuilder_Base>       rootObjects = group.GetRootBuilders(m_entities);
                var objects3d = rootObjects.OfType <MyMwcObjectBuilder_Object3dBase>();

                if (objects3d.Any())
                {
                    MyEditorGizmo.ClearSelection();

                    var basePos  = MyCamera.Position + Matrix.Invert(MyCamera.ViewMatrix).Forward * 100;
                    var firstPos = objects3d.First().PositionAndOrientation.Position;
                    var offset   = basePos - firstPos;

                    foreach (var b in objects3d)
                    {
                        b.PositionAndOrientation.Position += offset;
                        b.ClearEntityId();
                        MyEntity entity = MyEntities.CreateFromObjectBuilderAndAdd(null, b, b.PositionAndOrientation.GetMatrix());
                        MyEditorGizmo.AddEntityToSelection(entity);
                    }
                }

                // Prefabs
                var editedContainer = MyEditor.Static.GetEditedPrefabContainer();
                if (editedContainer == null)
                {
                    MyMwcObjectBuilder_PrefabContainer prefabContainerBuilder = new MyMwcObjectBuilder_PrefabContainer(
                        null, MyMwcObjectBuilder_PrefabContainer_TypesEnum.INSTANCE, new List <MyMwcObjectBuilder_PrefabBase>(), MyClientServer.LoggedPlayer.GetUserId(),
                        MyMwcObjectBuilder_FactionEnum.Euroamerican, new MyMwcObjectBuilder_Inventory(new List <MyMwcObjectBuilder_InventoryItem>(), MyInventory.DEFAULT_MAX_ITEMS));

                    editedContainer = MyEntities.CreateFromObjectBuilderAndAdd(
                        null, prefabContainerBuilder,
                        Matrix.CreateTranslation(MyCamera.Position + Matrix.Invert(MyCamera.ViewMatrix).Forward * 100)) as MyPrefabContainer;

                    MyEditor.Static.EditPrefabContainer(editedContainer);
                }

                if (editedContainer != null)
                {
                    MyEditorGizmo.ClearSelection();
                    List <MyEntity> addedEntities = new List <MyEntity>();

                    foreach (var prefabBuilder in prefabs)
                    {
                        prefabBuilder.EntityId = null;
                        var entity = editedContainer.CreateAndAddPrefab(null, prefabBuilder);
                        addedEntities.Add(entity);
                    }

                    // Select newly added objects
                    foreach (var entity in addedEntities)
                    {
                        MyEditorGizmo.AddEntityToSelection(entity);
                    }
                }
            }
        }