示例#1
0
    void SelectCell(Vector3 position)
    {
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        HexCell        cell        = FindCell(coordinates);

        //判断点击格是否是当前格的周围且不能是当前格
        //if (((Mathf.Abs(NextCell.coordinates.X - CurrentCell.coordinates.X) + Mathf.Abs(NextCell.coordinates.Y - CurrentCell.coordinates.Y) + Mathf.Abs(NextCell.coordinates.Z - CurrentCell.coordinates.Z)) < 3)
        //    && ((NextCell.coordinates.X != CurrentCell.coordinates.X) || (NextCell.coordinates.Z != CurrentCell.coordinates.Z) || (NextCell.coordinates.Y != CurrentCell.coordinates.Y)))
        //{
        //更新当前格
        HexCell[]      cells = oneArround(cell);
        List <HexCell> list  = new List <HexCell>();

        for (int i = 0; i < cells.Length; i++)
        {
            if (gridcontent.getcontent(cells[i]) == "Resource" || gridcontent.getcontent(cells[i]) == "Electric" ||
                gridcontent.getcontent(cells[i]) == "FirstAid" || gridcontent.getcontent(cells[i]) == "MResource" ||
                gridcontent.getcontent(cells[i]) == "MElectric" || gridcontent.getcontent(cells[i]) == "MFirstAid")
            {
                list.Add(cells[i]);
            }
        }
        cloneAround = list.ToArray();
        PrintArround(grid.CellColor[5], list.ToArray());
        //}
        //}
    }
        public void newCoordinatesFromPositionTest()
        {
            Vector3 position = new Vector3();

            position.x = 2;
            position.y = 1;
            position.z = 3;

            float x = position.x / (HexMetrics.innerRadius * 2f);
            float y = -x;

            float offset = position.z / (HexMetrics.outerRadius * 3f);

            x -= offset;
            y -= offset;

            int iX = Mathf.RoundToInt(x);
            int iY = Mathf.RoundToInt(y);
            int iZ = Mathf.RoundToInt(-x - y);

            HexCoordinates coord = HexCoordinates.FromPosition(position);

            Assert.AreEqual(iX, coord.X);
            Assert.AreEqual(iY, coord.Y);
            Assert.AreEqual(iZ, coord.Z);
        }
示例#3
0
    void InterferenceCell(Vector3 position)
    {
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        HexCell        cell        = FindCell(coordinates);

        if (((Mathf.Abs(cell.coordinates.X - CurrentCell.coordinates.X) + Mathf.Abs(cell.coordinates.Y - CurrentCell.coordinates.Y) + Mathf.Abs(cell.coordinates.Z - CurrentCell.coordinates.Z)) < 6) &&
            ((cell.coordinates.X != CurrentCell.coordinates.X) || (cell.coordinates.Z != CurrentCell.coordinates.Z) || (cell.coordinates.Y != CurrentCell.coordinates.Y)))
        {
            if (interferenceCells != null)
            {
                InterferenceColorReset();
            }
            List <HexCell> cells = new List <HexCell>(oneArround(cell));
            cells.Add(cell);
            for (int i = 0; i < cells.Count; i++)
            {
                if (cells[i] == CurrentCell)
                {
                    cells.Remove(cells[i]);
                }
            }
            PrintArround(grid.CellColor[8], cells.ToArray());
            interferenceCells = cells.ToArray();
        }
        if (interferenceCells == null)
        {
            Debug.Log("3位置");
        }
    }
示例#4
0
 public HexCell GetCell(Vector3 position)
 {
     position = transform.InverseTransformPoint(position);//Transform from worldspace to localspace
     HexCoordinates hexPosition = HexCoordinates.FromPosition(position);
     int index = hexPosition.Z * width + (hexPosition.X + hexPosition.Z / 2);//hexPos Z * w => Z rows of cells | x + z/2 because of X-axis shift
     return cells[index];
 }
示例#5
0
文件: HexGrid.cs 项目: mmielus/Stars
    public void TouchCell(Vector3 position)

    {
        if (HexCoordinates.FromPosition(position) != null)
        {
            HexCoordinates coordinates = HexCoordinates.FromPosition(position);

            GameObject selectedObject;
            if ((selectedObject = EventManager.selectionManager.SelectedObject) != null)
            {
                if (selectedObject.tag == "Unit")
                {
                    var spaceship = selectedObject.GetComponent <Spaceship>();
                    if (coordinates != spaceship.Coordinates && !spaceship.Flying && FromCoordinates(coordinates) != null && FromCoordinates(coordinates).IsEmpty())
                    {
                        spaceship.Destination = coordinates;
                        //DEBUG - after mouse clik unit goes {speed} fields in destination direction, hold mouse down to "see path"
                        StartCoroutine(spaceship.MoveTo(spaceship.Destination));
                    }
                }
            }
            if (FromCoordinates(coordinates) != null)
            {
                EventManager.selectionManager.GridCellSelection =
                    FromCoordinates(coordinates); //it's only one match, First() used to change type
            }
            //Debug.Log("touched at " + coordinates);
        }
    }
示例#6
0
    void TouchCell(Vector3 position)
    {
        position = transform.InverseTransformDirection(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);

        Debug.Log("touched at" + position);
    }
示例#7
0
    void Start()
    {
        gridCanvas = GetComponentInChildren <Canvas>();
        hexMesh    = GetComponentInChildren <HexMesh>();

        //Calculate grid position and scale according to the aspect ratio.
        Vector3 worldPos    = Camera.main.ScreenToWorldPoint(-Camera.main.transform.localPosition);
        Vector3 outerRadius = new Vector3(HexMetrics.outerRadius, HexMetrics.outerRadius, 0f);

        transform.localScale = transform.localScale * Camera.main.aspect / (200f / 300f);
        transform.position   = worldPos + Vector3.Scale(outerRadius, transform.lossyScale);

        //Adapt the grid size to fit the screen.
        Vector3        maxWorldPos    = Camera.main.ViewportToWorldPoint(new Vector3(Camera.main.rect.width - Camera.main.rect.x, Camera.main.rect.height - Camera.main.rect.y, 0f));
        Vector3        maxLocalPos    = transform.InverseTransformPoint(maxWorldPos);
        HexCoordinates maxCoordinates = HexCoordinates.FromPosition(maxLocalPos);

        width  = maxCoordinates.X;
        height = maxCoordinates.Y - 1; //Remove 1 to keep one extra line for the score display.

        cells = new HexCell[width, height];

        for (int y = 0; y < height; ++y)
        {
            for (int x = 0; x < width; ++x)
            {
                CreateCell(x, y);
            }
        }

        if (Debug.isDebugBuild)
        {
            hexMesh.Triangulate(cells);
        }
    }
示例#8
0
文件: HexGrid.cs 项目: Szyximus/Stars
    /* Calculates path on change of hovered cell in coroutine, places it in
    * PathToDraw field and after that executes action given as argument  */
    private void PathToDrawOnMouseHover(System.Action action)
    {
        if ((EventManager.selectionManager.SelectedObject) == null || (EventManager.selectionManager.SelectedObject.tag) != "Unit" || FlyingSpaceshipLock || uiListener.IsUIOverride)
        {
            if (PathToDraw != null)
            {
                PathToDraw = null;
            }
            return;
        }

        Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(inputRay, out hit))
        {
            HexCoordinates lastCoordinates = MouseHooverCoordinates;
            MouseHooverCoordinates = HexCoordinates.FromPosition(hit.point);

            if (lastCoordinates != MouseHooverCoordinates)
            {
                PathToDraw = null;
                StartCoroutine(GetPathToDraw());

                action();
            }
        }
    }
示例#9
0
    void TouchCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);

        int     index = coordinates.X + coordinates.Z * width + coordinates.Z / 2;
        HexCell cell  = cells[index];

        if (cell.playerCellStatus == PlayerCellStatus.NOTHING)
        {
            // doublecheck if its neighbor or not (rapid mouse movement could cause issues)
            for (int i = 0; i < 6; i++)
            {
                HexCell neighbor = cell.GetNeighbor((HexDirection)i);

                if ((neighbor != null) && (neighbor.playerCellStatus != PlayerCellStatus.NOTHING))
                {
                    cell.color            = touchedColor;
                    cell.playerCellStatus = PlayerCellStatus.PLAYER;
                    RemoveFurthestCell();

                    if (cell.enemyCellStatus != EnemyCellStatus.NOTHING)
                    {
                        gameState.levelStarter.attack -= gameState.levelStarter.enemyPower;
                    }
                    break;
                }
            }
        }
    }
示例#10
0
    public HexCell GetCell(Vector3 worldPosition)
    {
        Vector3        position   = transform.InverseTransformPoint(worldPosition);
        HexCoordinates coordinate = HexCoordinates.FromPosition(position);

        return(GetCell(coordinate.X, coordinate.Z));
    }
示例#11
0
 void TouchCell(Vector3 position)
 {
     position = transform.InverseTransformPoint(position);
     HexCoordinates coordinates = HexCoordinates.FromPosition(position);
     int            index       = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2;
     HexCell        cell        = cells[index];
 }
示例#12
0
    void CreateCell(int x, int z, int i)
    {
        Vector3 position;

        position.x = (x + z * 0.5f - z / 2) * (HexMetrics.innerRadius * 2f);
        position.y = 0f;
        position.z = z * (HexMetrics.outerRadius * 1.5f);

        HexCell cell = cells[i] = Instantiate <HexCell>(cellPrefab);

        cell.transform.SetParent(transform, false);
        cell.transform.localPosition = position;
        cell.coordinates             = HexCoordinates.FromOffsetCoordinates(x, z);
        cell.index          = cell.coordinates.X + cell.coordinates.Z * width + cell.coordinates.Z / 2;
        cell.transform.name = HexCoordinates.FromPosition(cell.transform.position).ToString();

        cell.cost = Random.Range(0, 6); // random range 0 - 5 (int)
        //  cell.color = Color.magenta /cell.cost;
        cell.color = Color.grey * 0.1f;


        Text label = Instantiate <Text>(cellLabelPrefab);

        label.rectTransform.SetParent(gridCanvas.transform, false);
        label.rectTransform.anchoredPosition =
            new Vector2(position.x, position.z);
        //label.rectTransform.rect.Set(position.x, position.y, 10,15);
        label.text = cell.coordinates.ToStringOnSeparateLines();
    }
示例#13
0
    public void HighlightMouse(Vector3 position, int radius, HexColor color)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2;

        if (index >= 0 && index < totalCells && CheckOuterEdges(index, coordinates))
        {
            HexCell cell = cells[index];
            currentCell = cell;
            // if color is red (for targeting) and cell is white
            if (previousCell != null && currentCell != previousCell)
            {
                if ((color == HexColor.RED && cell.GetWhite() == true) || color != HexColor.RED)
                {
                    HighLightCellsCircle(cell, radius, color);
                }
                else if (color == HexColor.RED)
                {
                    clearHighlightedList(color);
                }
            }

            previousCell = currentCell;
        }
    }
    public HexCell GetCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);

        return(GetCell(coordinates));
    }
示例#15
0
    void TouchCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);

        Debug.Log("touched at " + coordinates.ToString());
    }
示例#16
0
    public HexCoordinates ReturnHexCoords(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);

        return(coordinates);
    }
示例#17
0
    public HexCell ChangeHex(Vector3 position)
    {
        HexCoordinates coordinates =
            HexCoordinates.FromPosition(position, HexOuterRadiusInMeters, HexInnerRadiusInMeters);
        int index = coordinates.X + coordinates.Y * chunkSizeX + coordinates.Y / 2;

        return(cells[index]);
    }
示例#18
0
    public HexGridChunk GetChunk(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);//坐标转换
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * cellCountWidth + coordinates.Z / 2;

        return(cells[index].chunkParent);
    }
示例#19
0
    public HexCell GetCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * width + coordinates.Z / 2;

        return(index >= 0 && index < cells.Length ? cells[index] : null);
    }
示例#20
0
    /// <summary>
    /// 得到细胞,根据位置
    /// </summary>
    public HexCell GetCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        //这里是循环坐标,所以用重新计算coordinates,
        var coordinates = HexCoordinates.FromPosition(position);

        return(GetCell(coordinates));
    }
示例#21
0
    //use send position cross function
    public HexCoordinates getTouchCoordinate()
    {
        Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        Physics.Raycast(inputRay, out hit);
        return(HexCoordinates.FromPosition(hit.point));
    }
示例#22
0
//        private void Start()
//        {
//            _currentIndex = _startCell;
//        }

        public List <Vector3> RoutePositions(Vector3 startPoint)
        {
            _currentIndex = HexCoordinates.FromPosition(startPoint).ToIndexIfWith(HexWidth);

            UpdateOnRequest();

            return(_routePosition);
        }
示例#23
0
    public HexCell GetCellByPosition(Vector3 position)
    {
        //position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * width + coordinates.Z / 2;

        return(cells[index]);
    }
示例#24
0
    public HexCell GetHexcellFromPosition(Vector3 pos)
    {
        HexCoordinates coordinates = HexCoordinates.FromPosition(pos);
        int            index       = coordinates.X + coordinates.Z * width + coordinates.Z / 2;
        HexCell        cell        = cells[index];

        return(cell);
    }
示例#25
0
    private HexCell GetCellByPosition(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        var coordinates = HexCoordinates.FromPosition(position);
        var index       = coordinates.X + coordinates.Z * Width + coordinates.Z / 2;

        return(index > 0 && index < _cells.Length ? _cells[index] : null);
    }
示例#26
0
    /*
     *  returns the hex at a given position
     */
    public HexCell getHex(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * width + coordinates.Z / 2;

        return(hexGrid[index]);
    }
示例#27
0
    public HexCell GetCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2; //convert the cell coordinates to an array index

        return(cells[index]);
    }
示例#28
0
    public int GetCellIndex(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * width + coordinates.Z / 2;

        return(index);
    }
示例#29
0
    public HexCell GetCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinates = HexCoordinates.FromPosition(position);
        int            index       = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2;

        return(_cells[index]);
    }
示例#30
0
    void TouchCell(Vector3 position)
    {
        position = transform.InverseTransformPoint(position);
        HexCoordinates coordinate = HexCoordinates.FromPosition(position);
        HexCell        cell       = GetCell(coordinate.X, coordinate.Z);

        GameManagerScript.Instance.HandleOnClickCell(cell);
    }