示例#1
0
 public void set2DArray()
 {
     data = new ArrayLayout();
     ArrayLayout.COLUMNS = c_COLUMNS;
     data.rows           = new ArrayLayout.rowData[b_ROWS];
     data.make_columns();
 }
示例#2
0
 public void set2DArray()
 {
     data = new ArrayLayout();
     ArrayLayout.COLUMNS = Game_Controller.Instance.COLUMNS;
     data.rows           = new ArrayLayout.rowData[Game_Controller.Instance.ROWS];
     data.make_columns();
 }
示例#3
0
 public void changeRoomList()
 {
     if (pmove.playerFloor == "FirstFloor")
     {
         rooms = FirstFloor;
     }
     else if (pmove.playerFloor == "SecondFloor")
     {
         rooms = SecondFloor;
     }
     else if (pmove.playerFloor == "ThirdFloor")
     {
         rooms = ThirdFloor;
     }
 }
示例#4
0
        // assumes that there are n_dims indices pushed onto stack
        // stack balance: in = n_dims, out = 1
        private void calc_offset(ArrayLayout arr, int n_dims)
        {
            var dims = 0.UpTo(n_dims - 1);

            dims.Reverse().ForEach((dim, i) =>
            {
                var @ref = arr.Node.AssertCast <HirExpression>();
                Func <int, HirExpression> get_length = dim1 =>
                {
                    var m_getlength = typeof(Array).GetMethod("GetLength").AssertNotNull();
                    return(new Eval(new Apply(new Lambda(m_getlength), @ref, new HirConst(dim1))));
                };

                var e_subprod = (dim + 1).UpTo(n_dims - 1).Fold(null as HirExpression, (curr, j) =>
                {
                    var factor = get_length(j);
                    return(curr == null ? factor : Operator.Multiply(curr, factor));
                }) ?? new HirConst(1);
                ld(e_subprod);

                ld("mul.lo");
                if (i != 0)
                {
                    ld("add");
                }
                if (i != n_dims - 1)
                {
                    swap();
                }
            });

            var r_offset = (Reg)pop_expr();
            var el_t     = arr.Node.Type().GetElementType();
            var el_sz    = Marshal.SizeOf(el_t);

            _ptx.Add(new mul {
                mode = mulm.lo, type = typeof(int), d = r_offset, a = r_offset, b = new PtxConst(el_sz)
            });
            push(r_offset);

            var raw = (Reg)arr.Ptr.Offset.Base;

            ld(raw);
            op("add");
        }
示例#5
0
    public static List <Position> CoveredPositions(this ArrayLayout layout, Position location)
    {
        var coveredPositions = new List <Position>();

        for (int y = 0; y < layout.column.Length; y++)
        {
            for (int x = 0; x < layout.column[y].row.Length; x++)
            {
                if (layout.column[y].row[x])
                {
                    var pos = new Position(x, y) + location - BuildingData.center;
                    //print(new Position(x, y) + center - BuildingData.center);
                    //myTile.itemPlaceable = false;
                    coveredPositions.Add(pos);
                }
            }
        }

        return(coveredPositions);
    }
示例#6
0
    private void HandleGridUpdate()
    {
        if (grid == null)
        {
            grid = new ArrayLayout();
        }

        if (grid.rows == null)
        {
            grid.rows = new List <ArrayLayout.RowData>();
            ArrayLayout.RowData column = new ArrayLayout.RowData {
                row = new List <Tile> {
                    EditorCreateNewTileObject(0, 0)
                }
            };
            grid.rows.Add(column);
        }

        // In case we are editing data, not the grid size, return
        if (gridSize.x == grid.rows.Count && gridSize.x > 0)
        {
            if (gridSize.y == grid.rows[0].row.Count && gridSize.y > 0)
            {
                return;
            }
        }

        if (gridSize.x <= 0)
        {
            // Always make sure we have at least 1 value
            gridSize.x = 1;
            int endIndex = grid.rows.Count - gridSize.x;

            DestroyTileRow(gridSize.x, endIndex);
            grid.rows.RemoveRange(gridSize.x, endIndex);
            return;
        }

        if (gridSize.y <= 0)
        {
            // Always make sure we have at least 1 value
            gridSize.y = 1;
            for (int i = 0; i < grid.rows.Count; i++)
            {
                int endIndex = grid.rows[i].row.Count - gridSize.y;

                DestroyTileColumn(grid.rows[i].row, gridSize.y, endIndex);
                grid.rows[i].row.RemoveRange(gridSize.y, endIndex);
            }
            return;
        }

        // Make the rows bigger in case of a resize
        if (gridSize.x > grid.rows.Count)
        {
            int difference = gridSize.x - grid.rows.Count;

            // Update the rows and make sure the columns are filled up with the correct size
            for (int i = grid.rows.Count, size = grid.rows.Count + difference; i < size; i++)
            {
                List <Tile> columns = new List <Tile>();
                if (columns.Count < gridSize.y)
                {
                    for (int y = 0; y < gridSize.y; y++)
                    {
                        columns.Add(EditorCreateNewTileObject(i, y));
                    }
                }
                ArrayLayout.RowData rowData = new ArrayLayout.RowData {
                    row = columns
                };
                grid.rows.Add(rowData);
            }
        }
        // Make the rows smaller in case of a resize
        else if (gridSize.x < grid.rows.Count)
        {
            int endIndex = grid.rows.Count - gridSize.x;

            DestroyTileRow(gridSize.x, endIndex);
            grid.rows.RemoveRange(gridSize.x, endIndex);
        }
        // In case only the gridSize.y has been updated
        else
        {
            // Fill up the columns
            for (int x = 0; x < gridSize.x; x++)
            {
                if (gridSize.y > grid.rows[x].row.Count)
                {
                    int difference = gridSize.y - grid.rows[x].row.Count;

                    for (int y = grid.rows[x].row.Count, size = grid.rows[x].row.Count + difference; y < size; y++)
                    {
                        grid.rows[x].row.Add(EditorCreateNewTileObject(x, y));
                    }
                }
                else if (gridSize.y < grid.rows[x].row.Count)
                {
                    int endIndex = grid.rows[x].row.Count - gridSize.y;

                    DestroyTileColumn(grid.rows[x].row, gridSize.y, endIndex);
                    grid.rows[x].row.RemoveRange(gridSize.y, endIndex);
                }
            }
        }
    }
示例#7
0
 public ArrayPosition(int r, int c, ArrayLayout barrelCP)
 {
     this.x = r;
     this.y = c;
     this.checkpointTransform = barrelCP.rows[r].column[c].transform;
 }
    /// <summary>
    /// This entire function works based on "God only knows"
    /// Try to make a better code or leave as it is.
    /// </summary>
    /// <param name="zMaxPosition"></param>
    private void ChangeStagePosition(float zMaxPosition)
    {
        baseStageBuilder[0].start.SetActive(false);

        //currentStagesDesign.RemoveRange(0, 4);

        #region POG do Capeta
        ArrayLayout lastButOne = currentStageConfig[4];
        ArrayLayout last       = currentStageConfig[5];
        //Array.Clear(currentStageConfig, 0, currentStageConfig.Length);

        currentStageConfig[0] = lastButOne;
        currentStageConfig[1] = last;
        #endregion
        //currentStageConfig.RemoveRange(0, 4);

        for (int i = 0; i < baseStageBuilder.Length; i++)
        {
            //if(currentStagesDesign.ElementAtOrDefault(i) != null)
            if (i < 2)
            {
                for (int z = 0; z < 13; z++)
                {
                    for (int x = 0; x < 13; x++)
                    {
                        baseStageBuilder[i].UpdateStageDesign(x, z, currentStageConfig[i].rows[z].row[x]);
                    }
                }
            }
            else
            {
                //var stageDeisng = easyStageDesign[Random.Range(0, easyStageDesign.Length)];
                //currentStagesDesign.Add(stageDeisng);
                //baseStageBuilder[i].UpdateStageDesign(stageDeisng);

                var stageDeisgn = easyStageDesign[UnityEngine.Random.Range(0, easyStageDesign.Length)];
                //currentStagesDesign.Add(stageDeisgn);
                //currentStageConfig[i] = stageDeisgn.data;
                //currentStageConfig.Add(stageDeisgn.data);

                for (int z = 0; z < 13; z++)
                {
                    for (int x = 0; x < 13; x++)
                    {
                        int value = stageDeisgn.data.rows[z].row[x];

                        if (value == (int)StageElements.Fuel)
                        {
                            float rnd = UnityEngine.Random.Range(0f, 100f) / 100f;
                            if (rnd > spawnFuelPercent)
                            {
                                value = (int)StageElements.Empty;
                            }
                        }

                        baseStageBuilder[i].UpdateStageDesign(x, z, value);
                        //currentStageConfig[i].rows[z].row = new int[13];
                        currentStageConfig[i].rows[z].row[x] = value;
                    }
                }
            }
        }
    }