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); } } }
/// <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(); */ } }
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); } } } }
private void m_listbox_ItemDoubleClick(object sender, MyGuiControlListboxItemEventArgs eventArgs) { MyEditorGizmo.ClearSelection(); MyEntity entityToSelect = MyEntities.GetEntityById(new MyEntityIdentifier((uint)eventArgs.Key)); MyEditorGizmo.AddEntityToSelection(entityToSelect); }
/// <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); }
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); }
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(); }
// 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); } }
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); }
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)); } } } }
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(); } }
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); } } } } }
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); } } } }