private void createNewObjectIfNotExists() { if (tileSetSelectionView.SelectedObject == null) { int newId = WorldBuilderUtils.CreateObject(placementType, placementMode, tileSetSelectionView); if (newId >= 0) { switch (placementType) { case PlacementType.BlockPlacement: tileSetSelectionView.SelectedObject = BlockType.lookup[newId]; break; case PlacementType.AmbientObjectPlacement: tileSetSelectionView.SelectedObject = AmbientObjectType.lookup[newId]; break; case PlacementType.AmbientHitableObjectPlacement: tileSetSelectionView.SelectedObject = AmbientHitableObjectType.lookup[newId]; break; } } } }
private void editObject() { var selectedElement = manageObjectList.SelectedElement; object selectedObject = null; switch (placementType) { case PlacementType.BlockPlacement: selectedObject = ((BlockListItem)selectedElement).BlockType; break; case PlacementType.AmbientObjectPlacement: selectedObject = ((AmbientObjectListItem)selectedElement).AmbientObjectType; break; case PlacementType.AmbientHitableObjectPlacement: selectedObject = ((AmbientHitableObjectListItem)selectedElement).AmbientHitableObjectType; break; case PlacementType.LivingEntityPlacement: selectedObject = ((LivingEntityListItem)selectedElement).LivingEntityType; break; } var dialog = new InputDialog("Edit Object", JToken.FromObject(selectedObject, SerializationUtils.Serializer).ToString(Formatting.Indented)); if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { WorldBuilderUtils.ReplaceTypeFromString(placementType, dialog.ResultText); refreshListAndSelectId(((ObjectListItem)selectedElement).GetObject().ID); } }
private void createNewObject() { int newId = WorldBuilderUtils.CreateObject(placementType, placementMode, tileSetSelectionView); if (newId != -1 && placementMode == PlacementMode.CreateFromTileset) { refreshListAndSelectId(newId); } }
private void createNewObjectFromJson() { int newId = WorldBuilderUtils.CreateObject(placementType, placementMode, tileSetSelectionView, true); if (newId != -1) { refreshListAndSelectId(newId); } }
private void placeObjectAtPosition() { if (placementMode == PlacementMode.Manage) { WorldBuilderUtils.CreateObjectAtMousePosition(((ObjectListItem)manageObjectList.SelectedElement).GetObject()); } else if (placementMode == PlacementMode.CreateFromTileset && tileSetSelectionView.SelectedObject != null) { WorldBuilderUtils.CreateObjectAtMousePosition(tileSetSelectionView.SelectedObject); } }
private void createNewFrom() { var selectedElement = manageObjectList.SelectedElement; object selectedObject = null; switch (placementType) { case PlacementType.BlockPlacement: selectedObject = ((BlockListItem)selectedElement).BlockType; break; case PlacementType.AmbientObjectPlacement: selectedObject = ((AmbientObjectListItem)selectedElement).AmbientObjectType; break; case PlacementType.AmbientHitableObjectPlacement: selectedObject = ((AmbientHitableObjectListItem)selectedElement).AmbientHitableObjectType; break; case PlacementType.LivingEntityPlacement: selectedObject = ((LivingEntityListItem)selectedElement).LivingEntityType; break; } int newId = WorldBuilderUtils.GenerateNewId(placementType); var selectedJToken = JObject.FromObject(selectedObject, SerializationUtils.Serializer); selectedJToken["ID"] = newId; var dialog = new InputDialog("Create New Object From", selectedJToken.ToString(Formatting.Indented)); if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { WorldBuilderUtils.ReplaceTypeFromString(placementType, dialog.ResultText); refreshListAndSelectId(newId); } }
public override void Draw(SpriteBatch spriteBatch, GameTime gameTime) { if (SimulationGame.IsWorldBuilderOpen) { spriteBatch.Draw(backgroundOverlay, Bounds.ToXnaRectangle(), backgroundColor); base.Draw(spriteBatch, gameTime); if (placementType != PlacementType.NoType && placementType != PlacementType.Inspect && placementType != PlacementType.WorldPartDetails) { switch (placementMode) { case PlacementMode.Manage: manageObjectList.Draw(spriteBatch, gameTime); if (manageObjectList.SelectedElement != null) { editBtn.Draw(spriteBatch, gameTime); createNewFromBtn.Draw(spriteBatch, gameTime); removeBtn.Draw(spriteBatch, gameTime); } break; case PlacementMode.ChooseTileset: tilesetSelectionList.Draw(spriteBatch, gameTime); break; case PlacementMode.CreateFromTileset: tileSetSelectionView.Draw(spriteBatch, gameTime); if (tileSetSelectionView.SelectedSpritePosition != null) { createBtn.Draw(spriteBatch, gameTime); createIfNotExistBtn.Draw(spriteBatch, gameTime); } break; } manageBtn.Draw(spriteBatch, gameTime); createFromJsonBtn.Draw(spriteBatch, gameTime); if (placementType != PlacementType.LivingEntityPlacement) { createFromTilesetBtn.Draw(spriteBatch, gameTime); } } else if (placementType == PlacementType.WorldPartDetails) { changePersistencyBtn.Draw(spriteBatch, gameTime); createWorldLinkBtn.Draw(spriteBatch, gameTime); createInteriorBtn.Draw(spriteBatch, gameTime); if (SimulationGame.Player.InteriorID != Interior.Outside) { changeInteriorDimensionsBtn.Draw(spriteBatch, gameTime); removeInteriorBtn.Draw(spriteBatch, gameTime); } worldPartDetailsTextView.Draw(spriteBatch, gameTime); } else if (placementType == PlacementType.Inspect) { if (inspectView.SelectedGameObjects.Count > 0) { editInstanceBtn.Draw(spriteBatch, gameTime); removeInstanceBtn.Draw(spriteBatch, gameTime); showInstanceTypeBtn.Draw(spriteBatch, gameTime); selectedObjectDetailTextView.Draw(spriteBatch, gameTime); } else if (inspectView.SelectedWorldLink != null) { editInstanceBtn.Draw(spriteBatch, gameTime); removeInstanceBtn.Draw(spriteBatch, gameTime); selectedObjectDetailTextView.Draw(spriteBatch, gameTime); } } if ((placementMode == PlacementMode.Manage && manageObjectList.SelectedElement != null) || (placementMode == PlacementMode.CreateFromTileset && tileSetSelectionView.SelectedObject != null)) { placeView.Draw(spriteBatch, gameTime); if (placeView.Bounds.Contains(SimulationGame.MouseState.Position)) { if (SimulationGame.KeyboardState.IsKeyDown(Keys.LeftControl) || SimulationGame.KeyboardState.IsKeyDown(Keys.RightControl)) { WorldBuilderUtils.DrawPreview(spriteBatch, SimulationGame.MouseState.Position.ToVector2(), (placementMode == PlacementMode.Manage) ? ((ObjectListItem)manageObjectList.SelectedElement).GetObject() : tileSetSelectionView.SelectedObject); } else { var isBlockSelected = false; if (placementMode == PlacementMode.Manage) { if (((ObjectListItem)manageObjectList.SelectedElement) is BlockListItem) { isBlockSelected = true; } } else if (placementMode == PlacementMode.CreateFromTileset) { if (tileSetSelectionView.SelectedObject is BlockType) { isBlockSelected = true; } } if (isBlockSelected) { var worldBlockPosition = GeometryUtils.GetBlockFromReal((int)SimulationGame.RealWorldMousePosition.X, (int)SimulationGame.RealWorldMousePosition.Y); WorldBuilderUtils.DrawPreview(spriteBatch, SimulationGame.ConvertWorldPositionToUIPosition(worldBlockPosition.X * WorldGrid.BlockSize.X, worldBlockPosition.Y * WorldGrid.BlockSize.Y), (placementMode == PlacementMode.Manage) ? ((ObjectListItem)manageObjectList.SelectedElement).GetObject() : tileSetSelectionView.SelectedObject); } else { var worldBlockPosition = GeometryUtils.GetChunkPosition((int)SimulationGame.RealWorldMousePosition.X, (int)SimulationGame.RealWorldMousePosition.Y, 16, 16); WorldBuilderUtils.DrawPreview(spriteBatch, SimulationGame.ConvertWorldPositionToUIPosition(worldBlockPosition.X * 16, worldBlockPosition.Y * 16), (placementMode == PlacementMode.Manage) ? ((ObjectListItem)manageObjectList.SelectedElement).GetObject() : tileSetSelectionView.SelectedObject); } } } } else { inspectView.Draw(spriteBatch, gameTime); } } }
public void LoadContent() { tilesets = WorldBuilderUtils.GetTileSets(SimulationGame.ContentManager.RootDirectory + "\\Tiles"); Bounds = new Rect(SimulationGame.Resolution.Width * 2 / 3, 0, SimulationGame.Resolution.Width / 3, SimulationGame.Resolution.Height); tilesetSelectionArea = new Rect(Bounds.X, Bounds.Y + 120, Bounds.Width - 10, Bounds.Height); backgroundOverlay = new Texture2D(SimulationGame.Graphics.GraphicsDevice, 1, 1); backgroundOverlay.SetData(new Color[] { Color.White }); placeView = new BaseUI() { Bounds = new Rect(0, 0, SimulationGame.Resolution.Width * 2 / 3, SimulationGame.Resolution.Height) }; placeView.OnKeyPress(Keys.Escape, () => { if (placementMode == PlacementMode.CreateFromTileset) { tileSetSelectionView.Deselect(); } }); placeView.OnClick(placeObjectAtPosition); selectedObjectDetailTextView = new TextView(tilesetSelectionArea, ""); worldPartDetailsTextView = new TextView(tilesetSelectionArea, ""); inspectView = new InspectView(new Rect(0, 0, SimulationGame.Resolution.Width * 2 / 3, SimulationGame.Resolution.Height)); inspectView.OnSelect(handleInspectGameObjectSelection, handleInspectBlockSelection, handleInspectWorldLinkSelection); tileSetSelectionView = new TileSetSelectionView(tilesetSelectionArea); tilesetSelectionList = new ScrollableList(tilesetSelectionArea); tilesetSelectionList.OnSelect((UIElement selectedElement) => { placementMode = PlacementMode.CreateFromTileset; tileSetSelectionView.SetTileSet(((Button)selectedElement).Text); }); manageObjectList = new ScrollableList(tilesetSelectionArea); foreach (var tileset in tilesets) { var button = new Button(tileset, Point.Zero); button.ShowBorder = false; tilesetSelectionList.AddElement(button); } // Block Type Button blockTypeBtn = new Button("Blocks", new Point(Bounds.X, Bounds.Y + 10)); blockTypeBtn.OnClick(() => { placementType = PlacementType.BlockPlacement; handleManageBtnClick(); }); // Ambient Object Type Button ambientObjectTypeBtn = new Button("Ambient Objects", new Point(blockTypeBtn.Bounds.Right + 10, Bounds.Y + 10)); ambientObjectTypeBtn.OnClick(() => { placementType = PlacementType.AmbientObjectPlacement; handleManageBtnClick(); }); // Ambient Hitable Object Type Button ambientHitableObjectTypeBtn = new Button("Hitable Objects", new Point(ambientObjectTypeBtn.Bounds.Right + 10, Bounds.Y + 10)); ambientHitableObjectTypeBtn.OnClick(() => { placementType = PlacementType.AmbientHitableObjectPlacement; handleManageBtnClick(); }); // Ambient Hitable Object Type Button livingEntityTypeBtn = new Button("Living Entities", new Point(ambientHitableObjectTypeBtn.Bounds.Right + 10, Bounds.Y + 10)); livingEntityTypeBtn.OnClick(() => { placementType = PlacementType.LivingEntityPlacement; handleManageBtnClick(); }); // World Part Details Button worldPartBtn = new Button("World Details", new Point(livingEntityTypeBtn.Bounds.Right + 10, Bounds.Y + 10)); worldPartBtn.OnClick(() => { placementType = PlacementType.WorldPartDetails; placementMode = PlacementMode.NoPlacement; }); // Manage Button manageBtn = new Button("Manage", new Point(Bounds.X, blockTypeBtn.Bounds.Bottom + 10)); manageBtn.OnClick(handleManageBtnClick); // Create From Json createFromJsonBtn = new Button("Create From Json", new Point(manageBtn.Bounds.Right + 10, blockTypeBtn.Bounds.Bottom + 10)); createFromJsonBtn.OnClick(createNewObjectFromJson); // Create From Tileset createFromTilesetBtn = new Button("Create From Tileset", new Point(createFromJsonBtn.Bounds.Right + 10, blockTypeBtn.Bounds.Bottom + 10)); createFromTilesetBtn.OnClick(() => placementMode = PlacementMode.ChooseTileset); // Edit Btn editBtn = new Button("Edit", new Point(Bounds.X, manageBtn.Bounds.Bottom + 10)); editBtn.OnClick(editObject); // Create New From Btn createNewFromBtn = new Button("Create New From", new Point(editBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); createNewFromBtn.OnClick(createNewFrom); // Remove Btn removeBtn = new Button("Remove", new Point(createNewFromBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); removeBtn.OnClick(removeObject); // Create If not exist Btn createIfNotExistBtn = new Button("Create If Not Exist", new Point(Bounds.X, manageBtn.Bounds.Bottom + 10)); createIfNotExistBtn.OnClick(createNewObjectIfNotExists); // Create Btn createBtn = new Button("Create New", new Point(createIfNotExistBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); createBtn.OnClick(createNewObject); // Edit Instance Btn editInstanceBtn = new Button("Edit", new Point(Bounds.X, manageBtn.Bounds.Bottom + 10)); editInstanceBtn.OnClick(handleEditInstanceBtnClick); // Remove Instance Btn removeInstanceBtn = new Button("Remove", new Point(editInstanceBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); removeInstanceBtn.OnClick(handleRemoveInstanceBtnClick); // Show Instance Type Btn showInstanceTypeBtn = new Button("Show Type", new Point(removeInstanceBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); showInstanceTypeBtn.OnClick(handleShowInstanceTypeBtnClick); // Change Persistency Btn changePersistencyBtn = new Button("Change Persistency", new Point(Bounds.X, worldPartBtn.Bounds.Bottom + 10)); changePersistencyBtn.OnClick(handleChangePersistencyBtn); // Create WorldLink Btn createWorldLinkBtn = new Button("Create Worldlink", new Point(changePersistencyBtn.Bounds.Right + 10, worldPartBtn.Bounds.Bottom + 10)); createWorldLinkBtn.OnClick(handleCreateWorldLinkBtn); // Create Interior Btn createInteriorBtn = new Button("Create Interior", new Point(createWorldLinkBtn.Bounds.Right + 10, worldPartBtn.Bounds.Bottom + 10)); createInteriorBtn.OnClick(handleCreateInteriorBtn); // Change Interior Dimensions Btn changeInteriorDimensionsBtn = new Button("Change Dimensions", new Point(Bounds.X, manageBtn.Bounds.Bottom + 10)); changeInteriorDimensionsBtn.OnClick(hanleChangeInteriorDimensionsBtn); // Delete Interior Btn removeInteriorBtn = new Button("Remove Interior", new Point(changeInteriorDimensionsBtn.Bounds.Right + 10, manageBtn.Bounds.Bottom + 10)); removeInteriorBtn.OnClick(handleRemoveInteriorBtn); OnKeyPress(Keys.Delete, handleRemoveInstanceBtnClick); OnRightClick(() => { if (placementMode == PlacementMode.CreateFromTileset) { placementMode = PlacementMode.ChooseTileset; } }); OnKeyPress(Keys.Back, () => { if (placementMode == PlacementMode.CreateFromTileset) { placementMode = PlacementMode.ChooseTileset; } }); AddElement(blockTypeBtn); AddElement(ambientObjectTypeBtn); AddElement(ambientHitableObjectTypeBtn); AddElement(livingEntityTypeBtn); AddElement(worldPartBtn); }