public override void Update(float dt) { m_select_tile_screen = Input2.GamePad0.Cross.Down; if (m_select_tile_screen) { if (Input2.Touch00.Down) { m_selected_tile_unclamped = WhichCell(m_tile_select_camera.GetTouchPos() / TextureInfo.TileSizeInPixelsf); } if (m_selected_tile_unclamped == m_selected_tile_unclamped.ClampIndex(TextureInfo.NumTiles)) { m_selected_tile = m_selected_tile_unclamped; } else { set_erase_mode(); // invalid tile => erase mode } bool zoom = false; //Input2.GamePad0.Triangle.Down; // zoom = A key on PC bool pan = true; //Input2.GamePad0.Square.Down; // pan = W key on PC m_tile_select_camera.Navigate(pan ? 1 : zoom ? 2 : 0); } else { if (Input2.Touch00.Down && !navigating) { m_world_edit_touch_pos = GetTouchPos(); if (Input2.GamePad0.Circle.Down) { Vector3i coord = m_world_edit_cell; if (IsValidIndex(coord)) { if (is_erase_mode()) { DeleteBlock(coord); } else { // for objects larger than one tile, you have to select the middle cell of the first, bottom row of the object if (m_selected_tile == new Vector2i(0, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 3)); } if (m_selected_tile == new Vector2i(1, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 3)); } if (m_selected_tile == new Vector2i(2, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 2)); } if (m_selected_tile == new Vector2i(3, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 2)); } if (m_selected_tile == new Vector2i(5, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(-1, 0), new Vector2i(3, 3)); } if (m_selected_tile == new Vector2i(8, 0)) { SetBlockRange(coord, m_selected_tile, new Vector2i(-1, 0), new Vector2i(3, 3)); } if (m_selected_tile == new Vector2i(2, 2)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 2)); } if (m_selected_tile == new Vector2i(3, 2)) { SetBlockRange(coord, m_selected_tile, new Vector2i(0, 0), new Vector2i(1, 2)); } else { SetBlock(coord, m_selected_tile, m_second_object); } } } } } // some exciting game pad editing controls if (Input2.GamePad0.Up.Press) { m_edit_z++; } if (Input2.GamePad0.Down.Press) { m_edit_z = Common.Max(0, m_edit_z - 1); } if (Input2.GamePad0.Right.Press) { m_second_object = !m_second_object; } if (Input2.GamePad0.L.Press) { System.Console.WriteLine("---"); // serialize as C# we can copy paste in the init function Vector3i index; for (index.Z = 0; index.Z < m_num_cells.Z; ++index.Z) { for (index.Y = m_num_cells.Y - 1; index.Y >= 0; --index.Y) { for (index.X = m_num_cells.X - 1; index.X >= 0; --index.X) { Cell cell = CellAt(index); if (cell == null) { continue; } if (cell.Data2Set) { System.Console.WriteLine("SetBlock( new Vector3i(" + index.X + "," + index.Y + "," + index.Z + "), new Vector2i(" + cell.Data1.TileIndex2D.X + "," + cell.Data1.TileIndex2D.Y + "), false );"); } if (cell.Data1Set) { System.Console.WriteLine("SetBlock( new Vector3i(" + index.X + "," + index.Y + "," + index.Z + "), new Vector2i(" + cell.Data2.TileIndex2D.X + "," + cell.Data2.TileIndex2D.Y + "), true );"); } } } } } } }