Exemple #1
0
        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 );");
                                }
                            }
                        }
                    }
                }
            }
        }