示例#1
0
        //实例化一个hexGrid-
        public void AchieveHexGrid(HexGridItem HexGrid)
        {
            this.modelInfo = HexGrid.modelInfo;
            foreach (KeyValuePair <HexCoordinates, HexCellItem> keyValuePair in HexGrid.cellMap)
            {
                HexCellItem hexCellItem = keyValuePair.Value;
                int         x           = hexCellItem.X;
                int         z           = hexCellItem.Z;
                Vector3     position    = new Vector3();
                //格子中心坐标
                position = HexMetrics.erectPosition(position, x, z, this.modelInfo.arrayMode);
                //创建一个格子实例
                HexCellView cell = Instantiate <HexCellView>(cellPrefab);
                cell.transform.SetParent(transform, false);
                cell.transform.localPosition = position;
                cell.hexCellItem             = hexCellItem;
                TextMeshProUGUI HexCellLabel = UtilityHelper.FindChild <TextMeshProUGUI>(cell.transform, "HexCellLabel");
                HexCellLabel.text = hexCellItem.coordinates.ToStringOnSeparateLines();
                cellViewMap.Add(keyValuePair.Key, cell);

                //Text label = Instantiate<Text>(cellLabelPrefab);
                //label.rectTransform.SetParent(gridCanvas.transform, false);
                //label.rectTransform.anchoredPosition =
                //    new Vector2(position.x, position.y);
                //label.text = hexCellItem.coordinates.ToStringOnSeparateLines();
            }
            //渲染需要放在格子生成完毕后
            hexMesh.Triangulate(cellViewMap, this.modelInfo.arrayMode);
        }
示例#2
0
        //监听
        public override void HandleNotification(INotification notification)
        {
            //处理公共请求
            HandleNotificationCommon(notification);
            switch (notification.Name)
            {
            //划线相关
            case OperateSystemEvent.OPERATE_TRAIL_DRAW:
                switch (notification.Type)
                {
                //划线开始
                case OperateSystemEvent.OPERATE_TRAIL_DRAW_START:
                    operateSystemView.trailDrawLine.TrailDrawStart();
                    break;

                //添加划线组件
                case OperateSystemEvent.OPERATE_TRAIL_DRAW_CREATE:
                    operateSystemView.AchieveOperateSystemView();
                    hexGridMediator = Facade.RetrieveMediator(HexGridMediator.NAME) as HexGridMediator;
                    operateSystemView.trailDrawLine.OnMouseButtonUp += () =>
                    {
                        if (operateSystemView.trailDrawLine.overVec == null)
                        {
                            return;
                        }
                        //如果没有移动只是点击也需要判断
                        if (operateSystemView.trailDrawLine.overVec.x == 0 &&
                            operateSystemView.trailDrawLine.overVec.y == 0 &&
                            operateSystemView.trailDrawLine.overVec.z == 0)
                        {
                            return;
                        }

                        //判断选择了什么,放在视图层做
                        HexCellView hexCellView = hexGridMediator.GetHexCellViewByPosition(operateSystemView.trailDrawLine.overVec);
                        if (hexCellView != null)
                        {
                            //战场上哪一个格子
                            SendNotification(OperateSystemEvent.OPERATE_SYS, hexCellView.hexCellItem, OperateSystemEvent.OPERATE_SYS_DRAW_END_HEX);
                            return;
                        }
                        Vector3 startPosition = new Vector3();
                        startPosition.x = 100;
                        startPosition.z = -15;
                        //选择了献祭区域
                        bool isCircuit = GeometricUtil.CheckPointInSomeRectangle(10, 10, startPosition, operateSystemView.trailDrawLine.last);
                        if (isCircuit)
                        {
                            SendNotification(OperateSystemEvent.OPERATE_SYS, null, OperateSystemEvent.OPERATE_SYS_DRAW_END_CIRCUIT);
                            return;
                        }
                        //还可能选择了其他目标
                        //如果什么都没选
                        SendNotification(OperateSystemEvent.OPERATE_SYS, null, OperateSystemEvent.OPERATE_SYS_DRAW_END_NULL);
                    };
                    break;
                }
                break;
            }
        }
示例#3
0
        public void TouchCell(Vector3 position)
        {
            HexCellView cell = GetCellByPosition(position);

            if (cell != null)
            {
                cell.OnClick();
            }
        }
示例#4
0
        //根据坐标返回所点击的cell
        public HexCellView GetCellByPosition(Vector3 position)
        {
            HexCellView cell = null;

            position = transform.InverseTransformPoint(position);
            if (HexUtil.CheckOnHexGrid(position, this.modelInfo))
            {
                HexCoordinates coordinates = HexUtil.FromPosition(position, this.modelInfo);
                cell = cellViewMap[coordinates];
            }
            return(cell);
        }
示例#5
0
        //确定顶点
        void Triangulate(HexCellView cell, string arrayMode)
        {
            Vector3 center = cell.transform.localPosition;

            Vector3[] arrayCorners = HexMetrics.getCornersByArrayMode(arrayMode);
            for (int i = 0; i < 6; i++)
            {
                AddTriangle(
                    center,
                    center + arrayCorners[i],
                    center + arrayCorners[i + 1]
                    );
                AddTriangleColor(Color.grey);
            }
        }